Sobre o projeto

Rota Legal

Banco de dados de imigração para trabalhadores brasileiros. Atualizado automaticamente todo mês por um pipeline de extração com LLM a partir de fontes oficiais de 10 países.

O projeto

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.

10
países monitorados
12×
execuções por ano
< $1
custo mensal de API
0
banco de dados
Metodologia

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

07

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.

Garantia de qualidade

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.

Schema de dados

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.

src/extractors/schema.ts
interface CountryData { meta: { country: string // código ISO alpha-2: 'nl', 'de', 'pt' countryName: string // nome em PT-BR lastUpdated: string // ISO 8601 schemaVersion: string // semver sources: SourceRef[] // URLs verificadas nesta extração } forBrazilians: { schengenVisaFree: boolean maxStayDaysAsTourist: number workPermitNeeded: boolean specialAgreements: string[] // ex: 'CPLP', 'Tratado de Amizade' notes: string } visaTypes: VisaType[] // lista de vistos disponíveis generalRequirements: { passportValidity: string proofOfFunds: MoneyAmount | null healthInsurance: HealthInsuranceReq cleanCriminalRecord: boolean } recentChanges: PolicyChange[] // mudanças dos últimos 6 meses reliability: { extractedBy: 'llm' | 'manual' extractionConfidence: 'high' | 'medium' | 'low' humanReviewedAt: string | null } }
Fontes de dados

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.

País Fonte principal Nota
Holanda ind.nl/en/residence-permits/work IND — serviço oficial de imigração holandês
Alemanha make-it-in-germany.com Portal oficial do governo federal alemão
Portugal aima.gov.pt/pt/trabalhar AIMA — Agência para a Integração, Migrações e Asilo
Espanha inclusion.gob.es Ministerio de Inclusión, Seguridad Social y Migraciones
Irlanda enterprise.gov.ie Department of Enterprise, Trade and Employment
Bélgica dofi.ibz.be Office of Foreigners — Immigration Office Belgium
França service-public.fr Service Public France — portal oficial de vistos e imigração
Itália vistoperitalia.esteri.it Visto per l'Italia — Ministério das Relações Exteriores
Áustria migration.gv.at Migration.gv.at — portal oficial austríaco de imigração
Austrália immi.homeaffairs.gov.au Department of Home Affairs — vistos e imigração
Limitações

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.

Stack técnica

Como o projeto é construído

Decisões tomadas para minimizar custo, maximizar confiabilidade e manter zero infraestrutura própria.

Runtime
Bun 1.1+
Fetch nativo, testes embutidos, mais rápido que Node para scraping
Linguagem
TypeScript strict
Schema de dados em TypeScript serve como documentação viva
LLM
Claude Haiku 4.5
Padrão. URLs críticas usam Sonnet 4.5. Estratégia 80/20 reduz custo de $21 para $9,66 por ano
Validação
Zod
Schema runtime. Se o LLM retornar algo inválido, o pipeline para antes de comitar
Fetch
Nativo + Playwright
Playwright só como fallback para sites JS-pesados. Evita overhead em 90% dos casos
Parser HTML
@mozilla/readability
Extrai só o conteúdo principal antes de enviar ao LLM. Reduz tokens e ruído
CI/CD
GitHub Actions
Cron dia 1 de cada mês, 06h UTC. Zero custo de hospedagem. Issues automáticas para mudanças
Storage
JSON no Git
Zero banco de dados. Histórico grátis. Diff visual no GitHub. Fácil para terceiros consumirem

Decisões de arquitetura

LLM vs scrapers Extração por LLM sobrevive a redesigns de site. Manter seletores CSS quebrados custa mais a longo prazo do que o custo de API.
JSON vs banco Zero infraestrutura. Histórico grátis via Git. Qualquer desenvolvedor pode consumir sem SDK ou autenticação.
Haiku 80% / Sonnet 20% A maioria das páginas tem estrutura previsível. Sonnet fica para URLs com dados críticos (renda mínima, taxas) onde precisão vale o custo extra.
Sem painel admin Se precisar editar manualmente, faça PR. Mantém o projeto simples e auditável.
Como contribuir

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.

1
Reportar um erro nos dados. Se encontrar um valor incorreto ou desatualizado, abra uma issue no GitHub com o país, o campo e a fonte oficial que contradiz o dado. Apenas o pipeline de dados e as páginas públicas são abertas: conteúdo pago e dados de alunos vivem em repositório privado separado.
2
Sugerir um país novo. Para sugerir adições, abra uma issue com o código ISO do país e links para pelo menos 3 fontes oficiais de imigração. O campo verificationUrls é obrigatório ao criar um novo país e alimenta a auditoria cruzada automática.
3
Corrigir uma extração. Clone o repositório, edite 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.
4
Melhorar o schema. Mudanças no schema exigem migração simultânea de 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.
Ver repositório no GitHub Guia de contribuição Ver histórico de mudanças
Quem mantém

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.

Origem
Brasil
Feito por e para brasileiros pesquisando trabalho na Europa
Modelo
Open-core
Dados e pipeline públicos. Ferramentas avançadas na Área do Aluno
Conflito de interesse
Nenhum
Sem patrocinadores, sem comissão por indicação de visto
Contato
contato@rotalegal.pro
Para erros nos dados, sugestões ou parcerias editoriais
Pronto para explorar os dados?

Veja os países disponíveis ou compare dois destinos lado a lado.

Ver países Comparar