MXF — Mapa de Representantes

informe as credenciais (leitura somente; nada é gravado no banco)
Equipe ▾
Representantes por Estado DivisãoMunicipios azul = alterado (valor do banco riscado) · verde = novo · riscado = sai do arquivo
Ajuda — como usar, esquema de verificação e limitações

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.