O que é e para quem serve
O Rota Legal mantém um conjunto de arquivos JSON estruturados com as condições oficiais de imigração de 10 países na perspectiva de um cidadão brasileiro que quer trabalhar no exterior.
Os dados cobrem tipos de visto disponíveis, requisitos de entrada, renda mínima exigida, direitos trabalhistas e mudanças recentes detectadas. Cada campo é extraído diretamente de páginas oficiais de governo.
O projeto serve dois propósitos: alimentar a ferramenta web Rota Legal (esta interface) e servir como fonte viva para os conteúdos do vl-builds, que referenciam os dados sem precisar atualizá-los manualmente.
Como os dados são extraídos
Cada execução percorre todas as URLs configuradas por país, extrai o conteúdo com LLM, valida o resultado com Zod e salva no Git.
Fontes configuradas
Cada país tem uma lista de URLs em src/sources/{cc}.ts. Apenas páginas de governo oficial. Nenhuma fonte de terceiros como fonte primária.
Fetch com fallback
Primeiro tenta fetch nativo do Bun. Se a página for JS-pesada e retornar HTML vazio, usa Playwright (browser headless) como fallback.
Readability filtra ruído
O HTML cru passa pelo @mozilla/readability, que extrai só o conteúdo principal da página. Menus, rodapés e banners são descartados antes de ir para o LLM.
LLM extrai campos
Claude Haiku 4.5 por padrão. URLs marcadas como críticas usam Claude Sonnet 4.5. O modelo recebe o texto limpo e retorna o JSON estruturado conforme o schema.
Zod valida o resultado
O JSON retornado pelo LLM é validado com Zod. Campos obrigatórios faltando ou com tipo errado causam falha alta: o pipeline para e registra o erro sem comitar um snapshot parcial.
Diff e versionamento
O snapshot novo é comparado com o anterior. Mudanças de alta relevância abrem uma issue automática no GitHub. Tudo é versionado em Git, sem banco de dados.
Auditoria cruzada
Após a extração, valores críticos (salário mínimo, taxas, prazos) são comparados contra verificationUrls independentes via LLM. Divergências acima de 5% são anotadas em reliability.knownIssues e geram uma issue no GitHub automaticamente.
Como evitamos erros silenciosos
Extração por LLM pode produzir valores plausíveis mas errados. O pipeline tem duas travas independentes para detectar isso antes que o dado errado chegue ao usuário.
Guard: bloqueia degradação estrutural
bun run guard compara o snapshot novo com o anterior e detecta sinais de degradação: IDs de vistos trocados, campos de enriquecimento zerados, vistos duplicados. Se encontrar, bloqueia o commit e abre uma issue no GitHub. O cron mensal nunca publica um snapshot degradado.
Audit: verifica valores contra fontes independentes
bun run audit usa um segundo LLM para buscar os verificationUrls de cada país (portais independentes de expatriados, análises especializadas) e compara os valores críticos extraídos. Divergências maiores que 5% ficam anotadas visivelmente no JSON e na interface, para que o usuário saiba que aquele dado tem ressalva.
Código aberto: qualquer pessoa pode auditar
Todo o pipeline de extração, o schema de dados e o histórico de snapshots são públicos no GitHub. Qualquer pessoa pode verificar como os dados foram gerados, comparar com a fonte oficial e abrir uma issue se encontrar discrepância. Não existe dado oculto ou processamento fora do repositório público.
Estrutura de cada arquivo de país
Todos os países seguem o mesmo schema TypeScript. Um arquivo por país em data/current/{cc}.json, sobrescrito a cada execução.
De onde vêm as informações
Apenas fontes oficiais de governo. Sites informativos oficiais como make-it-in-germany.com são aceitos como fonte secundária. Blogs de advogados e portais não-oficiais nunca entram como fonte primária.
O que estes dados não garantem
Transparência sobre o que o sistema faz e não faz é parte do produto. Leia antes de tomar qualquer decisão baseada nos dados desta ferramenta.
Não é assessoria jurídica
Nenhuma informação aqui constitui parecer jurídico personalizado. Para processos reais de visto e imigração, consulte um advogado de imigração licenciado no país de destino.
Confiança média na extração por LLM
Todos os países têm extractionConfidence: "medium". Nenhum passou por revisão humana completa. O LLM pode interpretar incorretamente passagens ambíguas nas fontes. Sempre confirme em na fonte oficial antes de agir.
Campos vazios são ausência de dado, não ausência de requisito
Se um campo como incomeRequirement está null, significa que a fonte não especificou ou o LLM não conseguiu extrair. Não significa que o requisito não existe.
Ciclo mensal: mudanças entre execuções não são capturadas imediatamente
O pipeline roda dia 1 de cada mês. Alterações publicadas pelo governo no dia 15, por exemplo, só aparecem aqui a partir do dia 1 do mês seguinte. Para países com histórico de mudanças frequentes, consulte a fonte oficial diretamente.
Não cobre processos específicos por consulado ou cidade de origem
Os dados refletem as regras gerais do país. Consulados individuais podem ter agendas, taxas e requisitos extras que não estão documentados aqui. O processo real de solicitação varia por cidade de origem no Brasil.
Como o projeto é construído
Decisões tomadas para minimizar custo, maximizar confiabilidade e manter zero infraestrutura própria.
Decisões de arquitetura
O projeto é aberto
Correções, novos países e melhorias no schema são bem-vindas. O repositório é público e o pipeline está todo documentado.
verificationUrls é obrigatório ao criar um novo país e alimenta a auditoria cruzada automática.data/current/{cc}.json com o valor correto, rode bun run validate e abra um PR com link para a fonte. Alterações em src/ exigem que os testes e o bun run typecheck passem.src/extractors/schema.ts, docs/data-schema.md e de todos os arquivos em data/current/. Abra uma issue primeiro para alinhar a mudança antes de implementar.Projeto independente, sem patrocinador
O Rota Legal é mantido por um brasileiro que passou pelo processo de pesquisa de visto de trabalho na Europa e frustrou-se com a falta de uma fonte confiável, atualizada e objetiva.
Não é um escritório de imigração, não tem afiliação com governos e não recebe comissão por indicações de vistos. Os parceiros listados na página de parceiros são indicações editoriais ou acordos comerciais transparentes, sempre identificados como tal.
O repositório de dados é MIT. Os dados em si são de domínio público (fontes governamentais). O código da interface é proprietário.
Veja os países disponíveis ou compare dois destinos lado a lado.