# SDR — Dados Ibama: mapa de ativos, referência CMDB e exportação KML/Leaflet


> **Eixo:** `Modelo de Servicos` (Modelo de Servicos | Arquitetura Contratual | Ambos)

| Campo | Valor |
|-------|--------|
| **SSoT** | Sim — dono da **especificação de implementação** no repositório para a pasta `Dados-ibama/`, mapas tabulares em Markdown, scripts Python, arquivos KML e integração com a página **Mapa de Localidades** no site |
| **Estado** | âncora operacional (regerar artefatos pelos comandos da seção 5) |

---

## 1. Âmbito no repositório

Caminho-base: **`Dados-ibama/`** na raiz do workspace **CentralDeServicos** (irmão de `processo-contratacao/`; alimenta o site em [`../../arquitetura-contratual/site/`](../../arquitetura-contratual/site/)).

Nos quadros abaixo, caminhos **`Dados-ibama/...`** são relativos à **raiz** do repositório (o mesmo que [`../../Dados-ibama/`](../../Dados-ibama/) a partir desta pasta `SDRs/`).

---

## 2. Artefatos (fonte vs gerado)

| Caminho | Tipo | Papel |
|---------|------|--------|
| `Dados-ibama/localidades_ibama.md` | Fonte | **91** unidades; latitude/longitude; precisão (exata/aproximada); coluna opcional *Servidores (unidade)*; base de **coordenadas** para todos os KML de mapa |
| `Dados-ibama/qtd-servidores-municipio.md` | Fonte | Quantidade de **servidores públicos** (pessoas) por município — usado no mapa de **dimensionamento** e no JS `mapa-ibama-data.js` |
| `Dados-ibama/localidades_ibama_byCodex.md` | Fonte auxiliar | Cópia derivada de localidades (coordenadas); **não** é obrigatório para o pipeline KML principal, que usa `localidades_ibama.md` |
| `Dados-ibama/itens-configuracao-cmdb-top100.md` | Referência | Taxonomia de **tipos de CI** (hardware, rede, lógicos, serviços) — **não duplicar** a tabela neste SDR; usar o arquivo como anexo lógico |
| `Dados-ibama/mapa-ativos-por-localidade-dimensionamento.md` | **Gerado** | Rodar `_calc_mapa_ativos.py`. Mapa contratual: teto **5300** usuários de rede, tiers Sede/SUPES CG/demais, **2 servidores de borda só em SUPES** (exceto MS CG), pacote de trabalho do usuário, totais **nuvem + datacenter** (seção 4 abaixo) |
| `Dados-ibama/mapa-ativos-localidades-cmdb_byCodex.md` | **Gerado** | Rodar `gerar_mapa_ativos_bycodex.py`. Tabela **byCodex** com colunas de CIs de sustentação, segurança e governança; linha sintética **SEDE BRASÍLIA**; usa `localidades_ibama_byCodex.md` e premissas da seção 4.1 |
| `Dados-ibama/_calc_mapa_ativos.py` | Script | Gera `mapa-ativos-por-localidade-dimensionamento.md`; contém **constantes** de inventário lógico (seção 4) |
| `Dados-ibama/gerar_mapa_ativos_bycodex.py` | Script | Gera `mapa-ativos-localidades-cmdb_byCodex.md`; contém as premissas específicas da variante byCodex (seção 4.1) |
| `Dados-ibama/gerar_kml_mapa_ibama.py` | Script | Gera KML e `mapa-ibama-data.js` (seção 6) |

---

## 3. Duas variantes de mapa em Markdown (não unificar sem decisão)

| Variante | Arquivo | Uso |
|----------|---------|-----|
| **Dimensionamento** | `mapa-ativos-por-localidade-dimensionamento.md` | Contratos sustentação/segurança/governança; efetivos escalados + terceiros; coluna *Servidores físicos locais* (modelo SUPES); **pacote usuário** |
| **byCodex** | `mapa-ativos-localidades-cmdb_byCodex.md` | Estimativa com colunas **CIs** sustentação/segurança/governança; linha sintética **SEDE BRASÍLIA** (ID **0** no markdown byCodex; casar com coordenada da SEDE em `localidades_ibama.md` por nome para KML) |

---

## 4. Inventário lógico nuvem e datacenter (totais corporativos)

Os **números canônicos** para reproduzir o markdown de dimensionamento estão nas **constantes** no topo de `_calc_mapa_ativos.py` (editar **só** ali e regerar o `.md`):

| Constante | Valor atual |
|-----------|------------:|
| `SISTEMAS_APLICACAO_DC` | 68 |
| `VMS_DATACENTER_LOCAL` | 360 |
| `CONTAINERS_DATACENTER_LOCAL` | 250 |
| `VMS_NUVEM` | 400 |
| `CONTAINERS_NUVEM` | 600 |

Totais derivados: **760** VMs, **850** containers (soma DC local + nuvem). O resumo executivo em `mapa-ativos-localidades-cmdb_byCodex.md` deve **alinhar** a esses totais quando as constantes mudarem.

---

## 4.1 Variante byCodex — premissas canônicas de reprodução

Para um agente reconstruir **exatamente** o `mapa-ativos-localidades-cmdb_byCodex.md` atual, usar `Dados-ibama/gerar_mapa_ativos_bycodex.py` e as regras abaixo.

### Entradas

| Entrada | Uso |
|---------|-----|
| `localidades_ibama_byCodex.md` | Base das 90 localidades originais e municípios/base; não possui a linha sintética de sede |
| `qtd-servidores-municipio.md` | Quantidade de servidores públicos por município |
| `itens-configuracao-cmdb-top100.md` | Taxonomia de referência citada no texto final; não entra em cálculo numérico |

### Regras de distribuição

- Adicionar uma linha sintética `ID 0 | DF | SEDE BRASÍLIA | Brasília` antes das 90 localidades.
- Agrupar municípios por `UF + município normalizado`; `São Luís / São José de Ribamar` conta como `São Luís`, para evitar duplicidade.
- Quando houver mais de uma unidade no mesmo município, distribuir servidores públicos por peso de tipo de unidade:
  - `SEDE`: 20.0
  - `SUPES`: 1.0
  - `GEREX`: 0.8
  - `UNID` ou `UT`: 0.7
  - `CETAS`: 0.25
  - `AEROPORTO`, `POSTO`, `BASE`, `BRIGADA`, `ARF`: 0.25
  - demais: 0.5
- A fonte municipal soma 3.335 servidores, mas a variante byCodex distribui **3.313**, porque `Campinas/SP`, `Benevides/PA` e `Oiapoque/AP` constam em `qtd-servidores-municipio.md` e não constam em `localidades_ibama_byCodex.md`.

### Terceirizados e usuários

- Teto de usuários de rede: **5.300**.
- `SEDE BRASÍLIA`: **800** terceirizados fixos.
- Terceirizados brutos fora da sede:
  - servidores >= 80: 50% dos servidores;
  - servidores entre 40 e 79: **100%** dos servidores, prevalecendo a regra mais recente do pedido do usuário;
  - servidores entre 15 e 39: 80% dos servidores;
  - servidores < 15: 0, por ausência de regra específica.
- Ajustar terceirizados fora de Brasília proporcionalmente para fechar o teto de 5.300 usuários. O fator atual calculado é **72.78%**.

### Ativos por localidade

- Estações/notebooks = 1 por usuário de rede.
- APs Wi-Fi = `ceil(usuários / 15)`, mínimo 1 por localidade.
- Firewall = 1 por localidade.
- SD-WAN = 1 por localidade.
- SUPES = 2 servidores locais (`DNS` + `file server`).
- Datacenter local:
  - 360 VMs + 250 containers = **610** workloads lógicos locais;
  - dividir igualmente entre `SEDE BRASÍLIA` e `SUPES CAMPO GRANDE/MS`: 305 + 305.
- Nuvem:
  - 400 VMs + 600 containers = **1.000** workloads lógicos em nuvem;
  - atribuir à `SEDE BRASÍLIA` como ponto central de governança/contabilização.
- Sistemas de negócio:
  - **68** sistemas de tamanhos variados;
  - dividir entre `SEDE BRASÍLIA` e `SUPES CAMPO GRANDE/MS`: 34 + 34.

### Fórmulas de CIs de referência

Para cada linha:

```text
rede = firewall + sdwan + aps
cis_sustentacao = usuarios + servidores_dns_file + workloads_dc_local + workloads_nuvem + sistemas + rede + 6
cis_seguranca   = usuarios + servidores_dns_file + workloads_dc_local + workloads_nuvem + sistemas + rede + 4
cis_governanca  = cis_sustentacao + 5
```

Totais atuais do byCodex:

| Métrica | Valor |
|---------|------:|
| Localidades, incluindo sede sintética | 91 |
| Servidores públicos distribuídos | 3313 |
| Terceirizados estimados | 1987 |
| Usuários de rede | 5300 |
| Estações/notebooks | 5300 |
| APs Wi-Fi | 399 |
| Servidores locais DNS/file server | 52 |
| Sistemas de negócio | 68 |
| Workloads em datacenter local | 610 |
| Workloads em nuvem | 1000 |
| CIs sustentação | 8157 |
| CIs segurança | 7975 |
| CIs governança | 8612 |

---

## 5. Comandos de regeneração (ordem recomendada)

No diretório `Dados-ibama/` (ou com caminho absoluto):

```bash
python gerar_mapa_ativos_bycodex.py
python _calc_mapa_ativos.py
python gerar_kml_mapa_ibama.py
```

- `gerar_mapa_ativos_bycodex.py` atualiza `mapa-ativos-localidades-cmdb_byCodex.md`.
- `_calc_mapa_ativos.py` atualiza `mapa-ativos-por-localidade-dimensionamento.md`.
- `gerar_kml_mapa_ibama.py` lê `localidades_ibama.md`, `qtd-servidores-municipio.md`, os dois mapas `.md` e grava os KML + o JS do site.

---

## 6. Saídas do `gerar_kml_mapa_ibama.py`

| Arquivo | Conteúdo |
|---------|----------|
| `Dados-ibama/localidades_ibama.kml` | 91 pontos; círculos proporcionais a servidores (município ou coluna unidade) |
| `Dados-ibama/mapa-ativos-localidades-cmdb_byCodex.kml` | **91** placemarks; balão = linha da tabela byCodex |
| `Dados-ibama/mapa-ativos-por-localidade-dimensionamento.kml` | **91** placemarks; balão = linha *Mapa por unidade* do dimensionamento |
| [`../../arquitetura-contratual/site/assets/js/mapa-ibama-data.js`](../../arquitetura-contratual/site/assets/js/mapa-ibama-data.js) | `window.IBAMA_MAPA` — mesmos 91 pontos do KML de localidades (Leaflet) |

**Casamento** tabela de mapa ↔ coordenada: **(UF, nome da unidade)** com normalização (remove sufixo final entre parênteses, ex. `SEDE BRASÍLIA` ↔ `SEDE BRASÍLIA (Ibama)`).

**Parser:** ao ler a tabela Markdown do byCodex, **preservar células vazias** (ex.: coluna *Observação* vazia no fim da linha); filtrar células vazias de mais quebra o número de linhas.

---

## 7. Página no site (Leaflet)

| Caminho (relativo a `SDRs/`) | Papel |
|---------|--------|
| [`../../arquitetura-contratual/site/mapa-ibama.html`](../../arquitetura-contratual/site/mapa-ibama.html) | Página do mapa; carrega `mapa-ibama-data.js` e `mapa-ibama-init.js` |
| [`../../arquitetura-contratual/site/assets/js/mapa-ibama-init.js`](../../arquitetura-contratual/site/assets/js/mapa-ibama-init.js) | Inicialização Leaflet a partir de `window.IBAMA_MAPA` |
| [`../../arquitetura-contratual/site/outros.html`](../../arquitetura-contratual/site/outros.html) | Link de navegação **Mapa de Localidades** → `mapa-ibama.html` |

O Leaflet usa **dados de localidades + servidores**, não os quantitativos completos dos mapas de ativos por unidade (isso fica nos **KML** dedicados).

---

## 8. Ligações

- [sdr-0004-parque-localidades-ativos.md](./sdr-0004-parque-localidades-ativos.md) — parque agregado (processo); este SDR detalha a **implementação** tabular/KML no repositório  
- [sdr-0017-site-html-rastreabilidade.md](./sdr-0017-site-html-rastreabilidade.md) — regras gerais do site  
- [sdr-0011-governanca-c1-medicao.md](./sdr-0011-governanca-c1-medicao.md) — CMDB no C1; taxonomia de referência em `itens-configuracao-cmdb-top100.md` (ver §2 deste SDR)

---

## 9. Consumidores

Dimensionamento de contratos, materiais de apoio à governança de CMDB, exportação cartográfica (KML/My Maps), página pública do mapa no site.

---

## Agentes de conformidade (Cursor)

Os três agentes abaixo aplicam-se à edição e à revisão dos arquivos `SDRs/sdr-*.md` (exceto `SDRs/templates/` e normas em `SDRs/governance/`). Este bloco é **informativo**; use o script na raiz do repositório para diagnóstico estrutural.

| Agente | Regra Cursor | Norma em `SDRs/governance/rules/` |
|--------|----------------|-------------------------------------|
| Verificador de conformidade SDR | [`sdr-conformity-checker.mdc`](../.cursor/rules/sdr-conformity-checker.mdc) | [`sdr-conformity-checker.md`](./governance/rules/sdr-conformity-checker.md) |
| Detector de implementação sem vínculo SDR | [`implementation-without-sdr-detector.mdc`](../.cursor/rules/implementation-without-sdr-detector.mdc) | [`implementation-without-sdr-detector.md`](./governance/rules/implementation-without-sdr-detector.md) |
| Anti-vibecoding sem SDR | [`no-vibecoding-without-sdr.mdc`](../.cursor/rules/no-vibecoding-without-sdr.mdc) | [`no-vibecoding-without-sdr.md`](./governance/rules/no-vibecoding-without-sdr.md) |

**Processo:** [`governance/README.md`](./governance/README.md) · **Rastreabilidade código:** [`traceability.md`](./traceability.md) · **Checagem:** `python scripts/check_sdr_conformity.py` (na raiz do repositório).

