Fluxo do cliente: conecte (leitura somente) → o mapa mostra a situação atual → edite: clique num estado para trocar representantes da UF ou o dono de cada município (há atribuição em massa das linhas filtradas); o ✎ em cada nome na legenda edita contato/escopo; "+ novo" adiciona representante. Nada disso toca o banco — as mudanças ficam em "Alterações pendentes" (e num rascunho local do navegador). Ao terminar, Exportar solicitação baixa os dois arquivos no padrão original, com a coluna Observações descrevendo o que mudou. Envie-os à equipe — a aplicação no banco é feita por ela, de forma controlada.
Importar para edição: para continuar uma solicitação anterior, importe os CSVs exportados antes (DivisãoMunicipios e/ou Representantes por Estado) — o conteúdo entra na SUA edição, substituindo o rascunho dos representantes presentes no arquivo.
⚠ Conferir com o banco: para só verificar — sem editar nada — use este botão com os mesmos arquivos: o que estiver diferente do banco acende em amarelo com ⚠ no mapa e no painel (faltam/sobram por representante, incluindo escopo municipal, contatos divergentes e representantes que existem só de um lado — exceto exceções aceitas e documentadas, como a conta de desenvolvimento). Passe o mouse no estado para ver o detalhe.
Menu Equipe ▾: verificação avançada por JSON, backup técnico e
recarga dos dados — ferramentas da equipe, não fazem parte do fluxo do
cliente. O endereço do servidor é embutido no build (variável
PB_HOST); para apontar a outro ambiente em testes, use
?host=https://… na URL.
De onde vêm as discrepâncias: a comparação é sempre entre a coluna UF / DivisãoMunicipios (a fonte estruturada) e o banco — o texto das Observações nunca é interpretado pelo motor; ele é o histórico. Como camada extra, um lint heurístico confere se a última entrada das Observações que cita cada UF/cidade está refletida nas colunas e, quando não está (ou quando usa termos ambíguos como "mover"), emite um AVISO no painel — marcado "(heurística das Observações)", sem amarelo no mapa: aviso pede revisão humana, não é veredito. Solicitações novas devem sair do próprio mapa (Exportar CSVs), que gera colunas e observações coerentes por construção.
Verificação (equipe): JSON parcial; só o que estiver nele é checado contra o banco (não contra as edições). Formatos:
{
"representants": {
"lucas_de_oliviera": { "states_absent": ["RN", "TO"] },
"trail_land_cwb": { "towns": ["curitiba"], "exact": true }
}
}
ou o arquivo docs/fix-sp-towns-*.json (corrections[]).
Limitações conhecidas: exclusões (excluded_towns) não
são editadas aqui — derivam do complemento municipal (ex.: Bino = PR menos as
cidades do Trail Land). A origem "fallback" é dedução da regra observada; a
regra definitiva vive no runtime. Municípios fora de SP/PR/GO exportam o
identificador técnico até o mapa de nomes ser ampliado. Para entregar ao
cliente é preciso criar uma credencial própria somente-leitura (hoje o login
usa a conta administrativa).
Se o navegador bloquear as consultas via file://, sirva a
pasta com python3 -m http.server.