1 pontos por GN⁺ 2025-06-29 | 1 comentários | Compartilhar no WhatsApp
  • Enxerga o processo de solicitação de passaporte no Reino Unido como um jogo de puzzle e relata a experiência de programar esse processo complexo em Haskell para transformá-lo em regras
  • A solicitação online de passaporte tem como elementos centrais a coleta de documentos variados, a interpretação de regras complexas e subquests inesperadas
  • Conecta a lógica do processo de solicitação à 'Constructive Logic', destacando que os documentos originais que sustentam cada prova são indispensáveis
  • Usa o mônada LogicT do Haskell e gerenciamento de estado (State) para rastrear a lista de documentos necessários e os caminhos lógicos de prova da cidadania britânica
  • O HMPO tende, na prática, a exigir primeiro o caminho de prova mais complexo, e a adoção de ferramentas de automação é lenta devido aos limites da interpretação de legislação complexa

Introdução: pedido de passaporte como um jogo

  • Recentemente, vem crescendo a tendência de usar programação para resolver jogos online ou puzzles, e o Passport Application do Reino Unido também é abordado dessa forma
  • O Passport Application é um tipo de "jogo de aventura e puzzle de coleta de documentos" que os britânicos jogam a cada 10 anos, com custo de cerca de £100 e um design textual rigorosamente minimalista
  • O objetivo desse jogo é reunir vários documentos comprobatórios (artefacts) por meio de diferentes órgãos públicos para provar, sob critérios legais complexos, que "este solicitante é britânico"
  • A recompensa do jogo é um livreto de passaporte e a "data em que a próxima partida será possível"

Estrutura e dificuldade do jogo

  • A versão offline em papel é conduzida por correio registrado e procedimentos de autenticação, e os documentos a reunir em cada etapa são apresentados em forma de manual ou tabela
  • O procedimento inicial é relativamente fácil, mas conforme o jogo avança surgem várias "side quests" e obstáculos
    • Ex.: pedir a um conhecido com determinada profissão que faça a verificação de identidade, obter tradução juramentada de documentos em língua estrangeira, cooperação familiar, explorar os procedimentos administrativos próprios de cada órgão etc.

Relato da experiência: desafio no nível 'primeiro filho nascido no exterior'

  • O autor assumiu, em nome de sua filha pequena, o desafio do nível 'primeira criança nascida no exterior' e, por já ter bastante experiência, esperava um grau de dificuldade considerável
  • Mais tarde, confirmou-se que metade dos documentos exigidos no início era desnecessária, e os requisitos e explicações sobre os documentos eram bastante ambíguos ou confusos
  • Não é possível se comunicar diretamente com o examinador responsável, e só se pode obter ajuda informal por meio de um agente intermediário de atendimento
  • Novos documentos exigidos surgem repetidamente, às vezes até documentos inexistentes são solicitados, e o nível de dificuldade aumenta com pedidos como certidões de nascimento/casamento de ancestrais familiares raros

A lógica do HMPO: Bureaucratic Logic

  • A lógica da solicitação de passaporte pode ser vista como uma Bureaucratic Logic (lógica burocrática) derivada da Constructive Logic
  • Em vez de uma simples prova de "verdadeiro/falso", é preciso apresentar diretamente a comprovação documental original correspondente a cada regra
  • Como o terceiro excluído (Excluded Middle) não é aceito, não se pode provar algo dizendo "em qualquer cenário, um dos dois está certo"; é obrigatório seguir um único caminho e entregar os documentos correspondentes
  • Em especial, a "Britishness" depende da nacionalidade dos pais, e as solicitações de documentos avançam recursivamente em forma de árvore familiar
    • Caso base: situações em que não é necessário comprovar os pais, como nascimento no Reino Unido antes de 1983 ou naturalização

Modelando as regras com código Haskell

  • Com o objetivo de modularizar as regras e automatizar a inferência, foi feito um protótipo da lógica da solicitação em Haskell (especialmente com uso da mônada LogicT)
  • Declara tipos como Person/Document/Proof para modelar diferentes caminhos de documentos comprobatórios conforme cada condição
  • A função de prova de Britishness explora, junto com o input (informações sobre cada person), múltiplos caminhos possíveis de prova (Set of Proofs)
  • Seguindo a árvore de Proof, calcula a combinação mínima de documentos necessária (Set of Set Document)
  • Com a combinação de StateT e LogicT IO, faz consultas interativas e compartilhamento de estado, com ramificações e backtracking conforme o "conhecimento disponível"
  • Lógica de análise da cidadania britânica:
    • caminho único para prova de naturalização
    • caminho (base) condicional para nascimento no Reino Unido antes de 1983
    • prova recursiva via pais (incluindo condições adicionais como casamento legal)
    • criação de um caminho especial conforme os pais sejam BOTBD (British Otherwise Than By Descent)
    • tratamento em código de regras excepcionais como Crown Service

Execução de exemplo e caminhos de prova

  • Via ghci, com base em entradas reais (local de nascimento do solicitante, nacionalidade dos pais etc.), são derivados automaticamente 3 caminhos de prova (Proof) no total
  • Para cada caminho de prova, é gerada a lista de documentos exigidos (combinação de certidões, certidões de casamento etc.)
  • No caminho mais complexo, confirma-se a necessidade de prova recursiva e comprovação de vínculos matrimoniais remontando aos ancestrais

Discussão e conclusão

  • Na prática, o HMPO parece exigir de propósito primeiro o caminho de prova mais complexo, e contradições jurídicas reais ou regras sutis seguem diretrizes separadas ou o princípio de "balance of probabilities"
  • Se ferramentas de automação se difundirem, os solicitantes poderão identificar com muito mais facilidade seu caminho de prova e os documentos necessários
  • No entanto, como a legislação é extremamente sutil e mutável, há riscos em uma automação simplista em que "o computador dá um veredito de yes/no"
  • O autor está atualmente tentando comprovar pelos segundo e terceiro caminhos

Resumo do código de referência e da estrutura documental

  • O código completo em Haskell pode ser visto no GitHub
  • É possível conferir a implementação detalhada da lógica em Haskell, incluindo vários tipos, caminhos de prova, estrutura de módulos e funções de consulta

1 comentários

 
GN⁺ 2025-06-29
Comentários do Hacker News
  • Relato de experiência trabalhando ao longo dos últimos 10 anos em vários grandes sistemas do governo britânico. Desenvolver software governamental no Reino Unido é descrito como o processo de codificar séculos de leis aprovadas pelo Parlamento. Há a dificuldade de que, quando a legislação muda, como no sistema de passaportes do HMPO, é preciso encontrar e corrigir em cada sistema todas as partes afetadas por essa lei. O governo terceiriza esse trabalho para consultorias caras, que ficam incentivadas a prolongar o contrato ao máximo e extrair o maior lucro possível do cliente. Nesse processo, a qualidade e a flexibilidade dos sistemas variam muito e, quando a lei muda de novo, todo esse procedimento complexo se repete. Os serviços do governo acabam ficando caros também porque faltam órgãos centrais com poder de decisão para coordenar esse problema.
    • Curiosidade sobre se a terceirização no governo já funcionou bem para alguém de fato; nunca ouviu falar de um caso em que o governo terceirizou algo e isso deu certo.
    • Há uma pergunta sobre por que as empresas terceirizadas aparentemente não têm obrigação contratual de entregar “um sistema que funcione”. Existe curiosidade sobre o fenômeno de cobrar demais por sistemas que parecem funcionar, mas que na prática não operam corretamente.
    • Compartilhamento de uma experiência recente ao renovar passaporte na França. Existe uma nova plataforma para todos os documentos: basta preencher um formulário online e só é necessária uma visita presencial. Tudo foi concluído em 10 minutos, e o passaporte também foi entregue rapidamente. O Reino Unido ainda não está em uma situação desesperadora, e a ideia é que o desenvolvimento deveria ser feito internamente com desenvolvedores contratados como funcionários fixos.
  • Isso lembra um caso de automação e codificação da legislação tributária dos Países Baixos usando uma DSL. Como material relacionado, recomendação da apresentação de caso sobre DSL da Jetbrains.
  • Ao explicar a estrutura de decisão sobre cidadania, é apresentado um exemplo de “base case”: quem nasceu no Reino Unido antes de 1983 tem direito à cidadania independentemente dos pais. A pessoa diz que vem de um país em que cidadania se resolve com um único SELECT numa tabela SQL, então essa estrutura lhe parece inacreditável.
  • Sobre a avaliação de que a sintaxe de Haskell é intuitiva, há a opinião de que ela parece intuitiva depois que alguém explica, mas antes disso não é. Haskell teria operadores demais, e há exemplos em que é difícil entender o significado do código só de olhar. Foi compartilhado o link do tutorial de operadores de Haskell.
    • Ao contar aproximadamente quantos operadores são realmente usados em Haskell, a alegação é de que o número fica próximo ao do JavaScript ou no máximo ao dobro. Haskell tem uma barreira inicial de entrada, mas linguagens aprendidas primeiro, como Java ou Python, também são complexas à sua maneira; elas só parecem fáceis depois de estudadas e internalizadas. Até a sintaxe básica de Python, como : e =, pode confundir iniciantes, então a intuição seria resultado da familiaridade.
    • Debate de que, se algo se torna intuitivo depois que alguém explica, isso no fim acaba sendo bastante próximo do que chamamos de intuitivo.
    • Comentário de que Larry Wall disse algo parecido sobre Perl; na prática, o problema não é a sintaxe, mas sim que, sem conhecer conceitos próprios de Haskell, como mônadas e lenses, a compreensão continua difícil mesmo que a sintaxe seja simples.
    • Observação de que a maioria dos operadores no link é uma parte comum para quem está começando a programar. Da mesma forma, se alguém olhar um programa em Java ou uma fórmula matemática sem contexto, também não vai entender. O critério deveria ser quanto a pessoa consegue compreender depois de aprender o básico e fazer alguns tutoriais.
  • Esse conteúdo começa quase como uma paródia, mas vai se tornando uma solução séria e elegante. No final, eu também fiquei com vontade de jogar esse “jogo” de verdade.
    • Comentário de que ele realmente pode ser jogado, mas a parte final é bem mais difícil.
  • Compartilhamento de experiência real ao enviar documentos relacionados a passaporte britânico no Japão. Dependendo da situação, os documentos exigidos podem variar; a pessoa preparou muitos documentos, incluindo sua própria certidão de nascimento e a do filho, original do registro familiar japonês, traduções e comprovante de aceitação do registro de nascimento, entre outros. Era exigida cópia colorida de cada página e até cópia do passaporte de terceiros. O procedimento é muito pouco claro e, no fim, a estrutura parece ser continuar enviando documentos até que as exigências sejam satisfeitas.
    • Explicação de que o pai de quem comentou nasceu no Reino Unido, mas como o avô nasceu no exterior, a situação ficou mais complicada.
    • No Japão, não foi exigida a certidão de nascimento dos pais. A pessoa tem nacionalidade húngara e britânica e mora na Hungria, mas pediram as certidões de nascimento de ambos os pais e dos quatro avós. Como a esposa tem relação distante com os parentes, anexou uma carta explicativa e isso foi aceito. Mesmo que, para sua nacionalidade, a origem ou nacionalidade da mãe praticamente não importe, ela ainda precisou pedir a um amigo da família, advogado, que verificasse isso online.
    • Curiosidade sobre por que foi necessário enviar cópias coloridas de todas as páginas do passaporte japonês da criança.
  • O pedido de passaporte britânico pode ser feito integralmente online, e até mesmo um primeiro pedido para novos cidadãos (adoção, naturalização, ascendência) pode ser concluído apenas com um dispositivo móvel, incluindo a foto, sem aplicativo separado. Na minha experiência, o processo foi eficiente, rápido e intuitivo.
    • Avaliação de que o sistema recente de renovação online de passaporte é o melhor site que a pessoa usou em anos. Funciona perfeitamente em computadores antigos e navegadores antigos, tem uma UI muito simples e acessível para qualquer pessoa, além de uma navegação passo a passo amigável. Gostaria de ver esse tipo de projeto se espalhar mais também na área de negócios; muitos elogios ao HMPO.
    • A pessoa usou recentemente o sistema online pela primeira vez e recebeu o passaporte em apenas duas semanas, mesmo estando na Califórnia, nos EUA. Em contraste, a renovação de passaporte canadense levou quatro meses e exigiu um processo complicado e muita documentação. Há esperança de que o piloto de renovação digital via smartphone seja ampliado.
  • No Japão, ao preparar o passaporte da filha, a pessoa passou por grande dificuldade por causa de problemas como a divergência entre os sobrenomes dos pais na certidão de nascimento. No fim, conseguiu convencer as autoridades de que, como ela nasceu no Reino Unido e possui cidadania britânica (passaporte), seu descendente direto também pode herdá-la. Isso não batia exatamente com os documentos padrão exigidos, mas ainda assim foi considerado um caso relativamente menos sofrido.
  • Relato de uma experiência “vivendo por tabela” o jogo do “passport application”. A regra de “mutable history” é considerada interessante: como os fatos de certos documentos podem mudar em pouco tempo, às vezes até documentos já escaneados precisam ser reenviados e digitalizados de novo. A brincadeira é que esse processo parece implicar que os juízes reconhecem implicitamente um multiverso. A comunicação entre os atendentes no papel de “NPC” e os funcionários práticos parece uma oração unilateral: a informação não chega direito. Há também a suspeita de que o autor original seja fã do jogo Mornington Crescent, por causa da semelhança entre as regras dele e as do pedido de passaporte.
    • No sistema britânico, é possível mudar de nome livremente, a ponto de até a mãe da pessoa ter podido registrar seu nascimento com o sobrenome do terceiro casamento. Até a certidão de nascimento não é totalmente imutável, já que apenas alguns campos são fixos. O Passport Office às vezes também esquece históricos anteriores, então uma divergência de sobrenome no passaporte voltou a ser tratada como problema mesmo depois de já ter sido explicada. Sempre que ligava, mandava e-mail ou fazia uma consulta aos atendentes (“NPCs”), recebia respostas diferentes. Faltava consistência, como no GPT. Houve até um caso em que, com a mesma documentação, uma filha recebeu pedido extra de documentos e a outra recebeu o passaporte sem problema. A mãe reclamou com o parlamentar local e tudo foi resolvido em um dia.
  • Compartilhamento de uma experiência de alguns anos atrás ao jogar o “jogo” do passport application. A pessoa nasceu no Reino Unido e tinha pai britânico, mas como os pais não eram casados e ela nasceu depois de 1983 e antes da mudança das regras em 2006, inicialmente não era cidadã. Por volta da década de 2010, a lei de 2006 passou a ser aplicada retroativamente e ela foi reconhecida como cidadã. A principal “quest” foi apresentar o original da certidão de nascimento do pai, e no final ainda houve a estranheza de ter de comparecer obrigatoriamente a uma cerimônia de juramento de lealdade à Rainha.
    • Pelo menos tem créditos finais.