Manual do Ecossistema CGMOP · Movimentação de Pessoal
Voltar aos painéis
CGMOP / SGP / MGI · documentação interna

Manual do Ecossistema de Movimentação de Pessoal

Do Data Lake ao painel publicado: o que o sistema faz, como rodar, o que cada número significa, que norma o sustenta e o que fazer quando algo dá errado.

Gerado em 02/10/2026 · capítulo 2 com os números lidos em 06/09/2026 · competência de referência 2026-06 · 215.590 movimentações na base · 53.820 vigentes (dados não alcançáveis nesta geração)
Capítulo 1

O que este ecossistema faz

Uma pergunta de política de pessoal, respondida com o dado que já existe.

O Governo federal movimenta servidores entre órgãos o tempo todo: cede, requisita, redistribui cargos, autoriza afastamentos. Cada um desses atos deixa rastro no SIAPE, mas o rastro é bruto — códigos, registros duplicados por matrícula, duas pontas do mesmo movimento em linhas diferentes. Responder “quantas pessoas o Ministério X cedeu e recebeu, e isso respeita a proporcionalidade do §7º do art. 93?” exigia dias de planilha.

Este ecossistema faz esse caminho todo dia, sozinho: lê o Data Lake, reconstrói cada movimentação, aplica as regras da norma e entrega nove painéis de página única que abrem no navegador, sem servidor e sem instalação para quem consulta.

215.590movimentações reconstruídastoda a série, não só as vigentes
53.820vigentes na competênciaquem está movimentado hoje
1,12 mivínculos no quadro de pessoal≈ 1,08 mi pessoas (dedup por CPF)
9painéis publicadosmais o hub de entrada

O que é, e o que não é#

É
Um retrato do SIAPE numa competência, com as regras de negócio já aplicadas e as fontes declaradas em cada tela.
Não é
Um sistema transacional. Nada aqui altera o SIAPE — o fluxo é de leitura, só.
É
Uma ferramenta de acompanhamento: indica onde olhar, quantifica, compara com a norma.
Não é
A apuração oficial de nenhum indicador. Quando um decreto manda o MGI divulgar um número, o número oficial é o do MGI; aqui é acompanhamento com fonte declarada.

Como as peças se encaixam#

FONTE Data Lake MGISIAPE · Databricks PIPELINE (5 ETAPAS) python -m src.mainextrai → transforma SAÍDA PASTA_DADOSmovimentacoes_painel.csv saldo · agregados · QA PAINÉIS gerar_*.py9 HTML autocontidos TABELAS DA EQUIPE pipeline/reference/ FUNÇÕES · AGRUPAMENTO ÓRGÃOS · estatais SEST limites de reembolso · municípios · CORTE 08-2020 PUBLICAÇÃO publicar_cgmop.py copia + injeta o portão de login git push → dadosrgb.dev.br/painel_CGMOP
Do Data Lake ao painel publicado. As tabelas da equipe entram no meio do caminho, no pipeline, e é por isso que mantê-las em dia muda número na tela.
A regra de ouro deste projeto

Todo número na tela tem de dizer de onde veio e de quando é. Por isso cada painel carrega a competência de referência no cabeçalho, e cada afirmação de conformidade é amarrada a essa competência — “na competência 06/2026, atende”, nunca “atende”.

Capítulo 2

Os números desta rodada

Quanto há de cada coisa, de quando é, e o que foi lido para dizer isso.

Este capítulo é gerado: as contagens abaixo saem dos arquivos da última rodada, no momento em que o manual é montado. Se um número aqui estiver velho, é porque o manual não foi refeito depois da rodada — não porque alguém esqueceu de editar o texto.

2026-06competência de referênciao mês do retrato do SIAPE
01/09/2026última extração do Data Lakefato_servidor.parquet · 329.8 MB
05/09/2026última rodada do pipelinequando o CSV do painel foi reescrito
06/09/2026manual gerado emesta página

Volume de cada painel#

PainelEscalaObservação
Movimentações215.590 movimentações53.820 vigentes na competência
Proporcionalidade364 órgãosplacar de cede × recebe
Pessoal35.3 MB de painelcubo agregado, sem nome nem CPF
Anistiados2.7 MB de painelLei 8.878/94
Redistribuição12.8 MB de painelart. 37
LIP3.7 MB de painelart. 91
Radar do Exterior21.2 MB de painelart. 96 — em revisão
Quinquênio20.0 MB de painelart. 87 — em revisão
Limites de Reembolso0.5 MB de painelSIAPE + SIOP

Limites de reembolso — exercício 2026#

R$ 1,32 biteto do exercício47 órgãos
8exercícios na base2019 a 2026
portarianorma vigentePortaria Conjunta MGI/MPO nº 98, de 12/12/2025

A execução orçamentária vem da extração manual do SIOP mais recente na pasta de dados: Extrator1788435198276.csv, de 03/09/2026 às 08:52. O painel usa só a mais recente por exercício — somar duas extrações do mesmo ano dobraria a despesa.

Planilhas internas da última rodada#

12arquivos geradosum por base, com nome e CPF
634 MBtamanho em discoinclui os CSV de apoio
05/09/2026gerados empasta da equipe

Ficam em PASTA_DADOS/planilhas_internas/ e não vão para a web — ver o capítulo das planilhas internas.

Cobertura das taxonomias da equipe#

Estes dois números dizem quanto do painel se apoia em classificação em dia. Rode Conferir taxonomias no assistente para a lista do que falta.

266.877vínculos com funçãona competência
85.9%com nível de liderança229.198 classificados
250funções a cadastrar40 famílias · 37.679 vínculos
Capítulo 3

Arquitetura em alto nível

Quatro camadas, cada uma com uma responsabilidade só.

1
Extração

Consulta o Data Lake (Databricks) e grava parquet cru em PASTA_DADOS/raw.

2
Transformação

Reconstrói as movimentações, aplica dimensões e taxonomias.

3
Enriquecimento

Demografia, tempo, remuneração, liderança, vagas.

4
Exportação

CSV, JSON de agregados e o relatório de QA.

5
Painéis

Cada gerador lê a saída e cospe um HTML autocontido.

Por que os painéis são HTML de arquivo único#

Cada painel embute os próprios dados e o próprio JavaScript. Não há servidor, banco, API nem build. As consequências práticas:

  • Quem consulta só precisa de um navegador — abre até de um pen drive.
  • Publicar é copiar arquivo. Não há infraestrutura para cair às 23h de uma sexta.
  • Em compensação, os arquivos são grandes (o painel de Pessoal passa de 35 MB) e todo o dado embutido é legível por quem tiver o arquivo — ver o capítulo de privacidade.

O código, em pastas#

OndeO que mora ali
pipeline/src/O pipeline: extração, transformações, esquema de saída, configuração.
pipeline/src/transform/As regras de negócio. movimentacao.py reconstrói os movimentos; taxonomia.py lê a classificação de liderança; dimensoes.py junta as tabelas de apoio.
pipeline/painel/Um gerador por painel (gerar_*.py), mais o visual e as utilidades compartilhadas em _comum.py.
pipeline/reference/As tabelas que a equipe mantém — versionadas no projeto, porque são decisão nossa, não dado do Data Lake.
manual/Este manual (HTML e .docx) e os geradores dele.
Uma exceção que já causou retrabalho

O painel de Movimentações (gerar_painel.py) tem CSS próprio e não usa o BASE_CSS compartilhado. Toda correção de estilo compartilhado precisa ser aplicada nos dois lugares, senão ela vale em oito painéis e falha justamente no maior.

Capítulo 4

Pré-requisitos e instalação

O que precisa existir na máquina antes do primeiro comando.

  1. Python 3.11 ou mais novo

    Confira com python --version. O projeto roda no Anaconda ou no Python oficial — tanto faz, desde que seja o mesmo interpretador em todos os passos.

  2. Acesso ao Data Lake

    Credenciais do Databricks do MGI. Sem elas dá para gerar painéis a partir de uma extração que já esteja em PASTA_DADOS, mas não para atualizar a base.

  3. A pasta de dados

    Um lugar fora do projeto para os dados sensíveis — tipicamente a pasta da equipe no OneDrive. Ver o capítulo seguinte.

  4. As bibliotecas

    O assistente instala tudo sozinho. Manualmente: pip install -r requirements.txt.

Ambiente virtual (opcional, recomendado)#

O assistente cria e usa um ambiente virtual se você quiser, pela aba Ambiente. Na mão:

PowerShell
cd C:\0_Desenvolvimento\Movimentacao_pessoal\pipeline
python -m venv C:\projetos_ia\venv_ia
C:\projetos_ia\venv_ia\Scripts\activate
pip install -r requirements.txt
Se você não sabe se precisa de venv

Não precisa. O ambiente virtual serve para isolar versões de biblioteca quando a mesma máquina roda vários projetos. Se esta máquina só roda este, o Python do sistema basta.

Capítulo 5

Configuração: o arquivo .env

Uma linha define onde os dados moram. É a configuração que mais importa.

Na raiz do projeto existe um arquivo .env. Ele não vai para o repositório e guarda o que é específico da máquina e da pessoa.

.env
PASTA_DADOS=C:\Users\voce\OneDrive - Ministério...\Base de Dados\Movimentações
DATABRICKS_SERVER_HOSTNAME=...
DATABRICKS_HTTP_PATH=...
DATABRICKS_TOKEN=...
VariávelPara que serveSe faltar
PASTA_DADOSRaiz dos dados: raw/, staging/ e output/ nascem dentro dela.Cai para pipeline/data, dentro do projeto — evite: dado sensível acaba no repositório.
DATABRICKS_*Credenciais de leitura do Data Lake.Não dá para extrair. Os painéis ainda geram, se já houver extração na pasta.
Trocar a PASTA_DADOS tem efeito colateral

Já aconteceu: ao mudar a pasta, o cache de vagas por órgão ficou para trás e o painel passou a mostrar vagas em branco sem avisar. Hoje esse cache é gravado também em pipeline/reference/ (é dado público) e a falta dele vira erro destacado no log. Ainda assim, depois de mudar a pasta, rode a conferência de chaves.

Capítulo 6

Onde ficam os dados

Fora do projeto, sempre. E por quê.

O repositório de código é versionado e circula; a base do SIAPE tem nome, CPF e remuneração de mais de um milhão de pessoas. As duas coisas não podem morar juntas.

PastaConteúdoVersionado?
PASTA_DADOS/raw/Parquet cru vindo do Data Lake (fato_servidor, dim_*, ficha financeira).Não
PASTA_DADOS/staging/Intermediários do pipeline.Não
PASTA_DADOS/output/Saídas: movimentacoes_painel.csv, saldo_orgaos.csv, agregados_painel.json, referencia.json e os relatórios de QA.Não
pipeline/reference/Tabelas mantidas pela equipe. Nenhum dado pessoal.Sim
pipeline/painel/*.htmlOs painéis gerados.Não (são grandes e refeitos a cada rodada)

O arquivo de referência da competência#

output/referencia.json guarda a competência do último processamento. É a guarda contra um problema real que já ocorreu: o fatoServidor voltar uma competência antiga sem ninguém notar. Se a competência recuar, o painel avisa a defasagem em vez de exibir número velho como se fosse novo.

Capítulo 7

Como executar

Três caminhos, do mais guiado ao mais direto.

Caminho 1 — o aplicativo (recomendado)#

Dois cliques em Assistente CGMOP.vbs. Abre uma janela com as etapas marcáveis, log ao vivo, botão de cancelar e as abas de manutenção. É o caminho para quem não programa.

Caminho 2 — o menu de texto#

PowerShell
cd C:\0_Desenvolvimento\Movimentacao_pessoal\pipeline
python assistente.py

A mesma coisa que a janela, em perguntas numeradas no terminal. Serve para máquina sem interface gráfica ou para quem prefere teclado.

Caminho 3 — um comando para tudo#

orquestrador
cd C:\0_Desenvolvimento\Movimentacao_pessoal\pipeline
python atualizar_tudo.py                 # ETL → painéis → planilhas → publicação (pergunta antes do push)
python atualizar_tudo.py --atualizar     # antes, re-extrai do Data Lake (login Azure)
python atualizar_tudo.py --sem-push      # faz tudo, menos o git
python atualizar_tudo.py --sem-planilhas # pula as planilhas internas (o passo mais lento)
python atualizar_tudo.py --planilhas inconsistencias  # exporta SÓ essa(s)
python atualizar_tudo.py --planilhas-listar           # mostra as chaves e sai
python atualizar_tudo.py --sim           # não pergunta: confirma o push

É o que os botões Atualizar tudo e Re-extrair do assistente chamam por baixo. Uma etapa que falha não derruba as seguintes — exceto o ETL, que é obrigatório: se ele falha, nada adiante faz sentido e nada é publicado. Ao final, grava um relatório Excel da rodada em pipeline/relatorios_execucao/, com a aba Números e a verificação “Balanço cede == recebe?”.

Caminho 4 — comando a comando#

Sempre de dentro de pipeline/:

ordem completa
python -m src.main                    # 1. reprocessa a base (5 etapas)
python painel/gerar_painel.py         # 2. painel de Movimentações (interno)
python painel/gerar_painel_publico.py #    versão aberta, sem proporcionalidade
python painel/gerar_anistiados.py
python painel/gerar_pessoal.py
python painel/gerar_redistribuicao.py
python painel/gerar_lip.py
python painel/gerar_internacional.py
python painel/gerar_capacitacao.py
python painel/gerar_reembolso.py
python painel/gerar_hub.py            # 3. a home do ecossistema
python -m src.exportar_planilhas_internas   # planilhas internas (Excel, sem máscara)
python ..\manual\gerar_manual_html.py       # este manual, com os números da rodada
python painel/publicar_cgmop.py       # 4. copia para a pasta do site (NÃO faz git push)
publicar_cgmop.py não tem --help — chamá-lo já publica

É o único script do projeto que age só de ser chamado. Antes de rodar qualquer script à mão, abra-o e procure por argparse: os que têm são main.py, atualizar_tudo.py e conferir_taxonomias.py. Os geradores e o publicador não têm.

A ordem importa

Os geradores leem a saída do pipeline. Rodar gerar_painel.py antes de src.main gera um painel com os dados da rodada anterior — sem erro nenhum na tela. O hub por último, porque ele lê os agregados e o estado de publicação de cada painel.

Quanto tempo leva#

EtapaOrdem de grandeza
Pipeline completo3 a 4 minutos
Painel de Movimentações1 a 2 minutos (39 MB de saída)
Painel de Pessoal2 a 3 minutos (cubo de ~560 mil combinações)
Demais painéissegundos a 1 minuto cada
Publicação + push1 a 2 minutos, mais o tempo de propagação do site (~1 min)
Capítulo 8

O assistente, aba por aba

A interface pensada para quem não abre um terminal.

O Assistente CGMOP reúne tudo o que se faz com o ecossistema: buscar os dados, reprocessar a base, gerar os painéis, publicar, cuidar de quem entra e do que fica no ar. Abre com dois cliques em Assistente CGMOP.vbs (na pasta pipeline/) ou pelo atalho da Área de Trabalho. Este capítulo percorre cada aba e cada botão.

O que está sempre na tela#

À direita, o log
Tudo o que roda escreve ali, linha a linha, na hora. É onde se lê por que uma etapa falhou. Limpar apaga a tela do log; não apaga nada no disco.
No rodapé, ■ Cancelar
Só acende enquanto algo está rodando. Encerra o processo em andamento (e tudo o que ele abriu) e pula as etapas que faltavam. Vale para uma extração longa, para a instalação de bibliotecas e até para um git push que você percebeu cedo demais. Fechar a janela no meio de uma execução também encerra o processo — nada fica rodando escondido.
Último relatório
Abre o Excel da última rodada (pipeline/relatorios_execucao/): o que rodou, quanto tempo levou, e os números com a verificação “cede == recebe”.
Aviso de bibliotecas
Ao abrir, o assistente confere em segundo plano se todas as bibliotecas do requirements.txt estão instaladas. Se falta alguma, um aviso no topo diz qual e aponta para a aba Ambiente. A janela não trava enquanto verifica.
Memória entre sessões
Pasta de dados, ambiente virtual, dados locais e a duração de cada etapa ficam em pipeline/.assistente_prefs.json. Na próxima abertura, tudo vem como você deixou.

0 · Início — onde se começa e onde se decide#

Três cartões. O que este assistente faz explica o ciclo em três passos (a base, os painéis, a publicação). Como está o projeto agora é um diagnóstico lido dos arquivos, não uma suposição: a pasta de dados em uso, a competência (e se a folha está alinhada com ela), quando a base foi gerada e o tamanho, quantas tabelas há em cache, quantos painéis foram gerados e quando, e quantos usuários o portão tem. 🔄 Verificar de novo relê tudo.

▶ Atualizar tudo (verde)
O caminho recomendado. Reprocessa a base a partir do cache — sem baixar nada, sem pedir login —, gera os nove painéis e as planilhas internas, prepara a publicação e pergunta antes de mandar para o ar. Leva alguns minutos.
⟳ Re-extrair do Data Lake (âmbar)
Igual ao anterior, mas antes baixa os dados do Data Lake de novo. Abre o navegador para o login do Azure e demora bem mais. Use quando o SIAPE publicar uma competência nova — não para refazer um painel.
📤 Só publicar (azul)
Pula o processamento: copia os painéis já gerados para a pasta do site, injeta o login e oferece o envio. Para quando você só mexeu em usuários ou no que fica no ar.
Criar atalho
Cria DOIS atalhos com o ícone do projeto: um na sua Área de Trabalho (a real, onde quer que o Windows a tenha posto) e outro dentro da pasta pipeline/, chamado “Abrir Assistente CGMOP”. O segundo existe porque o Assistente CGMOP.vbs aparece no Explorer com o ícone do Windows Script Host e não há como mudar isso — o Explorer usa o ícone do TIPO de arquivo (.vbs), que é do registro e vale para toda a máquina. Atalho, sim, aceita ícone próprio.

1 · Pipeline — as etapas, uma a uma#

Cada linha é um programa do pipeline, agrupado em Base (o ETL), Painéis (Movimentações interno e público, Anistiados, Pessoal, Redistribuição, Hub), Estudos (LIP, Afastamento Internacional, Licença Capacitação, Limites de Reembolso), Extras (planilhas internas, conferir chaves do reembolso, conferir taxonomias) e Publicação. Ao lado de cada uma, o ▶ roda só aquela etapa — é o botão de quem mudou um painel e não quer reprocessar tudo. O tempo à direita é o da última execução, como estimativa.

Executar selecionadas
Marque a caixa das etapas que quer e rode as várias de uma vez. Elas rodam SEMPRE na ordem da lista — não na ordem em que você marcou —, porque é a ordem em que dependem umas das outras (o ETL alimenta os painéis; o hub lê o estado de todos). O assistente mostra a lista e pede confirmação antes, e guarda a seleção para a próxima abertura. «Marcar todas» e «Limpar seleção» ao lado.
Quais planilhas exportar
Na linha das Planilhas internas há um painel recolhível com uma caixa por base (movimentações, proporcionalidade, anistiados, pessoal, redistribuição, reembolso, LIP, internacional, capacitação, pós-graduação). A rodada completa leva dezenas de minutos — quase tudo em Pessoal, que são três arquivos de mais de 100 MB —, então quem mexeu só numa base não precisa esperar o resto. Nenhuma marcada = saem todas, que é o comportamento de sempre. Pela linha de comando: python -m src.exportar_planilhas_internas --bases anistiados,lip (e --listar mostra as disponíveis).
O ícone de status
○ aguardando · ◐ rodando · ✓ ok · ✕ falhou · – pulado. O ETL é obrigatório: se ele falha, as demais são puladas e nada é publicado — senão iria ao ar dado velho.
De onde vêm os dados
O caminho da PASTA_DADOS (raw e output). Normalmente é a pasta do OneDrive do .env; o botão … escolhe outra. A caixa usar dados locais troca para pipeline/data, que é para teste — desmarcar volta ao .env.
A ordem importa, e o ▶ não sabe disso

Rodar o painel antes do ETL gera um painel com os dados da rodada anterior — sem erro nenhum na tela. O hub por último, porque lê os agregados e o estado de publicação. Na dúvida, Atualizar tudo, que já respeita a ordem.

2 · Usuários — quem entra nos painéis restritos#

A tabela mostra os usuários do portão (senha mascarada; mostrar senhas revela). Clicar numa linha carrega a pessoa nos campos de baixo para editar. O usuário é nome.sobrenome e a senha é a data de nascimento em ddmmaaaa — o login aceita com ou sem barras, e não distingue maiúsculas.

+ Incluir / Atualizar
Põe na lista da tela: usuário novo entra, usuário que já existe tem a senha trocada. Senha que não pareça uma data (8 dígitos) pede confirmação. Nada vai ao disco ainda — o rodapé passa a dizer “alterações NÃO salvas”.
✕ Remover selecionado
Tira da lista o usuário marcado. Recusa remover o último — ninguém conseguiria entrar.
Limpar campos
Esvazia os dois campos.
💾 Salvar lista
Grava em painel/.usuarios_portao.json (fora do repositório publicado), guardando a lista anterior num backup com data e hora ao lado.
🔄 Recarregar
Relê o arquivo e descarta o que não foi salvo.
📤 Salvar e publicar
Salva, regenera o login de todas as páginas e publica — perguntando antes do envio. Sem publicar, a mudança não vale no site.
O cadeado é de vidro — e isso é intencional

O login não impede quem souber o endereço de baixar o arquivo: existe para evitar acesso casual. A senha é a data de nascimento da própria pessoa, e quem baixar o HTML e insistir consegue descobri-la. É por isso que os painéis não carregam dado sensível individual — ver o capítulo de privacidade.

3 · O que fica no ar — publicar, anunciar ou esconder#

Para cada painel, três estados: no ar (publicado com link), em revisão (o cartão aparece no hub, sem link, e o arquivo não é copiado — serve para anunciar um estudo cujo número ainda está sendo conferido) e não aparece. Um resumo abaixo da lista diz quantos estão em cada estado. A escolha fica em painel/.no_ar.json e só vale no site depois de publicar.

Salvar escolha
Grava o arquivo; não publica.
Marcar tudo como no ar
Atalho para voltar todos ao estado publicado (ainda precisa salvar).
Salvar e publicar agora
Grava, gera o hub de novo e publica com esta escolha. Painéis fora do ar são removidos da pasta publicada — o que estava no ar sai do ar.

4 · Tabelas — as bases que a equipe mantém#

Tudo o que o sistema usa e não vem do Data Lake — taxonomias, portarias, a remessa de aposentadoria do INSS — está listado aqui, com o caminho, o tamanho, a data e quem lê cada arquivo. A lista vem de um registro único no código (src/referencias.py): base nova cadastrada lá aparece aqui sozinha. Os detalhes de cada base e das três ações estão no capítulo seguinte.

Clicar no NOME da tabela
Abre a pasta onde o arquivo está, no Explorer. É o caminho mais curto para a pergunta mais frequente desta aba: “onde isso fica?”.
Abrir
Abre no programa certo (Excel para planilha e CSV). Salvar já basta — o painel usa na próxima geração.
Pasta
Abre a pasta onde o arquivo está — o mesmo que clicar no nome.
Substituir…
Troca o arquivo inteiro por um que você recebeu. O anterior vai para um backup datado ao lado.
Apontar…
Faz o pipeline ler de outro lugar, sem mover nada. Um selo “repontado” passa a aparecer na linha.
Soltar
Só aparece numa base repontada: volta ao lugar padrão.
Conferir chaves do reembolso
Confere se todo órgão com teto tem cadastro, se a execução do SIOP foi 100% atribuída e se todo cedido tem titular. Quando falta, diz o arquivo e a linha.
Conferir taxonomias
Lista as funções e os órgãos que estão nos dados e ainda não foram classificados, com o volume de vínculos e os códigos prontos para colar.
Apagar meses anteriores…
No cartão das pastas, na linha das planilhas internas: varre da pasta da equipe tudo o que não é da referência atual dos dados. Diz antes quantos arquivos e quantos MB vão sair, e pede confirmação. Arquivo aberto no Excel é pulado, com aviso — feche e repita.
O botão que mais evita retrabalho

Conferir taxonomias. Rode antes de fechar qualquer número de liderança: o que falta na taxonomia não some do painel, aparece como “fora da taxonomia” — que é pior de explicar.

5 · Ambiente — Python e bibliotecas#

Um ambiente virtual isola as bibliotecas deste projeto das do resto do computador. Não é obrigatório: sem ele, tudo roda no Python do sistema.

Caminho do ambiente + …
A pasta do venv (editável; … escolhe).
usar este ambiente virtual nas etapas
É o que “ativa” o ambiente aqui: as etapas passam a rodar com o Python de dentro dessa pasta. Se ele ainda não existir, o assistente avisa e usa o do sistema. Não há activate nem PATH para mexer.
Criar / instalar aqui
Cria o venv na pasta (se não existir) e instala nele todas as bibliotecas do requirements.txt, com o pip aparecendo no log.
Instalar bibliotecas
Instala ou atualiza todas as bibliotecas no ambiente em uso.
Instalar uma biblioteca específica
Campo + Instalar (ou Enter): o mesmo que pip install <nome>. Para quando o aviso do topo diz que falta só uma.

6 · Comandos — o PowerShell dentro do assistente#

De vez em quando aparece um comando para rodar à mão — --completar-cache para buscar uma tabela nova, --listar para ver as bases. Esta aba existe para você não precisar sair do assistente. E o ganho não é o console: é o console já pronto. Digite ou cole o comando, tecle Enter, e a saída aparece no mesmo log da direita, com o ■ Cancelar valendo.

Campo de comando
Enter executa. As setas ↑ e ↓ passeiam pelos comandos que você já usou (ficam guardados nas preferências); a setinha à direita abre a lista inteira.
Comandos que você mais usa
Botões para os cinco de sempre: completar cache, atualizar tudo, ver referências, listar as planilhas internas e conferir qual Python está em uso. Um clique põe o comando no campo e já roda.
Abrir PowerShell aqui
Abre uma janela separada, já na pasta do projeto e com o mesmo ambiente. Use quando o comando pergunta alguma coisa.
Três coisas que você não precisa mais lembrar

O comando já sai na pasta do projeto (sem isso, -m src.main daria “No module named src”), com o Python da aba Ambiente (sem isso, o venv marcado na tela não valeria para o que você digita) e com a PASTA_DADOS definida (sem isso, o script procuraria os dados onde não há). O rodapé do cartão mostra os três, para você conferir antes de rodar.

Colou um comando com cd ... && na frente?

Pode colar. O assistente tira o cd (ele já está na pasta certa) e avisa no log. E como o Windows PowerShell 5.1 não entende &&, ele troca por ; e diz que trocou — a diferença é que o ; roda o comando seguinte mesmo se o anterior falhar.

O console daqui não tem teclado

Ele mostra a saída, mas não consegue responder. Um comando que pergunta alguma coisa — o git push pedindo usuário e senha é o caso clássico — ficaria pendurado esperando uma resposta que nunca chega. Para esses, use Abrir PowerShell aqui.

Ele roda o que você mandar

É um terminal de verdade, com os seus poderes de usuário. O assistente só pergunta antes quando reconhece um comando que apaga ou reescreve coisas (Remove-Item, git reset --hard, git push --force…) — a conferida do que você colou continua sendo sua.

Capítulo 9

As tabelas que a equipe mantém

Onde a realidade entra no sistema sem passar por programação.

Boa parte do que o painel afirma não vem do Data Lake: vem de classificações que a CGMOP mantém e de arquivos que ela recebe. Portaria nova, ministério criado, agência que troca de pasta, função nova, remessa do INSS — nada disso é código, é cadastro. Todas estas bases estão na aba Tabelas do assistente, cada uma com três ações: Abrir, Substituir… e Apontar….

Um registro só, para o pipeline e para o assistente

Desde 10/09/2026 a lista destas bases mora num único lugar, src/referencias.py — com o caminho padrão, quando se mexe em cada uma e quem a lê. O pipeline lê o caminho de lá; o assistente monta a aba de lá. Antes eram duas listas, e a segunda ficou para trás na primeira oportunidade: a remessa do INSS entrou no pipeline e o assistente nunca soube que ela existia. Quem for acrescentar uma base cadastra no registro e pronto — aparece na aba sem tocar na interface.

ArquivoO que defineQuando mexer
limites_reembolso.csvTeto de reembolso por órgão e por ano, com a portaria e o link.Saiu portaria nova: copie o bloco do ano anterior, troque ano, valores, nome e link.
reembolso_titulares_limite.csvQuem é titular de limite.Entrou órgão no anexo da portaria, ou a agência mudou de ministério supervisor.
reembolso_orgaos_siape_siop.csvDe-para entre o órgão de destino e o titular do teto.Apareceu cedido num órgão fora da lista.
estatais_sest.csvNatureza estatal: dependente ou não do Tesouro.Empresa privatizada, criada, ou que mudou de dependência (fonte: listas da SEST/MGI).
FUNÇÕES.xlsxNível de liderança de cada função — Alta × Baixa/Média.Função nova, ou o painel acusando “Função fora da taxonomia” com volume.
AGRUPAMENTO ÓRGÃOS - SETOR.xlsxSetor, administração e poder de cada órgão.Órgão criado ou renomeado na reforma administrativa.
CONCEITOS SITUAÇÕES FUNCIONAIS.xlsxO texto que explica cada situação do SIAPE nos painéis.Conceito confuso, ou norma que mudou.
CORTE 08-2020.xlsxAjuste de datas anterior ao corte de agosto/2020.Praticamente nunca.
municipios.csvNome e UF canônicos por código IBGE.Praticamente nunca.
reembolso_cct.csvReajuste por acordo coletivo (CCT) de cada empresa cedente, com a data-base.Empresa cedente aparecendo sem índice na conferência de chaves.
Anistiados_aposentados.xlsxRetorno do SUIBE/INSS a uma relação de CPF do MGI: espécie, DIB, DDB e situação do benefício de cada anistiado. Alimenta o filtro, o gráfico e as colunas de aposentadoria do painel.Chegou remessa nova do INSS: Substituir… na aba Tabelas.
grupos_orgaos_reembolso.csvDiz em qual dos três grupos cada órgão do painel de reembolso entra — serviços compartilhados, agências reguladoras ou demais —, o que dá a cor das barras e o filtro de grupo.O Centro de Serviços Compartilhados passou a atender outra pasta, ou foi criada/extinta uma agência.
Os três grupos do painel de reembolso

A classificação não é deduzida do Anexo da portaria. O Anexo II é “agências reguladoras”, mas o Anexo I mistura as 13 pastas atendidas pelos serviços compartilhados com todo o resto — são recortes diferentes, que respondem a perguntas diferentes.

Por isso existe a tabela. Só os dois primeiros grupos precisam ser cadastrados: órgão que não estiver no arquivo cai em “demais”. Acrescentar uma pasta é acrescentar UMA linha (código SIAPE, sigla e grupo), não manter uma lista de 47. A semente veio da página de órgãos atendidos do gov.br (13 pastas) e das leis instituidoras das 11 agências reguladoras federais.

A extração do SIOP não é tabela — é arquivo que você baixa#

A execução orçamentária do painel de reembolso vem de uma extração manual do SIOP, salva com o nome que o próprio SIOP deu (Extrator<número>.csv). O lugar da equipe é PASTA_DADOS/ext_limites_reembolso/ — há um atalho para ela no cartão de pastas da aba Tabelas. A raiz da pasta de dados e a antiga subpasta siop/ continuam sendo lidas, para quem já guardou lá.

Cada extração é o acumulado do ano, não o mês

Por isso o painel usa só a mais recente de cada exercício para os números — somar duas do mesmo ano dobraria a despesa. As anteriores servem para desenhar a evolução dentro do ano. Se não houver extração nenhuma, o log avisa e o painel sai sem execução orçamentária (não quebra, mas mostra zero).

Substituir, apontar, soltar — e onde isso fica gravado#

Substituir…
É a operação do dia a dia (“chegou remessa nova”, “saiu portaria”). Você escolhe o arquivo; o atual é copiado para nome_backup_AAAAMMDD_HHMM.ext ao lado e o novo entra no lugar. Formato diferente do atual pede confirmação. O backup acontece sempre, também pela linha de comando — a regra mora no registro, não no botão.
Apontar…
O pipeline passa a ler de outro caminho, sem mover o arquivo. A escolha fica em reference/.caminhos.json, e a linha da aba ganha o selo “repontado”. Soltar volta ao padrão e apaga a anotação.
A escada de decisão
Para cada base, vale nesta ordem: a variável de ambiente REF_<CHAVE> (para fixar numa máquina sem editar nada) → o .caminhos.json → o caminho padrão em reference/. É a mesma escada da PASTA_DADOS e do repositório do site.
Conferir pelo terminal
python -m src.referencias lista as bases, onde cada uma está, tamanho, data e de onde veio a decisão do caminho.

Por que o limite de reembolso é procurado em dois lugares#

O limites_reembolso.csv é lido primeiro da PASTA_DADOS e só depois de reference/. Assim a equipe cadastra a portaria nova junto com os dados, sem precisar mexer no repositório; a cópia versionada fica como semente e rede de segurança. O log diz sempre qual dos dois foi usado.

Um defeito real que essa tabela já teve

Em 04/09/2026 o exercício 2026 apareceu com 47 links diferentes para a mesma portaria, com o número final incrementando (…601, …602, …). É a marca do arrastar-célula do Excel: ao puxar a fórmula para baixo, ele incrementou o id da URL. Um ato do DOU tem um id — 46 daqueles endereços não existiam. Hoje o gerador avisa quando um exercício tem mais de um valor distinto em portaria ou link.

Ao editar no Excel, cuidado com três coisas
  • Arrastar célula incrementa números dentro de texto, inclusive dentro de URLs.
  • Ponto e vírgula dentro de um campo desloca todas as colunas da linha (já aconteceu no reembolso_cct.csv).
  • Salvar como CSV mantendo o separador ; e a codificação UTF-8.
Capítulo 10

O pipeline, etapa por etapa

O que acontece entre o comando e o CSV.

Etapa 1 — Extração#

Consulta o Data Lake e grava parquet cru em raw/: o fato_servidor (o retrato de cada vínculo), as dimensões (órgão, situação, cargo, cor/raça, escolaridade, unidade organizacional…) e a ficha financeira da competência mais recente disponível.

As consultas trazem colunas por SELECT *

É proposital. Se o Data Lake deixar de entregar uma coluna, o campo correspondente fica vazio com um aviso no log em vez de a rodada inteira quebrar. Em compensação, é preciso ler o log: uma coluna que sumiu em silêncio vira um painel com um filtro morto.

Etapa 2 — Montagem das movimentações#

É a etapa com mais regra de negócio, porque o SIAPE não tem uma tabela de movimentações. Cada movimento deixa duas marcas, em registros diferentes: a saída no órgão de origem e a entrada no de destino. O pipeline casa as duas por CPF e data.

  • Deduplicação por matrícula: o mesmo servidor tem um registro por vínculo. Sem tratar, cada matrícula geraria uma linha do mesmo movimento. Mantém-se um por (CPF, origem, destino, data de ingresso), priorizando o ativo.
  • Origem == destino sai fora: não é movimentação entre órgãos, é resíduo de reforma administrativa (o órgão trocou de código, não a pessoa de casa).
  • GDF e DPU: movimentos internos ao Governo do DF saem; quem tem só uma ponta no GDF fica.
  • Colapso de reforma: quando o órgão se transformou (MP → ME → MGI), a trilha vira uma cadeia de siglas em vez de várias movimentações falsas.

Etapa 3 — Dimensões e taxonomias#

Códigos viram nomes legíveis, e entram as classificações da equipe: setor e poder do órgão, natureza estatal pelas listas da SEST, conceitos das situações funcionais.

Etapa 4 — Enriquecimento#

Demografia, tempo de movimentação, remuneração da ficha financeira, nível de liderança e vagas por órgão. É aqui que se aplica a taxonomia de funções.

Etapa 5 — Exportação#

ArquivoO que é
movimentacoes_painel.csvA base — uma linha por movimentação, 70 colunas.
saldo_orgaos.csvPlacar por órgão: cede, recebe, saldo, vagas aprovadas e ocupadas.
agregados_painel.jsonContagens pré-calculadas que o painel usa sem varrer a base.
referencia.jsonA competência processada — guarda contra retrocesso de data.
qa_inconsistencias_AAAAMMDD.xlsxO que o pipeline achou estranho e não corrigiu sozinho.
Capítulo 11

Conceitos que mudam o número

As definições que, se lidas errado, levam à conclusão errada.

Vigente ≠ ativo#

Vigente é o vínculo que ainda existe no SIAPE — inclui aposentados e pensionistas. Ativo é o vínculo em situação funcional ativa. A diferença é grande: dos 1,12 milhão de vínculos vigentes, cerca de 656 mil são ativos e 409 mil são aposentados. Usar um no lugar do outro erra por 40%.

Servidores ativos ≠ força de trabalho#

Servidor ativo é a situação do vínculo, e inclui quem está cedido para outro órgão. Força de trabalho conta só quem está em exercício no próprio órgão. O KPI de força de trabalho saiu da faixa principal do painel de Pessoal justamente porque, lado a lado com “servidores ativos”, confundia mais do que informava — mas segue como gráfico e como filtro.

Pessoas ≠ vínculos#

Um servidor pode ter matrícula em mais de um órgão. Contagens de pessoas deduplicam por CPF; gráficos por órgão contam vínculos, porque a pessoa aparece em cada órgão onde tem matrícula. São 1,12 milhão de vínculos para ~1,08 milhão de pessoas.

Origem e destino moram em linhas diferentes#

A situação funcional da origem e a do destino vêm de registros distintos do SIAPE. O pipeline preenche as duas pontas: movimento só-origem recebe no destino a mesma situação que descreve a cessão; movimento só-destino recebe na origem a situação-base do servidor. Nenhum preenchimento sobrescreve o que veio da própria ponta.

O passado não alimenta o presente#

O caso INFRAERO

Uma servidora originária da INFRAERO aparecia com cargo no painel. Investigando: o cargo vinha de uma matrícula excluída dela. O pipeline pegava o registro mais recente com valor, sem olhar se aquele vínculo ainda existia.

Hoje há duas listas: atributos do vínculo atual (cargo, função, nível da função, PGD, lotação, UPAG, município) só são herdados de matrícula vigente; atributos estáveis (nome, nascimento, sexo, cor) ainda podem vir de matrícula excluída — senão quem só tem vínculo encerrado ficaria sem nome no painel.

Competência de referência#

Todo painel é um retrato de uma competência, indicada no cabeçalho. Conclusões de conformidade são sempre amarradas a ela: “na competência 06/2026, os dois grupos atendem o mínimo”. Outra competência pode dar outro resultado, e a frase precisa deixar isso evidente.

Proporcionalidade do §7º do art. 93#

A ideia da norma: o órgão que recebe pessoas para compor sua força de trabalho deve, na mesma medida, liberar. O painel calcula por órgão o que cede (A), o que recebe (B) e o saldo (C = A − B), cruzando com vagas aprovadas (D) e ocupadas (E). Cada coluna derivada vem explicada na tela e no PDF — C/E, % Ocup./Aprov., % Lib. A/E, % Oriundos B/E e % Mov. Força de Trabalho.

Capítulo 12

Os painéis, um a um

O que cada tela responde, e o que ela não responde.

Todos compartilham a mesma gramática: filtros no topo, filtros aplicados no trilho lateral, gráficos clicáveis com multi-seleção, exportação em PDF e planilha.

A regra da multi-seleção

Sempre que se filtra clicando num gráfico, é possível escolher mais de uma barra. O gráfico de uma dimensão aplica todos os filtros menos o dela mesma — por isso todas as barras continuam à vista e cada clique acrescenta, em vez de trocar.

Movimentações#

O painel central. Vigentes e histórico, quem cede e quem recebe, tipos de movimentação, setor e natureza estatal das duas pontas, tempo médio no destino, encerramentos e motivos de saída. Tem a relação nominal, com ficha individual, trajetória do servidor (todas as movimentações da mesma pessoa) e a aba de Proporcionalidade.

  • Recortes: vigentes ou histórico completo, com período ajustável.
  • Relatórios: executivo geral, ficha individual, trajetória e o de proporcionalidade — este último com a tabela larga, mas impresso em papel em pé.
  • Versão pública: arquivo separado, sem a aba de proporcionalidade e sem os campos que não devem circular.

Pessoal#

Quadro agregado do Executivo federal — sem nome, CPF ou matrícula. É um cubo de ~560 mil combinações que responde a qualquer cruzamento das 16 dimensões.

De quando é a idade

A faixa etária é a idade, em anos completos, na data de processamento do pipeline — a que o src.main grava em referencia.json e o título do gráfico mostra. Vale para Pessoal, Anistiados e as planilhas internas dos dois (decisão de 10/09/2026). Até então era a competência do fato, que deixava a idade meses atrasada.

Ficam fora, de propósito, os lugares em que a idade é a idade num evento: movimentos encerrados (até a saída), redistribuição (na data da redistribuição) e afastamentos (no início do afastamento).

  • Órgão de lotação e órgão de exercício são coisas diferentes: 96% coincidem, e os 4% restantes são quem está cedido ou requisitado.
  • UF de exercício vem do município de exercício (código IBGE), com 99,6% de cobertura, e aparece como mapa de blocos. A antiga “UF da UPAG” saiu: a UPAG é unidade pagadora, não diz onde a pessoa trabalha.
  • Natureza jurídica é a do órgão de lotação — está dito no rótulo.
  • Fora do grupo “Composição do quadro”, cada barra, coluna ou fatia mostra também a remuneração média daquele grupo.
  • Dois cartões de liderança: mulheres e homens por nível, e o acompanhamento do Decreto 11.443/2023. Cada um declara o próprio universo, porque contam populações diferentes — ver o capítulo da norma.

Anistiados#

Ficha funcional do público da Lei 8.878/94: de onde vieram, por onde passaram, onde estão hoje, remuneração e tempo de retorno. A situação atual está em três botões com o respectivo quantitativo, acima da primeira linha de filtros. Desde 09/09/2026 há também a aposentadoria pelo INSS — espécie, DIB e situação do benefício —, com filtro, gráfico e colunas próprias na relação nominal.

INSS não é a coluna “Situação atual”

Espécie, DIB e situação do benefício vêm de reference/Anistiados_aposentados.xlsx, o retorno do SUIBE/INSS a uma relação de CPF enviada pelo MGI — isto é RGPS. A coluna Situação atual = Aposentado é outra coisa: sai da situação funcional do SIAPE (RPPS). Dá para estar ativo no SIAPE e ter benefício no INSS.

O filtro Benefício no INSS separa os dois lados — Com benefício e Sem benefício localizado —, que é a única forma de chegar a quem NÃO aparece na remessa: os filtros de espécie e de situação só listam valores existentes, e o vazio nunca vira opção.

Campo em branco quer dizer CPF não localizado na remessa, e não “não tem aposentadoria”. Quando a pessoa tem mais de um benefício, a tela mostra o vigente (na falta dele, o de DIB mais recente).

A faixa etária é a idade na data de processamento da base (está na legenda do gráfico), não na competência — foi essa diferença que fez o painel dizer 713 ativos com 75+ enquanto o PDI, contando em outra data, dizia 799.

Piso de anonimato

Os gráficos de sexo, cor/raça e escolaridade reagem aos filtros, mas somem quando o recorte tem menos de 10 pessoas — abaixo disso, o gráfico apontaria o atributo de indivíduos. No lugar aparece o aviso, dizendo quantos sobraram.

Redistribuição#

Cargos redistribuídos entre órgãos (art. 37 da Lei 8.112/90): de onde para onde, saldo por órgão, série histórica, perfis e a matriz origem × destino — 12 maiores origens nas linhas contra 12 maiores destinos nas colunas, com a célula colorida pela intensidade e clicável para filtrar o par.

Origem “não informada”

O destino é sempre conhecido; a origem é reconstruída casando saída e entrada por CPF e data. Quando esse par não existe, a origem fica “não informada” — a redistribuição continua contada no total, mas não entra nos gráficos de quem cedeu nem na matriz. O “i” ao lado da matriz traz o percentual do recorte.

LIP — Interesse Particular#

Licenças do art. 91 desde 2011: órgão, cargo, carreira, duração e situação de cada afastamento, com a lista nominal.

Radar do Exterior e Quinquênio#

Dois painéis de conformidade, não de contagem. O Radar cruza quem está fora do País (art. 96) com a folha e com a fila do que a lei manda conferir. O Quinquênio acompanha o teto de 90 dias por quinquênio (art. 87) e a carência de 2 anos antes da pós (art. 96-A).

Códigos de afastamento mudam quando a norma muda

A licença capacitação migrou de código com o Decreto 9.991/2019 — o código legado morre em 03/2023. Se um painel de afastamento mostrar uma série que cai a zero numa data redonda, desconfie de troca de código antes de desconfiar do dado.

A apresentação do topo recolhe

A caixa azul que explica o painel é indispensável na primeira visita e estorvo na décima — ela empurra filtros e números para baixo da dobra. O × no canto dela deixa só uma faixa com o título; o + (ou um clique na faixa) traz de volta. A escolha fica guardada por painel no navegador: quem já leu não recolhe de novo a cada abertura. Vale em todos os painéis que têm essa caixa, e a impressão sai sempre completa.

Mara Legis — o acervo jurídico#

Acervo de inteligência jurídica sobre movimentação de servidores (legislação, pareceres e as respostas de sempre), montado no NotebookLM. Não é um painel: mora fora do domínio e abre noutra aba, sem passar pelo portão. Está no hub e na barra de navegação de todos os painéis — a ideia é que quem está lendo uma ficha e precisa da norma não tenha de procurar o link noutro lugar.

Limites de Reembolso#

Junta duas metades da mesma história: quanto cada órgão já gastou do teto da portaria conjunta MGI/MPO (execução do SIOP) e quem são os empregados de estatal cedidos por trás dessa despesa (SIAPE).

  • Termômetro do teto: liquidado, empenhado a liquidar e saldo na escala do teto, com a marca de onde o calendário está — vê-se num golpe se o gasto está adiantado ou atrasado.
  • IHE (Índice Histórico de Execução): média do percentual do teto usado por ano, com o ano em curso proporcional aos dias decorridos.
  • Simulação de custo com parâmetros editáveis e um campo para projetar entradas além do efetivo — a projeção entra no total e fica registrada no relatório.
  • Simulação de reajuste de convenção coletiva, com as duas bases explicadas.
  • Três grupos de órgãos, pela cor da barra e por filtro próprio: serviços compartilhados (azul), agências reguladoras (verde) e demais órgãos (âmbar). A legenda abaixo do gráfico de gasto diz quanto do liquidado cabe a cada grupo.
Grupo não é o mesmo que Anexo da portaria

São dois recortes que convivem no painel e respondem a perguntas diferentes. O Anexo é jurídico: I são órgãos e entidades exceto agências, II são as agências. O grupo é de gestão: separa as 13 pastas atendidas pelo Centro de Serviços Compartilhados — que estão espalhadas pelo Anexo I, junto de todo o resto — das agências e dos demais.

Quem decide é reference/grupos_orgaos_reembolso.csv, mantido pela equipe na aba Tabelas do assistente. Órgão fora do arquivo cai em “demais”.

Capítulo 13

Liderança e o Decreto 11.443/2023

Onde a classificação da casa encontra a norma — e onde elas divergem.

A taxonomia de liderança é nossa, não da norma#

A separação Alta × Baixa/Média vem da planilha FUNÇÕES.xlsx, mantida pela CGMOP. Onde a função tem equivalência ao DAS, a planilha conta DAS 4, 5, 6 e Natureza Especial como alta liderança, e DAS 1, 2 e 3 como baixa/média.

O que foi conferido contra a lei, e o que não#

SituaçãoVínculos com funçãoLastro
Famílias FEX e CCX (escala CCE/FCE) e DAS~64 mil (24%)Conferido. As 39 linhas batem 100% com o Anexo III da Lei 14.204/2021 (DAS 1=5, 2=7, 3=10, 4=13, 5=15, 6=17, NE=18). O código DAS do SIAPE (101.1 a 102.6) é a estrutura do próprio Grupo-DAS.
Famílias de escala própria (FG, FUC, CD, GF…)~165 mil (62%)Julgamento da equipe. O código 0001, 0002… é numeração interna da entidade; não há norma geral contra a qual conferir.
Fora da taxonomia~36 mil (14%)Não classificado. Aparece como tal na tela, em 40 famílias — a maior é a FGR, com 20,5 mil.
Onde fica a fronteira é escolha, não norma

Os estudos que analisam os dados do Observatório de Pessoal costumam usar um corte mais estreito: alta liderança só o equivalente a DAS 5 e 6. A diferença não é pequena — cerca de 63% do que o painel chama de alta liderança tem equivalência a DAS 4. Pelo outro corte o grupo cairia de ~21,7 mil para ~8,1 mil funções, e a proporção de mulheres nele iria de 38,6% para 36,9%. A conclusão não muda; o tamanho do grupo muda quase três vezes. Para adotar outro corte, basta editar a coluna de nível na planilha e gerar de novo.

O Decreto nº 11.443/2023#

O que a norma manda

Art. 3º — os órgãos devem preencher com pessoas negras, no mínimo, 30% dos CCE e FCE de níveis 1 a 12 (inciso I) e 30% dos de níveis 13 a 17 (inciso II).
§1º — prazo até 31/12/2025.
Art. 4º — a apuração é global por grupo de níveis, não órgão a órgão.
Art. 2º e 6º — pessoas negras são as autodeclaradas pretas e pardas, com registro no Sinc.
§4º — há também um mínimo de mulheres, a ser definido em ato conjunto MIR/MGI.
Art. 1º, par. único — não se aplica a cargos privativos de militares nem quando lei específica trate da escolha do ocupante.

Como o painel afere — e o que ele não alcança#

Entram os vínculos vigentes do SIAPE nas famílias FEX e CCX, com o nível nos dois últimos dígitos do código. A cor/raça está preenchida em 100% desses vínculos, e o denominador inclui os nomeados sem vínculo anterior.

39,8%Grupo I — níveis 1 a 1218.094 de 45.507 · atende
30,7%Grupo II — níveis 13 a 172.387 de 7.786 · atende por 0,7 p.p.
2 de 17Níveis abaixo de 30%níveis 15 (26,3%) e 17 (26,2%)

Na competência de referência 06/2026, com o prazo do §1º já vencido, os dois grupos atendem. Mas o detalhe por nível mostra o que a apuração global esconde: o topo está abaixo da meta, e o cumprimento se apoia na base da pirâmide.

Os limites do indicador

Não é a apuração oficial — essa cabe ao MGI divulgar (art. 9º). Não há como separar as exceções do art. 1º; a autodeclaração oficial fica no Sinc e aqui usa-se a cor do SIAPE; o resultado da comissão de heteroidentificação (art. 7º) não chega a esta base; e o painel exclui GDF/PMDF/CBMDF/PCDF e DPU. O mínimo de mulheres do §4º depende de ato conjunto ainda não editado — sem ele, não há parâmetro a conferir.

Dois cartões, dois universos#

O cartão de gênero conta todas as famílias de função (≈265,6 mil vínculos). O do decreto conta só CCE e FCE (≈53,3 mil) — cinco vezes menos, e um subconjunto do primeiro. Cada cartão declara o próprio universo na tela, porque comparar os percentuais como se fossem a mesma base leva à conclusão errada.

Uma coincidência que não é coincidência

O grupo II do decreto (níveis 13 a 17) tem exatamente o mesmo total da “alta liderança” dentro do CCE/FCE. É consequência da régua da casa: DAS 4 ≡ nível 13. Ou seja, dentro do CCE/FCE os dois cortes são o mesmo conjunto; a diferença de tamanho vem das outras famílias.

Capítulo 14

Base legal

As normas que o ecossistema aplica, e onde cada uma aparece.

NormaDo que trataOnde aparece
Lei nº 8.112/1990, art. 93 e §7ºCessão e movimentação para composição da força de trabalho.Painel de Movimentações · aba Proporcionalidade
Lei nº 8.112/1990, art. 37Redistribuição de cargos.Painel de Redistribuição
Lei nº 8.112/1990, art. 91Licença para tratar de interesses particulares.Painel LIP
Lei nº 8.112/1990, art. 87 e 96-ALicença capacitação e carência antes da pós.Painel Quinquênio
Lei nº 8.112/1990, art. 96Afastamento para o exterior.Radar do Exterior
Lei nº 8.878/1994Anistia — readmissão de dispensados.Painel de Anistiados
Decreto nº 10.835/2021, arts. 18, 19, 21, 25 e 26Reembolso de cessão de empregado de estatal; dispensa quando a estatal é dependente do Tesouro.Limites de Reembolso
Portaria Conjunta MGI/MPO nº 61/2023 e alterações (92/2024, 37/2025, 98/2025)Teto anual de reembolso por órgão. Anexo I = órgãos, exceto agências reguladoras; Anexo II = agências reguladoras.Limites de Reembolso
Lei nº 14.204/2021, Anexo III, e Decreto nº 10.829/2021Equivalência entre CCE/FCE e DAS.Taxonomia de liderança
Decreto nº 11.443/2023Mínimo de 30% de pessoas negras nos CCE e FCE.Painel de Pessoal
Decreto nº 9.991/2019PNDP — desenvolvimento de pessoas; troca de códigos de capacitação.Painel Quinquênio
LRF, art. 2º, IIIConceito de empresa estatal dependente.Natureza estatal, nos painéis de origem/destino
Uma advertência sobre anexos de portaria

O Cade mudou de anexo: estava no Anexo II na portaria 61/2023 e passou ao Anexo I a partir da 37/2025. Ou seja, a classificação de anexo é por exercício e tem de ser lida da norma daquele ano — nunca de uma regra fixa. AGU e Banco Central sempre estiveram no Anexo I.

Capítulo 15

Privacidade e publicação

O que circula, com que proteção, e o que essa proteção não faz.

O que fica embutido em cada painel#

Painéis de arquivo único carregam o dado dentro do HTML. Esconder na interface não é o mesmo que não publicar: quem tem o arquivo pode ler o código-fonte. As decisões atuais:

PainelDado individual embutido
Movimentações (interno)Nome, CPF mascarado, matrícula mascarada, órgão, cargo, função. Desde 21/09/2026: sexo, cor/raça, escolaridade e deficiência (sim/não) por linha, para a demografia reagir aos filtros, com piso de 25 pessoas — abaixo disso os quatro gráficos voltam ao recorte inteiro. Saiu no mesmo dia a remuneração individual: o rendimento agora é só um agregado por recorte (média, quantos têm dado, quantos recebem). Idade exata, estado civil e tipo de deficiência nunca são embutidos.
Movimentações (público)Desde 21/09/2026 o dado por linha é o MESMO do interno — a redução pública é da interface (sem proporcionalidade, sem a aba), não do payload. Decisão do usuário, com o custo registrado: o arquivo é baixável e o atributo fica ao lado do nome no código-fonte.
PessoalNenhum. É um cubo agregado — sem nome, CPF ou matrícula.
AnistiadosNome, matrícula mascarada, e — desde 03/09/2026 — sexo, cor/raça e escolaridade por linha, para que a demografia reaja aos filtros. Com piso de anonimato de 10 pessoas na tela. Desde 09/09/2026 também a espécie da aposentadoria do INSS: duas espécies (032 e 092, incapacidade permanente) indicam condição de saúde — o único dado dessa natureza em todo o ecossistema, e a razão de esta página não ir para a versão pública.
LIP e RedistribuiçãoLista nominal, sem os atributos sensíveis segmentáveis.
ReembolsoAgregado por órgão e por empresa.

O portão de acesso#

O login é atrito, não segurança

Os painéis publicados recebem uma tela de usuário e senha, com a senha verificada por PBKDF2-HMAC-SHA256 (250 mil iterações) no próprio navegador. Isso não é controle de acesso: o servidor entrega o arquivo inteiro a quem pedir a URL, e o conteúdo está dentro dele. Serve para evitar acesso casual, não determinado.

Acesso real exigiria autenticação no servidor — Azure Static Web Apps com Entra ID, ou Cloudflare Access. Enquanto isso não existe, trate a URL como o segredo.

O que fica no ar#

A aba O que fica no ar do assistente decide painel a painel. “Em revisão” mantém o cartão no hub, sem link, e remove o arquivo da pasta publicada — o link volta 404. Serve para anunciar que o estudo existe enquanto os números são conferidos.

Publicar#

publicação
python painel/publicar_cgmop.py     # copia + injeta o portão
cd C:\0_Apresentacoes\dadosrgb
git add painel_CGMOP
git commit -m "..."
git push
Confira o arquivo PUBLICADO, não só o gerado

A publicação troca a barra de navegação de cada painel. Já aconteceu de um item funcionar no arquivo gerado e sumir no publicado por causa dessa troca. Depois de publicar, abra o arquivo da pasta do site — e depois do push, o endereço no ar.

Capítulo 16

As planilhas internas

O material de trabalho: tudo, com nome e CPF, fora da web.

Os painéis mascaram e agregam. Internamente às vezes é preciso o dado completo — por pessoa, com nome, CPF e matrícula. A cada rodada o pipeline grava um arquivo por base em PASTA_DADOS/planilhas_internas/.

Um arquivo por referência, só em .xlsx

O nome traz o mês/ano de referência dos dados (<base>_interno_AAAAMM.xlsx) — a competência do retrato do SIAPE que o ETL gravou em output/referencia.json, e não o mês em que se rodou: uma planilha com o retrato de 06/2026 gerada em setembro se chama …_202606. Rodar de novo para a mesma referência sobrescreve. Sem referencia.json, cai no mês atual e o log avisa. Antes de 14/09/2026 era AAAAMMDD, e cada rodada criava um jogo novo de doze planilhas.

Também deixou de sair o .csv de apoio das bases grandes: as abas Dados, Dados (2)… já trazem todas as linhas, e o CSV de pessoal_ativos sozinho pesava 166 MB. Para varrer as planilhas de outras referências (inclusive os CSV antigos), use Apagar meses anteriores… na aba Tabelas do assistente.

E-mail do servidor (só nas planilhas)

Desde 14/09/2026 todas as planilhas nominais — movimentações, pessoal (os três arquivos), anistiados, redistribuição, LIP, internacional, capacitação e pós-graduação — trazem email_institucional e email_pessoal, vindos de bd_siape_bronze / siape-servidor-disponivel — camada e schema diferentes do resto do pipeline. A tabela é por competência de pagamento (a mesma matrícula aparece em vários meses), então vale sempre a linha mais recente.

A chave é órgão + matrícula concatenados, mas a largura de cada parte não está documentada — e errar o preenchimento com zeros não dá erro, dá zero casamento. Por isso o exportador mede: testa as formas plausíveis, usa a que casa mais e escreve no log qual escolheu e a taxa. Se um dia a taxa despencar, é ali que aparece.

O cadastro do e-mail pode estar no vínculo de origem (lotação) ou no de destino (exercício) — e a busca cobre os dois. Em movimentações, que tem dois órgãos e duas matrículas, entram as quatro combinações (destino+mat. destino, origem+mat. origem e as duas cruzadas); nas demais bases, o órgão do vínculo, depois o de origem e o requisitante. O que ainda ficar vazio tenta qualquer outro vínculo da mesma pessoa, pelo CPF, via fato_servidor. Cada etapa só preenche o que a anterior deixou em branco, e o log diz quanto cada uma trouxe.

As duas colunas ficam logo depois do nome, em todas as planilhas. E o formato da chave é medido numa amostra espalhada pela base inteira: até 15/09/2026 eram as primeiras 20 mil linhas, e em pessoal — 1,12 milhão de vínculos — o começo do arquivo podia ser um bloco sem e-mail nenhum; aí todos os formatos marcavam 0% e a coluna saía vazia na base inteira.

⚠ Se o log disser “… NÃO foi atualizado nesta rodada”, aquela base falhou e o arquivo que está na pasta é o da rodada anterior — o nome é por mês, então a falha não o substitui. O log diz a data dele. Rode de novo só aquela base.

É dado pessoal: vale a mesma regra do CPF completo — fica nesta pasta e não vai para painel nenhum. A tabela é OPCIONAL: sem ela as colunas saem vazias e o resto da rodada não muda. Para baixá-la sem re-extrair tudo: python -m src.main --completar-cache.

Trajetória do órgão e o ingresso REAL (só nas planilhas)

Quando um órgão troca de código (MP→ME→MGI), o SIAPE encerra o vínculo com ocorrência 02050 e abre outro com ingresso 01050 no código novo. Sem tratamento, quem está lá desde 2018 parece ter chegado em 2023, e a ocorrência de ingresso vira “Reforma Administrativa” — que não diz como a pessoa entrou no serviço público.

Desde 14/09/2026 as planilhas trazem três colunas a mais: trajetoria_reforma (“MP (2018) → ME (2019) → MGI (2023)”), ingresso_ocorrencia_real e ingresso_data_real. A regra da ocorrência: sem reforma, é a original; com reforma, é a do primeiro órgão da cadeia; e quando a cadeia não fecha, permanece “Reforma Administrativa” — que é a resposta honesta, não um dado faltando.

⚠ Isto vale só para as planilhas. Os painéis e a proporcionalidade continuam usando a reconstrução de transform/movimentacao.py, que não foi tocada — de propósito: mexer lá arriscaria o balanço (cede == recebe) e o gabarito. Como aqui não existe a âncora do órgão de origem que o painel usa, esta versão exige também que a exclusão e o ingresso seguinte estejam a no máximo 31 dias um do outro, para não encadear vínculos paralelos sem relação.

A regra desta pasta: aqui não se esconde nada

Máscara é coisa de painel, que é baixável. Estas planilhas nunca saem da pasta da equipe, e existem justamente para o trabalho que a tela não faz — então levam CPF completo, matrícula completa, idade exata, sexo, cor/raça, escolaridade, deficiência, remuneração e os códigos crus do SIAPE. Quem for mexer no exportador tem de se perguntar “falta algum campo?”, e não “posso mostrar isso?”.

Até 10/09/2026 não era bem assim: as planilhas de anistiados e de afastamentos saíam com o CPF mascarado, e todas eram recortadas pela lista de colunas pensada para a TELA — o que jogava fora os códigos do SIAPE, as datas de ocorrência e a idade exata. Além de esconder o que não precisava, o CPF mascarado é inútil para cruzar base: ele não é único, e cruzar por ele junta gente diferente.

Estas planilhas NUNCA vão para a web

Elas ficam na pasta da equipe e só. Nenhuma etapa de publicação as toca: publicar_cgmop.py copia apenas os HTML dos painéis e o manual. Tratar esses arquivos como qualquer outro anexo de e-mail é o jeito mais fácil de transformar um painel cuidadoso num incidente de privacidade.

O que é gerado#

ArquivoConteúdoEscala
movimentacoes_interno_*A base inteira das movimentações, 70 colunas, com CPF completo e matrículas.~215 mil linhas
pessoal_ativos_interno_*Quadro de pessoal nominal — ativos civis. Desde 10/09/2026, ~55 colunas do fato (estado civil, deficiência, país, classe/padrão, órgãos de vinculação e UPAG, datas e ocorrências de ingresso e inatividade, PGD, banco/agência) e a remuneração bruta. Desde 17/09/2026, mais 36 colunas vindas da base de MOVIMENTAÇÕES (de onde a pessoa veio, para onde está cedida).~656 mil
pessoal_aposentados_interno_*Idem, aposentados.~409 mil
pessoal_demais_interno_*Pensionistas, estagiários, militares, residentes, anistiados.~55 mil
anistiados_interno_*Ficha do público da Lei 8.878/94 com CPF completo, todas as colunas do fato e a aposentadoria pelo INSS: espécie, DIB, DDB, situação, quantos benefícios e os demais benefícios de quem tem mais de um.~16 mil
redistribuicao_interno_*Redistribuições nominais (art. 37), com CPF completo.~159 mil
proporcionalidade_interno_*Placar por órgão (§7º art. 93).364 órgãos
lip_interno_*Licenças de interesse particular, com CPF completo.~21 mil
internacional_interno_*Afastamento internacional: organização, missão e estudo. CPF completo.—
capacitacao_interno_*Licença capacitação. CPF completo.—
pos_graduacao_interno_*Afastamento para pós stricto sensu.—
reembolso_limites_interno_*Tetos por órgão e exercício, com portaria e link.315 linhas
referencias_interno_*Todas as tabelas de referência num arquivo só — as que a equipe mantém à mão. Índice + uma aba por tabela.12 tabelas

Cada arquivo tem três abas: Painel (KPIs e gráficos), Dados (a base com autofiltro e painel congelado) e Dicionário (o que é cada coluna). A de referências é a exceção: tem um Índice e uma aba por tabela.

O cargo se identifica por CARREIRA + CÓDIGO, nunca só pelo código

O co_cargo_emprego do SIAPE se repete entre carreiras: o mesmo “001” é um cargo numa carreira e outro cargo em outra. A chave real é a junção — é o que o ETL chama de iden_cargo_emprego, o que a coluna codigo_cargo da planilha de movimentações traz, e como todos os painéis cruzam a dim_cargo.

Até 21/09/2026 a planilha de pessoal traduzia o cargo só pelo código, e trazia o homônimo de outra carreira: carreira certa, cargo errado (relatado pelo usuário). Corrigido. A planilha passou a trazer também cargo_cod_completo (carreira + cargo), ao lado do cargo_cod cru, para cruzar com as outras bases sem concatenar à mão.

Quem for escrever um de-para novo: carreira se identifica só pelo grupo — essa sempre esteve certa; cargo, não.

Em pessoal, de onde a pessoa veio e para onde está cedida

O fato_servidor tem o órgão de lotação e o requisitante, mas não tem a reconstrução de origem×destino — essa é trabalho do ETL e vive na base de movimentações. Desde 17/09/2026 a planilha de pessoal traz esse bloco no fim (prefixo mov_), nos dois papéis em que um vínculo pode aparecer:

· Como destino (mov_veio_de_*, mov_chegada_*): de que órgão a pessoa veio, com setor, poder e grupo econômico da origem, a data e a ocorrência de ingresso real, o tipo do movimento (cessão, requisição…), o tempo, se conta para a proporcionalidade, a unidade de exercício e o nível de liderança da taxonomia da CGMOP — que não existe no fato.

· Como origem (mov_cedido_*): para que órgão esta pessoa está cedida, desde quando, em que UF e município exerce.

Um vínculo pode ter mais de um movimento

Quem veio, voltou e veio de novo tem dois. A planilha mostra o vigente mais recente e diz quantos existem em mov_qtd_como_destino / mov_qtd_como_origem. Trazer todos multiplicaria as linhas, e o quadro nominal deixaria de ser nominal — uma pessoa apareceria duas vezes em qualquer contagem.

Ficam de fora, de propósito: nome, CPF, sexo, idade, cargo, carreira e função, que a planilha já traz do fato; e a remuneração, porque remuneracao_bruta (soma das rubricas da folha) e a remuneracao_total do CSV são contas diferentes — duas colunas parecidas com sentidos distintos convidam ao erro.

A planilha das tabelas de referência

São as tabelas que não vêm do Data Lake — funções, agrupamento de órgãos, estatais da SEST, limites de reembolso, a remessa do INSS, municípios… — reunidas num arquivo só, para consulta. Metade do valor está no Índice: para cada tabela, o que ela é, onde o arquivo está de verdade (padrão, repontado ou por variável de ambiente), quando mexer, que parte do sistema a lê, quantas linhas tem e quando foi alterada pela última vez.

É uma cópia para consulta, não a fonte: para alterar, use a aba Tabelas do assistente (Abrir, Substituir…, Apontar…), que mexe no arquivo de verdade. Tabela ausente ou ilegível não derruba o arquivo — vira uma linha no Índice com o motivo.

Três decisões que valem conhecer#

Pessoal vem separado
Ativos, aposentados e demais em arquivos distintos. Não é capricho: 1,12 milhão de vínculos não cabe numa aba do Excel, que aceita 1.048.576 linhas.
Base grande sai em streaming
Acima de 250 mil linhas o arquivo é escrito sem manter as células na memória (a primeira tentativa consumiu 5 GB e não terminou) e vem com um CSV ao lado, que é o que serve para carregar o volume inteiro de uma vez. Nesse modo não há gráficos.
GDF e DPU entram
Os painéis excluem o Governo do DF (e forças) e a DPU; as planilhas internas trazem o quadro completo. Nas bases de movimentação o que os painéis tiram é só o que tem as duas pontas nesse conjunto — quem tem uma ponta federal sempre esteve lá.

O CPF completo#

O movimentacoes_painel.csv guarda CPF mascarado, de propósito: é ele que alimenta os painéis publicados. O CPF inteiro vai para uma tabela pequena em output/interno/movimentacoes_cpf.csv, gravada pelo pipeline, e a planilha interna junta as duas na hora de montar o arquivo.

Por que não refazer a associação depois

Seria tentador casar CPF e movimento por matrícula no próprio exportador. Não: esse casamento já trocou a pessoa de lugar uma vez — 234 linhas exibiam remuneração e afastamento de outra pessoa. A associação sai do pipeline porque é lá que ela é construída e conferida contra o CPF.

Como gerar sem rodar tudo

Pela aba Pipeline do assistente, marcando só “Planilhas internas”. Na mão: python -m src.exportar_planilhas_internas, de dentro de pipeline/. A pasta abre pela aba Tabelas.

Capítulo 20

Riscos conhecidos

O que pode dar errado em silêncio — que é o pior jeito de dar errado.

RiscoComo se manifestaGuarda existente
Competência retrocederO painel mostra dados de uma competência anterior como se fossem novos.referencia.json + aviso de defasagem na tela.
Coluna sumir do Data LakeUm filtro fica vazio, um campo em branco.Merge campo a campo com WARNING no log — é preciso ler o log.
Taxonomia desatualizadaFunção nova aparece como “fora da taxonomia”; órgão novo cai em “OUTRA”.Aviso na geração + Conferir taxonomias no assistente.
Cache de vagas perdidoVagas em branco no painel de proporcionalidade.Cache duplicado em reference/ + erro destacado.
Tabela editada no ExcelColuna deslocada por ; no texto; URL incrementada por arrastar-célula.Guardas no leitor + aviso de valores distintos por exercício.
Base nova sem aparecer no assistenteA equipe não vê que existe um arquivo para manter, e ele envelhece.As bases fora do Data Lake vivem num registro único (src/referencias.py) que alimenta o pipeline e a aba Tabelas — cadastrar lá basta.
Extração do SIOP antigaExecução orçamentária congelada.O painel usa só a extração mais recente por exercício e mostra a data.

Checklist antes de publicar#

  1. A competência é a esperada?

    Confira no cabeçalho de qualquer painel.

  2. O log tem WARNING?

    Coluna ausente e taxonomia incompleta aparecem lá.

  3. Rodou as duas conferências?

    Chaves do reembolso e taxonomias, na aba Tabelas.

  4. Os totais fecham?

    Cede e recebe têm de bater; o teto do reembolso tem de bater com a soma dos anexos da portaria.

  5. Abriu um PDF e uma planilha?

    São os dois caminhos que mais quebram em silêncio.

  6. Conferiu o arquivo publicado?

    Não só o gerado — a publicação altera a página.

Capítulo 17

Solução de problemas

Sintoma, causa provável, o que fazer.

A faixa etária parece atrasada, ou a legenda mostra uma data antiga#

A idade dos painéis de Anistiados e Pessoal é contada na data de processamento gravada pelo ETL em referencia.json (processado_em). Se você gerou o painel sem rodar o ETL antes, a data é a da rodada anterior — e a legenda do gráfico de faixa etária mostra exatamente qual. Rode o Pipeline ETL (ou Atualizar tudo) e gere o painel de novo. Sem referencia.json nenhum, o gerador avisa no log e usa a data de hoje.

Cadastrei uma base nova e ela não aparece na aba Tabelas#

A aba lê o registro src/referencias.py, não a pasta reference/. Cadastre a base lá (chave, título, quando mexer, quem lê, caminho padrão) e faça o consumidor ler o caminho por referencias.caminho("chave"). Aí ela aparece com os botões Abrir, Substituir e Apontar, e passa a aceitar repontamento.

O painel abre com o JavaScript aparecendo como texto#

Acontece só no arquivo publicado. Causa: a injeção do portão de login entrou no meio de um bloco de script. Verifique se algum texto do gerador contém um </body> ou <script> literal dentro de uma string JavaScript.

O relatório em PDF sai em branco, ou com folhas vazias no fim#

Regra de impressão. O conteúdo tem de estar em #pdf-doc, que precisa ser filho direto do <body>, e os irmãos dele têm de sair com display:none — visibility:hidden esconde mas mantém o espaço, e é isso que produz dezenas de folhas em branco.

Como testar impressão sem imprimir

Aplique na tela as regras do @media print e meça: document.body.scrollHeight − #pdf-doc.scrollHeight tem de dar zero. Se der mais que zero, é exatamente esse tanto de papel em branco.

A planilha não abre, ou o Excel pede para reparar#

Foi um defeito real e antigo: o gerador de XLSX escrevia o diretório central do ZIP com 44 bytes em vez de 46 (faltavam os dois bytes de “atributos internos”), e toda planilha do ecossistema saía corrompida. Corrigido. Se voltar a acontecer, valide abrindo o arquivo com openpyxl — baixar sem erro não prova nada.

Só consigo selecionar uma barra do gráfico#

O gráfico de uma dimensão está aplicando o filtro dela mesma — aí sobra uma barra só e não há o que clicar. Ele precisa aplicar todos os filtros menos o próprio.

Um órgão aparece com execução zero sem explicação#

Falta de-para entre SIAPE e SIOP. Rode Conferir chaves do reembolso: ele aponta a linha exata que falta, com o volume de dinheiro e de gente em jogo.

“Função fora da taxonomia” com volume alto#

Famílias de função que não estão na FUNÇÕES.xlsx. Rode Conferir taxonomias; com --csv ele grava a lista pronta para preencher.

O painel some do ar (404)#

Provavelmente está marcado como em revisão na aba “O que fica no ar” — nesse estado o arquivo é removido da pasta publicada de propósito.

O PDF sai com as letras grossas, e não dá para selecionar o texto#

O destino da impressão era o “Microsoft Print to PDF”. Esse driver recebe a página já desenhada e grava cada letra como traçado vetorial preenchido: não há fonte embutida, o texto engrossa e não se seleciona nem se busca. Escolha o destino “Salvar como PDF” do próprio Chrome/Edge — sai com a fonte de verdade, mais leve e pesquisável.

O texto do relatório encosta (ou passa) da borda do papel#

Acontece quando a impressão é feita com Margens: Nenhuma. Nessa opção o Chrome ignora o @page{margin:12mm} do painel e imprime até o fio do papel — e a impressora ainda tem 1 a 2 mm de área não imprimível, que come as últimas letras. Use Margens: Padrão.

Desde 21/09/2026 o relatório tem uma folga interna de 4 mm (no CSS compartilhado, _comum.py), que vale mesmo com margem zero — então o conteúdo não encosta mais na borda em nenhuma configuração. Painéis gerados antes dessa data precisam ser regerados para receber a folga.

“SEM ACESSO À TABELA DO FATO” (INSUFFICIENT_PERMISSIONS)#

Desde 15/09/2026 o retrato do servidor vem de mgi-ouro.bd_siape_delta.fatoservidor. Se o seu usuário não tem leitura nessa tabela, o Data Lake responde User does not have SELECT on Table. Não é defeito do pipeline: a equipe do Data Lake precisa rodar GRANT SELECT ON TABLE `mgi-ouro`.`bd_siape_delta`.`fatoservidor` para o seu usuário (e USE SCHEMA no schema, se faltar).

Enquanto isso: re-extrair (--atualizar) para logo no começo, sem baixar nada e sem tocar no cache; Completar cache segue com o retrato que está em cache e completa o resto; e a rodada sem re-extrair funciona normalmente — com o aviso de “cache de outra origem” no topo do log, que só some depois da primeira extração bem-sucedida da tabela nova.

Capítulo 18

Glossário

O vocabulário mínimo para ler qualquer tela.

Competência de referência
O mês do retrato do SIAPE em que o painel se baseia.
Vínculo
Uma matrícula. Uma pessoa pode ter mais de um.
Vigente
Vínculo que ainda existe no SIAPE — inclui aposentado e pensionista.
Ativo
Vínculo em situação funcional ativa. Inclui quem está cedido.
Força de trabalho
Quem está em exercício no próprio órgão. Exclui cedidos.
Órgão de lotação
Onde está o vínculo.
Órgão de exercício
Onde a pessoa efetivamente trabalha. Difere da lotação em ~4% dos casos.
UPAG
Unidade pagadora. Diz quem paga, não onde a pessoa está.
UORG
Unidade organizacional — a caixinha do organograma.
Proporcionalidade
A regra do §7º do art. 93: quem recebe para compor força de trabalho deve liberar na mesma medida.
Redistribuição
Deslocamento do cargo efetivo, com o servidor, de um órgão para outro (art. 37).
Cessão / requisição
A pessoa vai trabalhar em outro órgão; o cargo permanece no de origem.
Anexo I e II
Da portaria de reembolso: Anexo I são órgãos e entidades exceto agências reguladoras; Anexo II são agências reguladoras.
IHE
Índice Histórico de Execução — média do percentual do teto usado por ano.
CCE / FCE
Cargo Comissionado Executivo e Função Comissionada Executiva, que substituíram DAS e FCPE.
Alta liderança
Classificação da CGMOP: onde há equivalência ao DAS, corresponde a DAS 4, 5, 6 e Natureza Especial.
Sinc
Sistema Integrado de Nomeações e Consultas, onde fica a autodeclaração de que trata o Decreto 11.443.
Piso de anonimato
Regra do painel: gráfico demográfico não é desenhado abaixo de 10 pessoas no recorte.
Capítulo 19

Como manter este manual

Ele é gerado por código, e é assim que não desatualiza sozinho.

Este documento é gerado. O conteúdo mora em manual/_conteudo1.py e manual/_conteudo2.py, em blocos declarativos — parágrafo, tabela, passo a passo, caixa de aviso. O layout mora em manual/_render.py.

regerar
cd C:\0_Desenvolvimento\Movimentacao_pessoal
python manual\gerar_manual_html.py    # este manual (HTML)
python manual\gerar_manual.py         # a versão .docx
Prefira editar o gerador a editar o HTML

Corrigir direto no arquivo gerado funciona até a próxima rodada, quando a correção some sem avisar. Editar o bloco no _conteudo*.py custa o mesmo e sobrevive.

O que precisa entrar aqui quando algo muda#

  • Regra de negócio nova ou alterada → capítulo Conceitos que mudam o número.
  • Norma nova → capítulo Base legal, e o painel onde ela aparece.
  • Base de referência nova → cadastre em src/referencias.py (é isso que a põe na aba Tabelas) e descreva-a no capítulo As tabelas que a equipe mantém.
  • Botão ou aba nova no assistente → capítulo O assistente, aba por aba, dizendo o que o botão faz e quando usar.
  • Defeito que custou tempo para achar → capítulo Solução de problemas, com o sintoma primeiro. Quem procura socorro busca pelo sintoma, não pela causa.
CGMOP · MGI

Movimentação de Pessoal

Acesso restrito. Informe usuário e senha para visualizar o painel.

Como entrar Usuário o seu nome.sobrenome (ex.: maria.silva) Senha a sua data de nascimento, só números, no formato ddmmaaaa (ex.: 07091985 para 07/09/1985) Não conseguiu entrar? Fale com a CGMOP.