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.

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 processo é simples.

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.
2
Sugerir um país novo. Os 10 países da v1.0 estão definidos. Para sugerir adições à v1.1, abra uma issue com o código ISO do país e links para as fontes oficiais de imigração.
3
Corrigir uma extração. Clone o repositório, edite o arquivo data/current/{cc}.json com o valor correto e abra um PR com link para a fonte. Alterações em src/ exigem que os testes 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/.
Ver repositório no GitHub Ver histórico de mudanças
Pronto para explorar os dados?

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

Ver países Comparar