Trilho

Avaliação técnica de privacidade

Revisão 15 · 25 de outubro de 2026

Esta avaliação regista os fluxos de dados atuais e as verificações de lançamento. Não certifica conformidade nem substitui a avaliação do responsável nos termos do RGPD. A política de privacidade descreve as escolhas disponíveis.

Estado: O coletor próprio v2 foi verificado com eventos sintéticos no servidor de produção. O projeto próprio Firebase/GA4 está configurado e faz parte da aplicação desde a versão 1.1.0 (setembro de 2026); só recolhe depois do consentimento descrito abaixo.

A propriedade GA4 tem conservação de eventos e utilizadores de 2 meses, sem renovação por nova atividade. Esta definição não cobre relatórios padrão agregados nem comprova eliminação física. Signals, dados fornecidos pelo utilizador, recolha granular de localização/dispositivo e personalização publicitária estão desativados.

Dados tratados

O Trilho funciona sem conta. Os pedidos de percursos e paragens próximas podem enviar coordenadas precisas ou aproximadas e identificadores de paragens ao servidor. As pesquisas de paragens são enviadas ao Trilho enquanto escreve. Pesquisas explícitas de locais e ligações de mapas partilhadas podem chegar ao Nominatim ou ao fornecedor da ligação. A geocodificação usa uma cache de memória limitada com frescura de 24 horas; não é tratamento apenas em tempo real.

O OpenFreeMap fornece os mapas claros e escuros e recebe pedidos de rede e a zona visualizada. O Google ML Kit pode enviar diagnósticos próprios, separados do interruptor de partilha do Trilho.

Em v2, os eventos opcionais incluem UUID da instalação, ID do evento para evitar duplicados, dia, categorias limitadas, plataforma, versão e ambiente. A medição cobre sessões, visitas ao planeador, tentativas de percurso, carregamentos de mapa, marcos de regresso, respostas apresentadas e dias ativos; contadores técnicos registam eventos descartados. O estado local começa com o consentimento: uma coorte corresponde a esse período, não a uma pessoa ou primeira instalação. Os regressos nos dias 7/30 são marcos positivos após confirmação da inscrição; finais desconhecidos não são transformados em erros.

Desde a versão 1.5.0, os eventos opcionais incluem também como terminou a receção de um local partilhado a partir do Google Maps (percurso, par de pontos, escolha entre candidatos, pesquisa ou falha), que superfície de ensino a antecedeu, se foi a primeira partilha, um intervalo do tempo de resposta, as dicas mostradas e tocadas e um marco de coorte (primeira partilha nos dias 0–6). Nunca o endereço, o nome, as coordenadas, a ligação ou o texto pesquisado. A aplicação guarda no telemóvel, sem os enviar, os indicadores de que precisa para não repetir as dicas. O Google Maps só abre por toque explícito, com o texto escrito na pesquisa ou apenas o mapa; a partir daí aplica-se a política da Google.

No iPhone, desde a versão 1.5.0, se o utilizador ativar a «Notificação ao partilhar» (o pedido de autorização do sistema só aparece depois desse toque, nunca no arranque nem na apresentação inicial), a extensão «Partilhar» cria no próprio telemóvel uma notificação local só com o nome do local, se a aplicação de origem o enviar, e um texto fixo — nunca a morada, a ligação ou as coordenadas. A notificação é criada e entregue pelo sistema do telemóvel, sem APNs, sem token do dispositivo e sem Firebase Messaging: nada de novo sai do telemóvel e o servidor do Trilho não recebe nada novo. O que foi partilhado continua num ficheiro protegido da aplicação, como antes: até 15 minutos para abrir o Trilho manualmente e até 24 horas para tocar na notificação; ao ser usado, expirar ou ser substituído por outra partilha, o ficheiro e a notificação são apagados. O nome do local pode aparecer no ecrã bloqueado, conforme a definição de pré-visualizações do iOS. Com a partilha opcional ativa, os eventos indicam se a viagem foi aberta pela notificação ou manualmente, um intervalo do tempo desde a partilha, se a notificação foi mostrada (ou porque não), se uma partilha guardada expirou ou foi descartada sem abrir a viagem, a resposta ao pedido de autorização e a oferta desta opção mostrada e tocada — nunca o local, o nome ou o texto partilhado. A aplicação guarda no telemóvel, sem os enviar, a escolha e os indicadores de que precisa para não repetir a oferta. Sem novas categorias de dados.

Também desde a versão 1.5.0, os eventos opcionais incluem um marco de coorte quando o planeador mostra uma resposta nos dias 0–6 do período de consentimento, na mesma estatística opcional e sem novas categorias de dados.

O servidor usa SQLite persistente. Registos de deduplicação contêm o hash SHA-256 do UUID, ID do evento e impressão do conteúdo, com prazo de 8 dias pelo dia do evento. Contagens por instalação/categoria/dia mantêm a ligação pseudónima durante 45 dias. A limpeza corre no arranque e de hora a hora; estes prazos não garantem apagamento físico ao segundo nem abrangem automaticamente cópias de segurança ou fornecedores. Não há moradas, coordenadas, texto livre, conteúdo NFC ou histórico de trajetos neste fluxo.

Os relatórios internos do Trilho suprimem grupos positivos abaixo de 25 IDs de instalação declarados; isto não comprova pessoas diferentes nem anonimato. O Google Analytics para Firebase recebe separadamente eventos individuais após novo consentimento. O SDK acrescenta o identificador próprio de instância, horas dos eventos, dados de ciclo de vida/sessão e contexto técnico, podendo inferir localização aproximada a partir do IP. Não recebe os IDs de instalação/evento/sessão do Trilho, coordenadas GPS, texto de pesquisa, conteúdo do cartão ou histórico de trajetos. Identificadores publicitários, personalização de anúncios e registo de ecrãs ficam desativados; não definimos ID de utilizador. O limiar de 25 e as datas limitadas ao dia não se aplicam ao Google nem aos relatórios individuais Sentry. Ver informação do Google sobre o SDK.

A conservação configurada no GA4 é separada dos 45 dias da base própria; a eliminação física não foi verificada. Não se promete tratamento exclusivo na UE nem eliminação automática dos dados já enviados a fornecedores. O SDK gere a sua própria fila; invocá-lo não confirma a receção. Os KPI próprios baseiam-se nos registos aceites. As coortes juntam versões da aplicação e só amadurecem após a janela de observação mais sete dias de entrega: D7 no dia 15 e D30 no dia 38, sendo a inscrição o dia 0.

A fila local limita-se a 2000 eventos e descarta os que têm mais de 7 dias. Há tentativas de entrega durante a utilização, ao iniciar, aceitar ou recuperar a ligação; o envio em segundo plano não é garantido. Só os inícios recebidos podem fazer parte dos denominadores, e a ausência de resultado permanece desconhecida.

Trajetos guardados, preferências e histórico do cartão ficam localmente. A aplicação não tem permissão de localização em segundo plano e não envia o conteúdo dos cartões de transporte.

Desde a versão 1.6.0, Casa e Trabalho podem ser uma morada e não só uma paragem, e os trajetos guardados guardam as suas pontas e a linha que o Início segue (operador, linha, paragens de embarque e de saída, minutos a pé). Tudo fica na base de dados local e na cópia de segurança do sistema; um contador de pesquisas repetidas (pares de coordenadas e dias, até 30 pares e 14 dias) nunca sai do telemóvel e apaga-se com «Apagar histórico recente». Enquanto o Início está visível, a aplicação pede ao servidor os horários dessa linha com as paragens de embarque e de saída, no máximo 5 pedidos por minuto; o servidor não os guarda (o registo só tem estado e método). As coordenadas de Casa e Trabalho vão ao cálculo de percursos quando o utilizador abre o trajeto e uma vez, para determinar a linha depois de os definir. «Estou em casa agora» e guardar a partir de «A tua localização» enviam as coordenadas ao serviço de moradas só por ação explícita. Com a partilha opcional ativa, os eventos indicam categorias fechadas — que local foi definido ou apagado e de que tipo, como foi guardado um trajeto, a resposta à sugestão de o guardar, que cartão foi aberto e o estado do horário mostrado — nunca moradas, paragens, linhas, horas ou coordenadas. Sem novas categorias de dados.

Com os widgets do Trilho (no ecrã principal e, no iPhone, também no ecrã bloqueado), enquanto um widget estiver no ecrã o telemóvel pede ao servidor, periodicamente e sem ação do utilizador, as próximas partidas do trajeto guardado ou da paragem fixada: no Android cerca de 15 em 15 minutos, no iPhone quando o sistema o decidir, em regra entre 15 e 60 minutos, e também ao abrir a aplicação ou tocar em «Atualizar». O pedido leva só os códigos do operador, das paragens e da linha — nunca coordenadas, moradas ou nomes — e o servidor não o regista (o registo só tem estado e método). Sem consentimento, o servidor conta apenas quantos pedidos de widgets recebe por dia, plataforma, tipo de widget e motivo, sem endereço IP, identificador ou paragens, e guarda estes totais durante 400 dias. A cópia de que o widget precisa (títulos dos trajetos, nomes das paragens, linhas e partidas) fica no telemóvel: no Android, fora da cópia de segurança; no iPhone, num contentor partilhado com o widget, protegido até ao primeiro desbloqueio depois de ligar o telemóvel e excluído da cópia de segurança. No ecrã bloqueado do iPhone, os nomes de locais e paragens ficam escondidos se o utilizador desligar o acesso com o ecrã bloqueado. Com a partilha opcional ativa, os eventos indicam categorias fechadas — widgets adicionados, removidos ou configurados, de que tipo e tamanho, o estado mostrado quando o widget foi tocado, os passos da sugestão para adicionar um widget e, uma vez por dia, que tipos de widget estão no ecrã e se há um trajeto guardado —, nunca paragens, linhas, horas ou locais. A aplicação continua sem localização em segundo plano. Sem novas categorias de dados.

Em «Os meus passes», o utilizador pode indicar o passe da cidade (Navegante Metropolitano, Municipal, +65, Urbano 3ª Idade ou jovem; Cartão Porto, Andante Metropolitano ou Andante jovem), que paga com cartão bancário em vez de um passe, e se tem o Passe Ferroviário Verde da CP. As respostas ficam no telemóvel; o município escolhido para o passe Municipal nunca sai dele, e os pedidos de percurso não incluem os passes (o servidor marca cada troço da mesma forma para todos e a aplicação decide «Incluído» no telemóvel). Com a partilha opcional ativa, os eventos e as propriedades de utilizador do Google indicam só a categoria escolhida. Algumas categorias revelam mais do que um passe: +65, Urbano 3ª Idade, jovem e Andante jovem indicam uma faixa etária (65 ou mais, até aos 23), Urbano 3ª Idade também morada fiscal em Lisboa, e Cartão Porto que a pessoa vive ou estuda no Porto; o cartão bancário é um meio de pagamento e não revela idade nem morada. Os relatórios próprios só mostram grupos de pelo menos 25 instalações; o Google recebe as propriedades sem esse limiar.

Desde a versão 1.8.0, em Lisboa e no Porto, o percurso diz se o cartão bancário ou o telemóvel servem para pagar cada troço, e a folha «Como pagar esta viagem» explica como. É só informação: o Trilho não lê, não guarda nem pede dados do cartão bancário e não faz pagamentos. Com a partilha opcional ativa, um evento regista que a folha foi aberta a partir do percurso e qual era a resposta (basta o cartão, exceto num troço, talvez não chegue ou precisa de bilhete) — nunca o percurso, os operadores ou os locais. Sem novos tipos de dados nem destinatários.

A única exceção, desde 28 de setembro de 2026, é uma sugestão de paragem que o utilizador decide enviar («Sabes que paragem é?»): os códigos do operador, da linha e da paragem dessa validação, entrada/saída e a paragem escolhida no catálogo do Trilho — nunca o número do cartão, horas das viagens, saldo ou qualquer ID de dispositivo, instalação ou estatística, e nenhum texto livre. O servidor guarda apenas totais de votos (sem linha por sugestão, sem hora, sem IP). O IP é usado em memória para um limite de pedidos e uma impressão com sal válida só nesse dia, cujo segredo roda diariamente e nunca é gravado. Os nomes aceites (pelo menos três sugestões concordantes e 75 % das sugestões do código, só com a linha conhecida, ou verificação manual) são mostrados a todos.

Controlos e verificações pendentes

Responsabilidade e direitos

O responsável é o programador independente do Trilho, em Portugal (ver a política de privacidade). Avaliação do próprio responsável, de 3 de outubro de 2026, feita sem aconselhamento jurídico: (a) não é obrigatório designar um encarregado de proteção de dados (artigo 37.º do RGPD), porque o Trilho não é uma autoridade pública, a sua atividade principal não consiste no controlo regular e sistemático de pessoas em grande escala (a localização é usada em primeiro plano e só quando uma funcionalidade a requer; a estatística de utilização é opcional) e não trata categorias especiais de dados em grande escala; (b) uma avaliação de impacto formal (artigo 35.º) provavelmente não é obrigatória pelas mesmas razões, mas esta avaliação e a interna são mantidas como se fosse; (c) a avaliação interna serve também de registo das atividades de tratamento (artigo 30.º). Estas conclusões são revistas sempre que o tratamento mudar. Os deveres do RGPD dependem do tratamento e do risco, não de um número de utilizadores. O risco residual não foi aprovado como baixo.

Não ter conta não significa não ter dados pessoais nem direitos. Pedidos e questões podem ser enviados para [email protected]. Apagar a aplicação não elimina automaticamente os registos do servidor ou dos fornecedores. Os incidentes devem ser avaliados nos termos dos artigos 33.º e 34.º do RGPD, incluindo os prazos de notificação aplicáveis. Pode apresentar reclamação à CNPD.

English version