<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Rasepi Blog</title>
  <subtitle>Rethinking knowledge in times of AI. Insights on documentation freshness, multilingual publishing, and AI-ready knowledge bases.</subtitle>
  <link href="https://rasepi.com/pt/blog/feed.xml" rel="self" type="application/atom+xml" />
  <link href="https://rasepi.com/pt/blog/" rel="alternate" type="text/html" />
  <id>https://rasepi.com/pt/blog/</id>
  <updated>2026-04-03T00:00:00Z</updated>
  <author>
    <name>Rasepi Blog</name>
  </author>
  <entry>
    <title>Leitores e escritores estão em modos mentais diferentes. Porque é que todas as ferramentas lhes dão a mesma interface de utilizador?</title>
    <link href="https://rasepi.com/pt/blog/readers-and-writers-need-different-interfaces/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/readers-and-writers-need-different-interfaces/</id>
    <updated>2026-04-03T00:00:00Z</updated>
    <summary>As plataformas de documentação forçam os leitores, os escritores e a IA a entrar numa única interface. Mas consumir conhecimento e criá-lo são tarefas cognitivamente diferentes. O Rasepi separa-as.</summary>
    <content type="html">&lt;p&gt;Abra o Confluence agora mesmo e encontre um documento que precise de ler. O que é que vê?&lt;/p&gt;
&lt;p&gt;Uma barra de ferramentas. Botões de edição. Caixas de comentários. Ligações para o histórico da página. Uma barra lateral cheia de navegação de que não precisa. Pistas de navegação. Campos de metadados. Indicadores de permissão. Toda uma interface de criação em torno do texto que veio aqui para ler.&lt;/p&gt;
&lt;p&gt;Agora pense no que realmente queria: a resposta a uma pergunta, ou os três passos seguintes de um processo, ou uma política que precisa de consultar antes de uma reunião daqui a dez minutos.&lt;/p&gt;
&lt;p&gt;Veio para consumir. A interface pressupõe que veio para criar.&lt;/p&gt;
&lt;p&gt;Este é o padrão em quase todas as plataformas de documentação. Confluence, Notion, SharePoint, GitBook, Nuclino, Slite. Todas elas apresentam o mesmo ambiente aos leitores e escritores. A página é a página. Toda a gente tem a mesma visão, com mais ou menos alguns botões com permissões.&lt;/p&gt;
&lt;p&gt;Parece normal porque nunca tivemos outra coisa. Mas é uma decisão de design, não uma lei da natureza. E é a decisão errada.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://rasepi.com/pt/blog/img/readers-writers-ui.svg&quot; alt=&quot;A mesma interface para ler e escrever cria uma sobrecarga cognitiva&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Ler e escrever não são a mesma tarefa cognitiva&lt;/h2&gt;
&lt;p&gt;Isto não é uma preferência de interface. Trata-se de uma diferença fundamental na forma como o cérebro funciona.&lt;/p&gt;
&lt;p&gt;Quando se escreve, está-se em modo generativo. Está a construir, a organizar, a decidir o que incluir e o que deixar de fora. Precisa de ferramentas: opções de formatação, controlos de estrutura, incorporação de suportes, campos de metadados, histórico de versões, funcionalidades de colaboração. A interface deve proporcionar-lhe poder e flexibilidade.&lt;/p&gt;
&lt;p&gt;Quando se lê, está-se em modo recetivo. Está a analisar, a filtrar, a extrair o que é relevante e a tentar seguir em frente. Necessita de clareza: tipografia limpa, disposição clara, distração mínima. A interface deve sair do caminho.&lt;/p&gt;
&lt;p&gt;A psicologia cognitiva tem uma estrutura clara para isto. A [Teoria da Carga Cognitiva] (https://www.instructionaldesign.org/theories/cognitive-load/), desenvolvida por John Sweller no final dos anos 80, distingue entre carga intrínseca (a dificuldade do material em si), carga germânica (o esforço de aprendizagem e integração) e carga externa (tudo o que o ambiente acrescenta que não ajuda). Todas as barras de ferramentas, barras laterais e botões de edição visíveis para um leitor são cargas estranhas. Não os ajuda a compreender o conteúdo. Concorre ativamente pela atenção.&lt;/p&gt;
&lt;p&gt;A investigação de [Mayer e Moreno (2003)] (https://doi.org/10.1207/S15326985EP3801_6) sobre a aprendizagem multimédia demonstrou que a redução de elementos estranhos melhora a compreensão e a retenção. O seu princípio de coerência é direto: Uma interface de documentação que mostra os controlos de criação aos leitores está a violar este princípio em cada carregamento de página.&lt;/p&gt;
&lt;p&gt;**O leitor não precisa de ver as ferramentas do autor. Mostrá-las na mesma não é neutro. É ativamente prejudicial para a compreensão.&lt;/p&gt;
&lt;h2&gt;Como é que as plataformas actuais lidam com isto (a maioria não lida)&lt;/h2&gt;
&lt;p&gt;Vejamos o que existe.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;Confluence&lt;/strong&gt; tem um modo de leitura e um modo de edição, mas o modo de leitura ainda está rodeado pela navegação, metadados e árvore de páginas da plataforma. A barra de ferramentas de edição desaparece quando não se está a editar, mas o quadro mental de &amp;quot;esta é uma página wiki editável&amp;quot; nunca desaparece completamente. Todos os leitores vêem o botão &amp;quot;Editar&amp;quot;. A página sussurra: &lt;em&gt;podes mudar isto.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;Notion&lt;/strong&gt; é pior neste aspeto. A sua principal filosofia de design é que tudo é sempre editável. Clique em qualquer lugar e está a escrever. Isso é ótimo para os escritores. É terrível para os leitores que querem apenas absorver o conteúdo sem a ansiedade de modificar algo acidentalmente. A própria [galeria de modelos] do Notion (https://www.notion.com/templates) mostra isso: cada modelo é um espaço de trabalho, não uma publicação.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O SharePoint&lt;/strong&gt; suporta tecnicamente diferentes layouts de página para visualização e edição, mas a experiência geral continua a ser uma intranet corporativa. Os leitores sentem-se como se estivessem dentro de uma ferramenta empresarial e não a ler um documento optimizado para a compreensão.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;GitBook&lt;/strong&gt; é o que mais se aproxima de uma experiência de leitura em primeiro lugar, com a sua saída limpa ao estilo de documentação. Mas mesmo aí, a experiência de leitura serve o pressuposto de que o leitor é um programador que está a olhar para documentos técnicos. Não foi concebido para o consumidor de conhecimentos gerais.&lt;/p&gt;
&lt;p&gt;Nenhuma destas plataformas trata a leitura como uma atividade fundamentalmente diferente da escrita. Tratam-na como escrever com a barra de ferramentas escondida.&lt;/p&gt;
&lt;p&gt;Ferramentas actuais: uma interface, todos os públicos](/pt/blog/img/leitores-escritores-ferramentas-actuais.svg)&lt;/p&gt;
&lt;h2&gt;O custo de uma interface única&lt;/h2&gt;
&lt;p&gt;Este não é apenas um problema estético. Tem consequências mensuráveis.&lt;/p&gt;
&lt;h3&gt;A sobrecarga de informação reduz a compreensão&lt;/h3&gt;
&lt;p&gt;Um [estudo publicado no Journal of Consumer Research] (https://doi.org/10.1086/209336) descobriu que a sobrecarga de informação leva a uma pior qualidade de decisão, com o efeito a aumentar à medida que o rácio entre informação irrelevante e relevante cresce. Uma página de documentação com controlos de criação visíveis, árvores de navegação e campos de metadados aumenta esse rácio para todos os leitores que não estão lá para escrever.&lt;/p&gt;
&lt;h3&gt;A mudança de contexto tem um custo real&lt;/h3&gt;
&lt;p&gt;Quando um sinal de interface diz &amp;quot;pode editar isto&amp;quot;, ativa um quadro cognitivo diferente de &amp;quot;leia isto&amp;quot;. &lt;a href=&quot;https://www.ics.uci.edu/~gmark/&quot;&gt;A investigação de Gloria Mark na UC Irvine&lt;/a&gt; sobre atenção e multitarefas concluiu que são necessários, em média, 23 minutos e 15 segundos para voltar a concentrar-se totalmente após uma mudança de contexto. Um leitor que considere momentaneamente a hipótese de editar (mesmo para corrigir uma gralha) foi retirado do modo de leitura. Não se trata de uma hipótese. Qualquer pessoa que tenha utilizado o Notion conhece a experiência de clicar para selecionar texto e acidentalmente começar a escrever.&lt;/p&gt;
&lt;h3&gt;Leitores e escritores têm necessidades diferentes para o mesmo conteúdo&lt;/h3&gt;
&lt;p&gt;Um escritor precisa de ver a estrutura, os marcadores de formatação, os tipos de blocos, os metadados e os sinais de colaboração. Precisa de toda a maquinaria.&lt;/p&gt;
&lt;p&gt;Um leitor precisa de ver texto limpo, hierarquia clara e o caminho mais rápido para a informação que procura. Precisa do conteúdo, não da maquinaria.&lt;/p&gt;
&lt;p&gt;Servir ambos a partir da mesma interface significa que nenhum deles obtém uma experiência optimizada para o que estão realmente a fazer.&lt;/p&gt;
&lt;h2&gt;E depois há o terceiro público: A IA&lt;/h2&gt;
&lt;p&gt;É aqui que tudo se complica e que as plataformas existentes não estão preparadas.&lt;/p&gt;
&lt;p&gt;A documentação em 2026 tem três consumidores distintos, não dois:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Escritores&lt;/strong&gt; que criam e mantêm conteúdos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leitores&lt;/strong&gt; que consomem conteúdos visualmente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sistemas de IA&lt;/strong&gt; que recuperam, analisam e sintetizam conteúdos de forma programática&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cada um destes públicos necessita de uma interface fundamentalmente diferente para o mesmo conteúdo subjacente.&lt;/p&gt;
&lt;p&gt;Os escritores precisam de ferramentas de edição ricas, funcionalidades de colaboração e controlos estruturais. Os leitores precisam de uma apresentação clara e concentrada, com o mínimo de distracções. A IA necessita de resultados estruturados e analisáveis por máquina com metadados explícitos: sinais de atualidade, etiquetas de classificação, endereçamento ao nível do bloco e marcação semântica clara.&lt;/p&gt;
&lt;p&gt;Como discutimos em &lt;a href=&quot;https://rasepi.com/pt/blog/builders-not-developers-how-claude-changed-devrel/&quot;&gt;Builders, Not Developers&lt;/a&gt;, os intermediários de IA já são o consumidor dominante de documentação para uma parte crescente dos trabalhadores do conhecimento. &lt;a href=&quot;https://github.blog/news-insights/research/survey-ai-wave-grows/&quot;&gt;A pesquisa de desenvolvedores do GitHub de 2024&lt;/a&gt; descobriu que 97% dos desenvolvedores corporativos usaram ferramentas de codificação de IA. Em 2026, [84% dos programadores utilizam regularmente ferramentas de IA] (https://www.index.dev/blog/developer-productivity-statistics-with-ai-tools), sendo que 41% de todo o código é gerado por IA.&lt;/p&gt;
&lt;p&gt;Estes sistemas de IA não querem saber da sua barra lateral ou da sua barra de ferramentas. Eles precisam de dados limpos. E uma plataforma que confunde a visão do leitor com a visão do escritor também está a confundir a superfície consumível pela IA com a superfície de criação humana. São três incompatibilidades numa só interface.&lt;/p&gt;
&lt;p&gt;Três públicos, três necessidades diferentes] (/blog/img/leitores-escritores-três-audiências.svg)&lt;/p&gt;
&lt;h2&gt;Como o Rasepi separa as experiências&lt;/h2&gt;
&lt;p&gt;O Rasepi foi concebido com base no princípio de que criar conteúdos e consumir conteúdos são actividades diferentes que merecem interfaces diferentes.&lt;/p&gt;
&lt;h3&gt;O ambiente do escritor&lt;/h3&gt;
&lt;p&gt;Quando está a escrever no Rasepi, obtém um ambiente de criação completo. Edição de texto rico com TipTap, controlos ao nível do bloco, indicadores de estado da tradução, gestão de expiração, ferramentas de colaboração, vistas da estrutura de conteúdos e tudo o que um escritor precisa para criar e manter documentação de alta qualidade.&lt;/p&gt;
&lt;p&gt;O escritor vê a maquinaria porque precisa da maquinaria.&lt;/p&gt;
&lt;!-- Captura de ecrã: Ambiente de escrita do Rasepi --&gt;
&lt;h3&gt;O ambiente do leitor&lt;/h3&gt;
&lt;p&gt;Quando alguém consome um documento Rasepi, vê uma experiência de leitura limpa e focada. Sem chrome de edição. Sem barras de ferramentas. Sem sinais de &amp;quot;pode modificar isto&amp;quot;. Apenas o conteúdo, apresentado num esquema optimizado para compreensão e leitura.&lt;/p&gt;
&lt;p&gt;O leitor não vê o botão de edição porque não está aqui para editar. Está aqui para aprender algo, seguir um processo ou encontrar uma resposta. A interface respeita essa intenção.&lt;/p&gt;
&lt;!-- Captura de ecrã: Experiência de leitura do Rasepi --&gt;
&lt;h3&gt;A superfície da IA&lt;/h3&gt;
&lt;p&gt;Para os consumidores de IA, o Rasepi expõe o conteúdo através de APIs estruturadas com metadados completos. Cada bloco tem a sua pontuação de frescura, estado de tradução, hash de conteúdo e etiquetas de classificação. Os sistemas de IA podem consultar o conteúdo ao nível do bloco, filtrar por frescura, excluir material obsoleto ou de rascunho e obter exatamente os dados estruturados de que necessitam.&lt;/p&gt;
&lt;p&gt;Não é preciso raspar uma página wiki e esperar pelo melhor. A IA obtém uma interface criada para o efeito, tal como o leitor e o escritor.&lt;/p&gt;
&lt;!-- Captura de ecrã: Superfície / API do Rasepi AI --&gt;
&lt;h2&gt;Uma camada de conteúdo, três interfaces&lt;/h2&gt;
&lt;p&gt;O importante é que não estamos a manter três cópias do conteúdo. Este não é o problema das cinco cópias de integração que discutimos em [Stop Maintaining Five Copies of the Same Document] (/blog/stop-maintaining-five-copies-of-the-same-document/).&lt;/p&gt;
&lt;p&gt;Trata-se de uma camada de conteúdo, armazenada como blocos estruturados, servida através de três vistas diferentes optimizadas para três públicos diferentes.&lt;/p&gt;
&lt;p&gt;O redator edita os blocos. O leitor vê o conteúdo montado e estilizado. A IA consulta dados estruturados com metadados. Os mesmos blocos. A mesma fonte de verdade. Camada de apresentação diferente para cada consumidor.&lt;/p&gt;
&lt;p&gt;Isto só é possível devido à arquitetura ao nível dos blocos. Cada conteúdo é uma unidade individualizável com os seus próprios metadados. Pode apresentar esses blocos de forma diferente, dependendo de quem os está a pedir:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Audiência&lt;/th&gt;
&lt;th&gt;Necessidades&lt;/th&gt;
&lt;th&gt;Obtém&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ambiente de criação completo com controlos ao nível dos blocos&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leitor**&lt;/td&gt;
&lt;td&gt;Texto limpo, hierarquia clara, digitalização rápida&lt;/td&gt;
&lt;td&gt;Vista de leitura focada, sem cromo de edição&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API a nível de bloco com metadados completos&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Porque é que isto é mais importante do que parece&lt;/h2&gt;
&lt;p&gt;Poderá ler isto e pensar: &amp;quot;É apenas a interface do utilizador. Vistas diferentes da mesma coisa. Quão importante pode ser?&amp;quot;&lt;/p&gt;
&lt;p&gt;Muito importante, ao que parece.&lt;/p&gt;
&lt;h3&gt;Confiança do leitor&lt;/h3&gt;
&lt;p&gt;As pessoas confiam em conteúdos que parecem publicados. Quando uma página parece um wiki que qualquer pessoa pode editar, os leitores inconscientemente desconfiam dela. Quando o mesmo conteúdo é apresentado numa visualização de leitura limpa e com qualidade de publicação, tem mais autoridade. Isto não é irracional. É um sinal de que alguém levou a apresentação a sério, o que implica que também levou o conteúdo a sério.&lt;/p&gt;
&lt;p&gt;O Nielsen Norman Group estudou extensivamente esta questão. A sua [investigação sobre a credibilidade do conteúdo] (https://www.nngroup.com/articles/trust-signals-content/) mostra que a qualidade do design e a apresentação são dos sinais mais fortes em que os utilizadores confiam para avaliar a fiabilidade do conteúdo. Uma vista de editor desordenada prejudica ativamente a credibilidade do conteúdo que apresenta.&lt;/p&gt;
&lt;h3&gt;Produtividade do escritor&lt;/h3&gt;
&lt;p&gt;Os escritores que trabalham num ambiente de criação dedicado não têm de alternar entre &amp;quot;estou a ler ou estou a escrever?&amp;quot;. As ferramentas estão lá porque é suposto estarem lá, não porque a interface não consegue decidir quem está a olhar para ela.&lt;/p&gt;
&lt;h3&gt;Fiabilidade da IA&lt;/h3&gt;
&lt;p&gt;Quando os sistemas de IA têm uma superfície criada para o efeito com metadados estruturados, podem tomar melhores decisões sobre o que recuperar e o que excluir. Podem verificar as pontuações de atualidade antes de incluir um bloco numa resposta. Podem respeitar as etiquetas de classificação. Podem filtrar por idioma, estado ou público. Nada disto é possível quando a IA está a extrair a mesma página HTML que foi concebida para leitores humanos.&lt;/p&gt;
&lt;h2&gt;A mudança de modelo mental&lt;/h2&gt;
&lt;p&gt;O pressuposto fundamental da maioria das plataformas de documentação é: &lt;em&gt;a página é a unidade, e toda a gente interage com a página.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;O pressuposto do Rasepi é diferente: O pressuposto do Rasepi é diferente: &lt;em&gt;o bloco é a unidade, e diferentes públicos interagem com os blocos através de superfícies criadas para o efeito.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Isto parece uma pequena distinção arquitetónica. Mas não é. É a diferença entre uma ferramenta que mostra acidentalmente conteúdos a sistemas de IA e uma que os serve deliberadamente. Entre um ambiente de escrita que por acaso é legível e uma experiência de leitura que foi concebida de raiz. Entre uma interface suficientemente boa e três excelentes.&lt;/p&gt;
&lt;p&gt;A documentação já não é apenas escrita e lida. É escrita, lida, consultada, traduzida, pontuada, classificada e fornecida a sistemas de IA em grande escala. Uma única interface não pode otimizar tudo isso, e fingir que pode é a razão pela qual acabámos com wikis que ninguém quer ler e assistentes de IA a extrair respostas de páginas que nunca foram concebidas para serem consumidas por máquinas.&lt;/p&gt;
&lt;p&gt;Os leitores e os escritores estão em modos mentais diferentes. A IA está num modo completamente diferente. A interface deve refletir isso mesmo.&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="ux" />
    <category term="documentation" />
    <category term="knowledge-management" />
  </entry>
  <entry>
    <title>O estado dos documentos em 2026: cinco tendências que definirão a próxima era</title>
    <link href="https://rasepi.com/pt/blog/the-state-of-docs-in-2026/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/the-state-of-docs-in-2026/</id>
    <updated>2026-04-03T00:00:00Z</updated>
    <summary>O número de leitores de IA aumentou 500%. A Notion enviou 21.000 agentes. O Confluence recebeu o Rovo. O GitBook publicou o State of Docs. Cinco tendências de toda a indústria que nos dizem para onde a documentação está a ir.</summary>
    <content type="html">&lt;p&gt;De tempos a tempos, reservo uma manhã para ler. Não o código Rasepi, não os problemas do GitHub. Blogs de concorrentes, relatórios do setor, anúncios de palestras, pesquisas com desenvolvedores. O que quer que tenha sido lançado no último trimestre e que tenha a ver com documentação, gestão do conhecimento ou fluxos de trabalho assistidos por IA.&lt;/p&gt;
&lt;p&gt;Fiz isso na semana passada, e a imagem que surgiu foi mais nítida do que eu esperava. Não porque um único anúncio tenha sido inovador, mas porque cinco tendências distintas estão a convergir e, quando as alinhamos, elas traçam um quadro muito claro do que as plataformas de documentação terão de fazer nos próximos dois anos.&lt;/p&gt;
&lt;p&gt;Eis o que descobri.&lt;/p&gt;
&lt;h2&gt;1. A IA é o principal leitor agora. Não os humanos.&lt;/h2&gt;
&lt;p&gt;O GitBook publicou um número impressionante em seu [relatório de dados de documentos de IA] (https://www.gitbook.com/blog/ai-docs-data-2025): A leitura de documentação por IA aumentou mais de 500% em 2025. Quinhentos por cento. Isso não é um erro de arredondamento.&lt;/p&gt;
&lt;p&gt;Enquanto isso, o [2024 Developer Survey] do Stack Overflow (https://survey.stackoverflow.co/2024/) mostrou que 61% dos desenvolvedores gastam mais de 30 minutos por dia procurando respostas. Mas a forma como eles pesquisam mudou. A própria pesquisa do GitHub descobriu que &lt;a href=&quot;https://github.blog/news-insights/research/survey-ai-wave-grows/&quot;&gt;97% dos desenvolvedores corporativos&lt;/a&gt; usaram ferramentas de codificação de IA. Até 2026, &lt;a href=&quot;https://www.index.dev/blog/developer-productivity-statistics-with-ai-tools&quot;&gt;84% dos desenvolvedores&lt;/a&gt; usam ferramentas de IA diariamente, com 41% do código agora gerado por IA. Estas pessoas não estão a navegar na barra lateral do seu wiki. Estão a perguntar ao Claude ou ao Copilot, e a IA está a ler os seus documentos em nome delas.&lt;/p&gt;
&lt;p&gt;A implicação é difícil de exagerar. O seu consumidor mais frequente de documentação já não é uma pessoa com um separador do browser aberto. É um modelo de linguagem que faz chamadas de recuperação. E esse modelo não tem capacidade para olhar para uma página e pensar &amp;quot;hmm, isto parece desatualizado&amp;quot;.&lt;/p&gt;
&lt;p&gt;O GitBook apercebeu-se disso cedo e respondeu com o seu relatório &lt;a href=&quot;https://www.gitbook.com/blog/state-of-docs-2026&quot;&gt;State of Docs 2026&lt;/a&gt; e um impulso para formatos legíveis por máquinas. Também lançaram o &lt;a href=&quot;https://www.gitbook.com/blog/skill-md&quot;&gt;skill.md&lt;/a&gt;, uma convenção para estruturar informações sobre produtos especificamente para agentes de IA. A Google foi mais longe com o seu &lt;a href=&quot;https://blog.google/innovation-and-ai/technology/developers-tools/gemini-api-docsmcp-agent-skills/&quot;&gt;Gemini API Docs MCP&lt;/a&gt;, que liga os agentes de codificação à documentação atual através do Protocolo de Contexto de Modelo. O seu raciocínio foi explícito: os agentes geram código desatualizado porque os seus dados de treino têm uma data limite. A correção do MCP elevou a taxa de aprovação da avaliação para 96,3%.&lt;/p&gt;
&lt;p&gt;Portanto, a primeira tendência está estabelecida. A IA é o leitor principal. As plataformas que tratarem este facto como uma restrição de conceção fundamental, e não como uma funcionalidade a acrescentar mais tarde, terão uma vantagem estrutural.&lt;/p&gt;
&lt;h2&gt;2. A frescura e os metadados de confiança estão a tornar-se obrigatórios&lt;/h2&gt;
&lt;p&gt;A Anthropic entrevistou &lt;a href=&quot;https://www.anthropic.com/81k-interviews&quot;&gt;81.000 utilizadores do Claude&lt;/a&gt; em dezembro de 2025 e publicou os resultados em março de 2026. É o maior estudo qualitativo de utilizadores de IA alguma vez realizado (159 países, 70 línguas). A preocupação mais citada? A falta de fiabilidade. 27% dos inquiridos indicaram-na como a sua principal preocupação, e 79% dessas pessoas tinham-na experimentado em primeira mão.&lt;/p&gt;
&lt;p&gt;Este número deveria deixar qualquer equipa de documentação acordada à noite.&lt;/p&gt;
&lt;p&gt;Quando as respostas da IA não são fiáveis, o problema nem sempre é o modelo. Muitas vezes, o modelo está a reproduzir fielmente o que encontrou num documento obsoleto. O modelo não alucinou. Os seus documentos estavam simplesmente errados e ninguém os assinalou.&lt;/p&gt;
&lt;p&gt;Os dados do Stack Overflow reforçam isso de um ângulo diferente: &lt;a href=&quot;https://survey.stackoverflow.co/2024/&quot;&gt;81% dos programadores&lt;/a&gt; esperam que a IA seja mais integrada na forma como documentam o código no próximo ano. Se 81% dos seus utilizadores estão a fornecer documentos à IA, e 27% dos utilizadores de IA dizem que a falta de fiabilidade é o maior problema, tem um problema de confiança que nenhuma quantidade de engenharia rápida resolve. A correção está na fonte.&lt;/p&gt;
&lt;p&gt;É por isso que os metadados de atualidade são importantes. Não os carimbos de data/hora da &amp;quot;última edição&amp;quot; (estes dizem-nos quando alguém tocou no ficheiro, não se o conteúdo ainda está correto). Frescura real: estado da revisão, saúde da ligação, alinhamento da tradução, sinais de leitura, deteção de desvios de conteúdo. Metadados que uma máquina pode ler e utilizar para decidir se um documento é seguro para citar.&lt;/p&gt;
&lt;p&gt;Estou sempre a voltar a um enquadramento simples. A sua documentação precisa de uma pontuação de crédito. Não um registo de data e hora. Uma pontuação de crédito. (Temos estado a construir exatamente isto com o [sistema de pontuação de frescura] do Rasepi(/features/freshness) e, honestamente, ver os dados da indústria só me deixa mais convencido de que é a decisão certa).&lt;/p&gt;
&lt;h2&gt;3. A tradução está a passar de &amp;quot;projeto&amp;quot; para &amp;quot;pipeline&amp;quot;&lt;/h2&gt;
&lt;p&gt;DeepL publicou um artigo em fevereiro intitulado [&amp;quot;The 6 Translation Transformations Global Businesses Can&#39;t Afford to Miss&amp;quot;] (https://www.deepl.com/en/blog/six-translation-transformations). O seu argumento: a tradução está a tornar-se um desafio operacional contínuo e não um projeto de lote que se realiza trimestralmente.&lt;/p&gt;
&lt;p&gt;Isto está de acordo com tudo o que vejo.&lt;/p&gt;
&lt;p&gt;O modelo antigo era simples. Escrever em inglês. Quando se tem orçamento, contrata-se um tradutor ou recorre-se a um serviço. Receber as traduções. Carregue-as. Está feito até à próxima vez. O problema é que a &amp;quot;próxima vez&amp;quot; chega cada vez mais depressa quando o seu produto é enviado semanalmente e os seus documentos são actualizados constantemente. Na altura em que a versão alemã volta da revisão, a versão inglesa já foi alterada duas vezes.&lt;/p&gt;
&lt;p&gt;O [Customization Hub] (https://www.deepl.com/customization-hub) do próprio DeepL agora oferece glossários, regras de estilo e configurações de formalidade, o que é ótimo. Mas se essas ferramentas estiverem fora da sua plataforma de documentação, está a gerir uma cadeia de ferramentas de tradução: editor, exportar, traduzir, rever, reimportar, repetir. Cada passo é uma oportunidade para se desviar.&lt;/p&gt;
&lt;p&gt;O Notion não tem suporte multilingue nativo. O Confluence oferece-o através de plugins do mercado. O GitBook &lt;a href=&quot;https://www.gitbook.com/blog/new-in-gitbook-august-2025&quot;&gt;adicionou a tradução automática em agosto de 2025&lt;/a&gt;, que é um passo, mas funciona ao nível da página.&lt;/p&gt;
&lt;p&gt;A verdadeira mudança é do nível da página para o nível do bloco. Quando se controlam as traduções ao nível do parágrafo, só se retraduz o que realmente mudou. Uma edição típica afecta talvez dois parágrafos em quarenta. Isso representa 94% menos trabalho de tradução. (Esta é a arquitetura de tradução principal do Rasepi e, honestamente, a coisa de que mais me orgulho no produto. Mas mesmo deixando-nos de lado, a direção da indústria é clara: tradução contínua, incremental e incorporada é para onde isto se dirige).&lt;/p&gt;
&lt;h2&gt;4. Os agentes de IA precisam de conteúdo estruturado, não de páginas wiki&lt;/h2&gt;
&lt;p&gt;Esta questão cristalizou-se para mim quando a Notion anunciou [Custom Agents] (https://www.notion.com/blog/introducing-custom-agents) em fevereiro. 21.000 agentes construídos durante o acesso antecipado. Agentes que respondem a perguntas de bases de conhecimento, encaminham tarefas, compilam relatórios de estado. Só o Ramp tem mais de 300 agentes.&lt;/p&gt;
&lt;p&gt;A Atlassian seguiu uma direção semelhante. A &lt;a href=&quot;https://www.atlassian.com/blog/confluence/create-and-edit-with-rovo&quot;&gt;Rovo AI in Confluence&lt;/a&gt; extrai contexto de toda a Atlassian e de aplicações de terceiros para gerar conteúdo. A sua proposta: &amp;quot;conteúdo rico em contexto e de alta qualidade baseado no trabalho existente da sua equipa&amp;quot;.&lt;/p&gt;
&lt;p&gt;E depois a Anthropic lançou &lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-6&quot;&gt;equipas de agentes no Claude Code&lt;/a&gt;, onde vários agentes de IA se coordenam autonomamente em tarefas complexas. O Opus 4.6 tem uma pontuação de 76% no benchmark MRCR de 1M com 8 agulhas (acima dos 18,5% do modelo anterior), o que significa que pode realmente recuperar informações enterradas em grandes conjuntos de documentos sem perder o rasto.&lt;/p&gt;
&lt;p&gt;As três empresas estão a criar agentes que consomem documentação. Nenhuma delas resolveu o problema da qualidade da fonte.&lt;/p&gt;
&lt;p&gt;A documentação dos agentes personalizados da Notion reconhece explicitamente o [risco de injeção imediata] (https://www.notion.com/blog/introducing-custom-agents) quando os agentes lêem conteúdo não confiável. O Rovo da Atlassian pega tudo o que encontra no seu Confluence. Se esse conteúdo estiver três meses desatualizado, o Rovo não sabe. Ele se baseia nele de qualquer maneira.&lt;/p&gt;
&lt;p&gt;Para que os agentes trabalhem de forma confiável, eles precisam de mais do que páginas de texto. Precisam de conteúdo estruturado com identificadores estáveis, sinais de atualização explícitos, metadados de classificação claros e a capacidade de distinguir &amp;quot;isto é atual e revisto&amp;quot; de &amp;quot;isto existe mas ninguém lhe toca há um ano&amp;quot;. As páginas Wiki não oferecem isso. O conteúdo estruturado ao nível do bloco com metadados de confiança fornece-o.&lt;/p&gt;
&lt;h2&gt;5. O código aberto e a auto-hospedagem estão a regressar&lt;/h2&gt;
&lt;p&gt;Este último é mais um pressentimento apoiado por dados do que um anúncio único.&lt;/p&gt;
&lt;p&gt;GitBook &lt;a href=&quot;https://www.gitbook.com/blog/free-open-source-documentation&quot;&gt;open-sourced sua documentação publicada&lt;/a&gt; no final de 2024 e lançou um fundo OSS. O seu raciocínio: os projectos de código aberto merecem ferramentas de documentação gratuitas e de alta qualidade. Mas o movimento também sinaliza algo mais amplo.&lt;/p&gt;
&lt;p&gt;O Notion é apenas na nuvem. Não há opção de auto-hospedagem. O Confluence Data Center existe, mas requer uma licença. Quando a sua plataforma de documentação contém o seu conhecimento operacional mais sensível (manuais de incidentes, procedimentos de conformidade, decisões de arquitetura), a questão de &amp;quot;quem controla estes dados?&amp;quot; não é abstrata.&lt;/p&gt;
&lt;p&gt;O post do Anthropic &lt;a href=&quot;https://www.anthropic.com/news/claude-is-a-space-to-think&quot;&gt;&amp;quot;Claude is a space to think&amp;quot;&lt;/a&gt; de fevereiro apresentou um argumento interessante sobre confiança e modelos de negócio. A sua alegação principal: os incentivos publicitários são incompatíveis com um assistente de IA genuinamente útil. Optaram por não ter publicidade para que os utilizadores possam confiar na ferramenta.&lt;/p&gt;
&lt;p&gt;Penso que existe um paralelo para as plataformas de documentação. Se o seu sistema de documentação é de código fechado e apenas na nuvem, não pode verificar o que alimenta a IA. Não é possível auditar os cálculos de atualização. Não pode garantir que os seus dados permaneçam sob o seu controlo. Para as equipas que estão a implementar assistentes de IA sobre a sua base de conhecimentos (e cada vez mais, todos o fazem), a auditabilidade é importante.&lt;/p&gt;
&lt;p&gt;Esta não é uma polémica sobre o código aberto ser moralmente superior. Os produtos de código fechado podem ser absolutamente fiáveis. Mas quando se está a construir fluxos de trabalho com IA em cima da documentação interna, a capacidade de inspecionar e verificar o sistema é uma vantagem prática. Para nós, o licenciamento do Rasepi pelo MIT não foi uma reflexão tardia. Foi uma decisão de design baseada na mesma lógica: a infraestrutura de documentação deve ser auditável.&lt;/p&gt;
&lt;h2&gt;O que estas cinco tendências significam em conjunto&lt;/h2&gt;
&lt;p&gt;Individualmente, cada uma dessas tendências é gerenciável. A IA lê os seus documentos? Muito bem, adicione alguns metadados legíveis por máquina. A atualidade é importante? Ótimo, adicione datas de revisão. A tradução precisa de ser contínua? Claro, integre DeepL. Os agentes precisam de estrutura? É justo, melhore o seu modelo de conteúdos. A soberania é importante? Ótimo, ofereça uma opção auto-hospedada.&lt;/p&gt;
&lt;p&gt;Mas, em conjunto, descrevem uma plataforma que é fundamentalmente diferente da que a maioria das equipas utiliza atualmente.&lt;/p&gt;
&lt;p&gt;A diferença é arquitetónica. Não se trata de cinco funcionalidades que se acrescentam. São cinco pressupostos que precisam de ser incorporados na base. Como o conteúdo é armazenado (a nível de bloco, não a nível de página). Como a confiança é modelada (pontuações de frescura, não carimbos de data/hora). Como funciona a tradução (incremental, incorporada, por parágrafo). Como é que os agentes de IA acedem ao conteúdo (APIs estruturadas com metadados, e não scrapes de páginas). Como é que os dados são controlados (abertos, auditáveis, auto-hospedados).&lt;/p&gt;
&lt;p&gt;Nenhuma plataforma estabelecida foi concebida em torno de todos estes cinco aspectos em simultâneo. Algumas estão a adicioná-los peça a peça. O GitBook está a avançar mais rapidamente na frente da legibilidade da IA. A Notion está a construir uma infraestrutura de agentes. A Atlassian tem uma distribuição empresarial.&lt;/p&gt;
&lt;p&gt;Mas projetar para todos os cinco desde o primeiro dia? Essa é a vantagem de começar do zero quando o terreno muda.&lt;/p&gt;
&lt;p&gt;Sei que estou a ser parcial. Construímos o Rasepi especificamente porque vimos estas tendências a convergir e queríamos uma plataforma que assumisse todas elas desde o início. Tradução ao nível do bloco, expiração forçada, pontuação de frescura, conteúdo estruturado pronto para IA, código aberto. É a tese de todo o projeto.&lt;/p&gt;
&lt;p&gt;Mas mesmo que não existíssemos, penso que qualquer leitura honesta do que aconteceu no primeiro trimestre de 2026 aponta na mesma direção. A documentação está a tornar-se infraestrutura. E as infra-estruturas têm requisitos diferentes das páginas wiki.&lt;/p&gt;
&lt;p&gt;As equipas que descobrirem isto primeiro não terão apenas melhores documentos. Terão agentes de IA mais fiáveis, custos de tradução mais baixos, menos surpresas de conformidade e bases de conhecimento que se mantêm fiáveis ao longo do tempo.&lt;/p&gt;
&lt;p&gt;Esse é o estado dos documentos em 2026. A questão não é se essas tendências são reais. É saber se a sua plataforma foi concebida para elas.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cinco tendências. Uma questão de arquitetura: a sua plataforma de documentação foi concebida para 2026 ou continua a servir pressupostos de 2016?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Fontes: &lt;a href=&quot;https://www.gitbook.com/blog/ai-docs-data-2025&quot;&gt;GitBook AI docs data report&lt;/a&gt;, &lt;a href=&quot;https://www.gitbook.com/blog/state-of-docs-2026&quot;&gt;GitBook State of Docs 2026&lt;/a&gt;, &lt;a href=&quot;https://www.gitbook.com/blog/skill-md&quot;&gt;GitBook skill.md&lt;/a&gt;, &lt;a href=&quot;https://blog.google/innovation-and-ai/technology/developers-tools/gemini-api-docsmcp-agent-skills/&quot;&gt;Google Gemini API Docs MCP&lt;/a&gt;, &lt;a href=&quot;https://survey.stackoverflow.co/2024/&quot;&gt;Stack Overflow 2024 Developer Survey&lt;/a&gt;, &lt;a href=&quot;https://github.blog/news-insights/research/survey-ai-wave-grows/&quot;&gt;GitHub 2024 developer survey&lt;/a&gt;, &lt;a href=&quot;https://www.index.dev/blog/developer-productivity-statistics-with-ai-tools&quot;&gt;Index.dev developer productivity statistics&lt;/a&gt;, &lt;a href=&quot;https://www.anthropic.com/81k-interviews&quot;&gt;Anthropic &amp;quot;What 81,000 People Want from AI&amp;quot;&lt;/a&gt;, &lt;a href=&quot;https://www.anthropic.com/news/claude-is-a-space-to-think&quot;&gt;Anthropic &amp;quot;Claude is a space to think&amp;quot;&lt;/a&gt;, &lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-6&quot;&gt;Claude Opus 4.6&lt;/a&gt;, &lt;a href=&quot;https://www.notion.com/blog/introducing-custom-agents&quot;&gt;Notion Custom Agents&lt;/a&gt;, &lt;a href=&quot;https://www.atlassian.com/blog/confluence/create-and-edit-with-rovo&quot;&gt;Atlassian Rovo in Confluence&lt;/a&gt;, &lt;a href=&quot;https://www.deepl.com/en/blog/six-translation-transformations&quot;&gt;DeepL &amp;quot;6 Translation Transformations&amp;quot;&lt;/a&gt;, &lt;a href=&quot;https://www.deepl.com/customization-hub&quot;&gt;DeepL Customization Hub&lt;/a&gt;, &lt;a href=&quot;https://www.gitbook.com/blog/free-open-source-documentation&quot;&gt;GitBook open source documentation&lt;/a&gt;, &lt;a href=&quot;https://www.gitbook.com/blog/new-in-gitbook-august-2025&quot;&gt;GitBook auto-translate&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="ai" />
    <category term="documentation" />
    <category term="platforms" />
  </entry>
  <entry>
    <title>Construtores, não desenvolvedores: Como a Claude mudou para quem são os seus documentos</title>
    <link href="https://rasepi.com/pt/blog/builders-not-developers-how-claude-changed-devrel/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/builders-not-developers-how-claude-changed-devrel/</id>
    <updated>2026-04-02T00:00:00Z</updated>
    <summary>A pessoa que integra a sua API já não lê os seus documentos. Ela senta-se no Claude e descreve o que quer. As relações com os programadores, a documentação da API e todo o funil de arranque têm de ser repensados para esta nova realidade.</summary>
    <content type="html">&lt;p&gt;Há uma pessoa neste momento, algures, a integrar a sua API. Ela não está no seu site de documentação. Não abriu o seu guia de iniciação. Nunca viu o seu playground interativo ou a navegação cuidadosamente concebida na barra lateral.&lt;/p&gt;
&lt;p&gt;Eles estão sentados no Claude. Ou no Copilot. Ou Cursor. Escreveram algo como &lt;em&gt;&amp;quot;integrar a API de faturação Stripe com a minha aplicação Next.js utilizando o router de aplicações&amp;quot;&lt;/em&gt; e esperaram que o código de trabalho voltasse. A IA lia os seus documentos em nome deles. Encontrou os endpoints relevantes, compreendeu o fluxo de autenticação, escolheu os métodos SDK corretos e produziu uma implementação.&lt;/p&gt;
&lt;p&gt;Há duas semanas, na Start Summit Hackathon em St. Gallen, vi isto acontecer em tempo real. Estava a falar com um grupo de estudantes de Ciências da Computação e com alguns fundadores de startups em fase inicial sobre a forma como abordam as novas API, e todos eles descreveram o mesmo fluxo de trabalho: colar o problema numa IA, receber o código de volta, iterar a partir daí. Uma das alunas riu-se quando lhe perguntei se tinha lido os documentos. &amp;quot;Porque é que eu havia de ler? O Claude lê-os por mim&amp;quot;.&lt;/p&gt;
&lt;p&gt;A pessoa nunca visitou o seu sítio. Pode ser que nunca visite o seu site. E é cada vez mais assim que o software é construído.&lt;/p&gt;
&lt;h2&gt;A principal mudança&lt;/h2&gt;
&lt;p&gt;A documentação tem agora dois consumidores fundamentalmente diferentes: os humanos que a lêem e os assistentes de IA que a lêem em nome dos construtores. A maior parte da documentação é optimizada exclusivamente para humanos. A IA já é o leitor dominante.&lt;/p&gt;
&lt;p&gt;Isto muda tudo a jusante:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quando uma IA serve conteúdos obsoletos, o construtor não tem forma de detetar o problema. Os danos são silenciosos.&lt;/li&gt;
&lt;li&gt;Os gestores de produto, designers e analistas estão a enviar software através de assistentes de IA, muitas vezes sem nunca terem lido uma linha de documentação.&lt;/li&gt;
&lt;li&gt;A estrutura legível pela máquina é mais importante do que o design visual. O markdown limpo, os blocos autónomos e os metadados explícitos são o que permite à IA representar o seu produto com precisão.&lt;/li&gt;
&lt;li&gt;Os requisitos de formato dividiram-se.** Os leitores humanos precisam de narrativa. Os intermediários de IA precisam de especificações estruturadas e analisáveis. É necessário servir ambos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O resto deste post revela como chegamos aqui, o que isso significa para o DevRel e o que você pode fazer sobre isso agora.&lt;/p&gt;
&lt;h2&gt;A viagem que ninguém planeou&lt;/h2&gt;
&lt;p&gt;Durante muito tempo, as relações com os programadores seguiram um caminho bem compreendido. Você escreveu uma documentação abrangente. Publicou guias de início rápido. Dava palestras em conferências. Mantinha uma presença no Stack Overflow. Tornou a referência da sua API pesquisável, os seus SDKs idiomáticos, as suas mensagens de erro úteis.&lt;/p&gt;
&lt;p&gt;Esse caminho pressupõe que o desenvolvedor lerá seu conteúdo. Navegar na sua estrutura. Seguir os seus passos.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.blog/news-insights/research/survey-ai-wave-grows/&quot;&gt;A pesquisa de desenvolvedores do GitHub de 2024&lt;/a&gt; descobriu que 97% dos desenvolvedores corporativos já usaram ferramentas de codificação de IA em algum momento. [A pesquisa anual do Stack Overflow] (https://survey.stackoverflow.co/2024/) mostrou que 76% de todos os desenvolvedores estão usando ou planejando usar ferramentas de IA, com 62% dos profissionais usando-as ativamente no dia a dia. Em 2026, esse número &lt;a href=&quot;https://www.index.dev/blog/developer-productivity-statistics-with-ai-tools&quot;&gt;subiu para 84%&lt;/a&gt;, com 41% de todo o código agora gerado por IA e 51% dos desenvolvedores profissionais usando ferramentas de IA diariamente. Estes números não estão a abrandar.&lt;/p&gt;
&lt;p&gt;A nova viagem tem um aspeto diferente. Alguém descreve o que pretende em linguagem natural. Um assistente de IA lê a documentação, encontra as secções relevantes e gera a integração. O construtor revê o resultado, talvez refine o pedido, talvez faça um seguimento. Minutos, não horas.&lt;/p&gt;
&lt;p&gt;O funil de arranque que as equipas DevRel passaram anos a aperfeiçoar? Está a ser contornado. Não por ser mau. O ponto de entrada simplesmente mudou.&lt;/p&gt;
&lt;h2&gt;Dois consumidores, um conjunto de documentos&lt;/h2&gt;
&lt;p&gt;A documentação tem agora dois públicos fundamentalmente diferentes.&lt;/p&gt;
&lt;p&gt;O primeiro é o leitor humano. Esta pessoa ainda existe. Aparece para tomar decisões de arquitetura, depurar casos extremos, analisar a conformidade e compreender conceitos. Quer explicações narrativas, material de referência bem organizado e um raciocínio claro sobre as soluções de compromisso.&lt;/p&gt;
&lt;p&gt;O segundo é o intermediário de IA. Este lê a sua documentação em nome de um construtor. Não se preocupa com a sua barra lateral. Não aprecia o seu design visual. Precisa de conteúdo estruturado e analisável por máquina: markdown limpo, formatação consistente, especificações explícitas sobre as quais possa raciocinar sem ambiguidade.&lt;/p&gt;
&lt;p&gt;Atualmente, quase todos os sítios de documentação são optimizados exclusivamente para o primeiro público. O segundo público já é o consumidor dominante.&lt;/p&gt;
&lt;p&gt;Jeremy Howard identificou esta tensão quando [propôs a norma /llms.txt] (https://llmstxt.org/) em 2024. A sua observação foi precisa: &lt;em&gt;&amp;quot;Os grandes modelos linguísticos dependem cada vez mais de informações de sítios Web, mas enfrentam uma limitação crítica: as janelas de contexto são demasiado pequenas para lidar com a maioria dos sítios Web na sua totalidade.&amp;quot;&lt;/em&gt; A proposta é simples. Um ficheiro markdown com curadoria em &lt;code&gt;/llms.txt&lt;/code&gt; que dá aos modelos de IA uma visão geral estruturada do seu produto e ligações para os recursos mais importantes. FastHTML, os próprios documentos do Anthropic e um [diretório crescente de projectos] (https://llmstxt.site/) já têm um.&lt;/p&gt;
&lt;p&gt;É uma convenção útil. Mas é também um sintoma de um problema mais profundo. O verdadeiro problema não é o formato. É o facto de a maior parte da documentação nunca ter sido concebida tendo em mente o consumo por parte das máquinas.&lt;/p&gt;
&lt;h2&gt;O construtor não está a cortar nos cantos&lt;/h2&gt;
&lt;p&gt;Existe a tentação de olhar para a pessoa que pede Claude em vez de ler a documentação e concluir que ela está a tomar atalhos. Que ela não entende realmente o que está acontecendo no código. Que ela é, de alguma forma, um desenvolvedor inferior.&lt;/p&gt;
&lt;p&gt;Já tive esta conversa vezes suficientes para saber que isso é normalmente errado.&lt;/p&gt;
&lt;p&gt;Muitos destes construtores são engenheiros sénior que fazem escolhas deliberadas de eficiência. Eles entendem o código, só não querem navegar por quatro páginas de documentação para encontrar as três linhas de que realmente precisam. Eles aprenderam que um assistente de IA pode extrair essas linhas mais rápido do que eles podem procurar por elas, então eles delegam a leitura. (Honestamente, eu próprio faço isto. Não me lembro da última vez que li um guia de iniciação de cima a baixo).&lt;/p&gt;
&lt;p&gt;A Anthropic reconheceu este padrão quando construiu o [Model Context Protocol] (https://modelcontextprotocol.io/introduction). O MCP é agora suportado pelo Claude, ChatGPT, VS Code, Cursor, entre outros. Foi explicitamente concebido para que os assistentes de IA possam aceder a sistemas externos, obter contexto e agir com base nele. A especificação descreve-a como fornecendo &lt;em&gt;&amp;quot;acesso a um ecossistema de fontes de dados, ferramentas e aplicações que irão aumentar as capacidades e melhorar a experiência do utilizador final&amp;quot;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Leia isto com atenção. É uma linguagem de infraestrutura, não de conveniência. Os construtores que utilizam estas ferramentas não estão a evitar o trabalho. Estão a trabalhar através de uma nova camada, e a sua documentação faz parte dessa camada, quer a tenha concebido ou não.&lt;/p&gt;
&lt;p&gt;Os números confirmam isso. Só o Claude lida agora com [25 mil milhões de chamadas de API por mês] (https://www.incremys.com/en/resources/blog/claude-statistics), com 30 milhões de utilizadores activos mensais em 159 países. &lt;a href=&quot;https://www.incremys.com/en/resources/blog/claude-statistics&quot;&gt;70% das empresas da Fortune 100&lt;/a&gt; usam o Claude. De acordo com um inquérito da Menlo Ventures, a Anthropic detém &lt;a href=&quot;https://fortune.com/2025/12/02/how-anthropics-safety-first-approach-won-over-big-business-and-how-its-own-engineers-are-using-its-claude-ai/&quot;&gt;32% da quota de mercado da IA empresarial por utilização de modelos&lt;/a&gt;, à frente da OpenAI com 25%. Um relatório de investigação do HSBC coloca esse valor ainda mais alto: 40% do total de despesas com IA. Não se trata de ferramentas experimentais. São infra-estruturas primárias.&lt;/p&gt;
&lt;h2&gt;As relações com os programadores foram criadas para uma era diferente&lt;/h2&gt;
&lt;p&gt;Se a sua estratégia DevRel foi concebida antes de 2023, foi concebida para um mundo onde os programadores liam os documentos diretamente. Esse mundo não desapareceu, mas já não é o padrão de interação dominante para uma parte crescente dos criadores.&lt;/p&gt;
&lt;p&gt;Isto altera o cálculo de várias actividades DevRel de longa data.&lt;/p&gt;
&lt;p&gt;**Uma apresentação de 45 minutos numa conferência de programadores chega a uma sala com algumas centenas de pessoas. Um ficheiro &lt;code&gt;/llms.txt&lt;/code&gt; bem estruturado e uma documentação limpa e legível por máquina chegam a todos os construtores que perguntam a qualquer assistente de IA sobre o seu produto, continuamente, em qualquer altura. A palestra é um evento único. A documentação legível por máquina é composta. Não estou a dizer que as conferências não têm valor (acabei de regressar de uma, literalmente), mas a equação de alavancagem mudou.&lt;/p&gt;
&lt;p&gt;**O clássico tutorial de início rápido em cinco passos é cada vez mais uma formalidade. O construtor não segue passos. Descrevem o que pretendem e esperam que a IA produza a integração. Se a API estiver bem documentada num formato de fácil utilização, a IA trata da experiência de arranque de forma mais eficiente do que qualquer tutorial poderia fazer. Em vez disso, os tutoriais devem tornar-se material concetual: explicar por que razão se deve escolher a abordagem A em vez da abordagem B. A IA pode gerar a implementação. É muito menos fiável a explicar as soluções de compromisso.&lt;/p&gt;
&lt;p&gt;**Os dados do seu próprio inquérito mostraram que &lt;a href=&quot;https://survey.stackoverflow.co/2024/&quot;&gt;84% dos programadores&lt;/a&gt; utilizam a documentação técnica diretamente, sendo que 90% destes confiam na documentação contida nos pacotes API e SDK. Mas a forma como &lt;em&gt;acedem&lt;/em&gt; a esses documentos é cada vez mais através de uma camada de IA e não de um separador do browser. As perguntas que ainda chegam ao Stack Overflow tendem a ser as mais difíceis. Casos extremos, depuração de produção, coisas que exigem nuances. Valiosas, com certeza. Mas já não é onde está o volume.&lt;/p&gt;
&lt;h2&gt;Quando a IA lê os seus documentos, a atualidade torna-se crítica&lt;/h2&gt;
&lt;p&gt;Aqui está a parte em que a maioria das equipas não pensou.&lt;/p&gt;
&lt;p&gt;Quando um ser humano lê uma página de documentação, ele pode fazer um julgamento. Pode reparar que as capturas de ecrã parecem antigas, ou que um comentário no final diz que o processo mudou. Podem olhar para ela e pensar &amp;quot;isto parece desatualizado&amp;quot;.&lt;/p&gt;
&lt;p&gt;Um assistente de IA não pode fazer nada disso. Lê o texto, processa-o como um facto e gera uma resposta com total confiança. Se a documentação descrever um ponto final obsoleto, a IA recomendará alegremente a integração com ele. Se a documentação fizer referência a uma infraestrutura que foi substituída há seis meses, a IA descreverá a configuração antiga como atual. Sem hesitação.&lt;/p&gt;
&lt;p&gt;E aqui está o que torna isto pior do que parece: &lt;a href=&quot;https://www.index.dev/blog/developer-productivity-statistics-with-ai-tools&quot;&gt;66% dos programadores&lt;/a&gt; já afirmam que o maior problema das ferramentas de IA é o facto de darem resultados que estão &amp;quot;quase certos, mas não totalmente&amp;quot;. A documentação obsoleta contribui diretamente para esse problema. A IA não está a alucinar. Está a reproduzir fielmente conteúdo desatualizado, e não há forma de o construtor perceber a diferença.&lt;/p&gt;
&lt;p&gt;O construtor confia na IA. A IA confia na documentação. Se a documentação estiver desactualizada, essa cadeia de confiança dá uma resposta seguramente errada.&lt;/p&gt;
&lt;p&gt;Isto sempre foi um problema, obviamente. Os conteúdos obsoletos sempre confundiram as pessoas. Mas os danos foram contidos porque os leitores humanos podiam, por vezes, detectá-los. Os intermediários de IA não conseguem. Amplificam os conteúdos obsoletos, fornecendo-os em grande escala, com autoridade, a pessoas que não têm motivos para duvidar deles.&lt;/p&gt;
&lt;p&gt;A atualidade já não é uma questão de qualidade do conteúdo. É um problema de fiabilidade para todos os fluxos de trabalho alimentados por IA que tocam nos seus documentos.&lt;/p&gt;
&lt;h2&gt;A palavra &amp;quot;programador&amp;quot; é demasiado restrita&lt;/h2&gt;
&lt;p&gt;As pessoas que estão a criar software em 2026 não se identificam todas como programadores. Alguns são designers que pedem ao Claude para construir um protótipo funcional. Alguns são gestores de produto que utilizam o Cursor para enviar ferramentas internas. Outros são analistas de dados que descrevem um pipeline de dados em linguagem natural e deixam um agente montá-lo. Na Start Summit, metade das equipas da hackathon tinha membros sem qualquer experiência em programação que, no final do fim de semana, já estavam a enviar software funcional.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://ramp.com/&quot;&gt;Ramp&lt;/a&gt; é um exemplo útil. A empresa fintech passou de uma avaliação de US $ 5.8 bilhões em 2023 para [US $ 32 bilhões no final de 2025] (https://techcrunch.com/2025/11/17/ramp-hits-32b-valuation-just-three-months-after-hitting-22-5b/), ultrapassando US $ 1 bilhão em receita anualizada ao longo do caminho. Uma das startups de crescimento mais rápido da história. Uma parte amplamente discutida de sua abordagem: gerentes de produto construindo recursos diretamente com ferramentas de IA em vez de esperar em um backlog de engenharia. Os PMs da Ramp não se limitam a escrever especificações. Eles enviam o código. A IA trata da implementação. O PM lida com a intenção.&lt;/p&gt;
&lt;p&gt;Não é um atalho. Trata-se de um novo modelo operacional, que está a funcionar a uma escala que torna muito difícil descartá-lo como uma experiência.&lt;/p&gt;
&lt;p&gt;O próprio estudo interno da Anthropic é revelador. Quando eles [entrevistaram 132 de seus próprios engenheiros] (https://fortune.com/2025/12/02/how-anthropics-safety-first-approach-won-over-big-business-and-how-its-own-engineers-are-using-its-claude-ai/) sobre como eles usam o Claude, os engenheiros relataram usá-lo para cerca de 60% de suas tarefas de trabalho. As utilizações mais comuns? Depurar código existente, compreender o que partes da base de código estavam a fazer e implementar novas funcionalidades. Os engenheiros afirmaram que tendem a entregar ao Claude tarefas que &amp;quot;não são complexas, repetitivas, em que a qualidade do código não é crítica&amp;quot;. E 27% do trabalho que agora fazem com o Claude simplesmente não teria sido feito antes.&lt;/p&gt;
&lt;p&gt;Esta é a própria equipa da Anthropic. As pessoas que construíram o modelo estão a usá-lo como um leitor de documentação, um navegador de base de código e um gerador de primeiro rascunho. Todos os outros estão a fazer o mesmo, apenas com os seus documentos em vez dos deles.&lt;/p&gt;
&lt;p&gt;A Anthropic foi deliberada em chamar isso de persona &amp;quot;construtora&amp;quot;. As suas ferramentas foram concebidas não apenas para engenheiros de software profissionais, mas para qualquer pessoa que consiga descrever o que pretende construir. Quando Claude pode criar uma aplicação full-stack a partir de um design Figma via MCP, a linha tradicional entre &amp;quot;desenvolvedor&amp;quot; e &amp;quot;não desenvolvedor&amp;quot; se dissolve.&lt;/p&gt;
&lt;p&gt;Isso tem implicações reais para qualquer pessoa que mantenha documentação ou se preocupe com a experiência do desenvolvedor. O seu público já não se limita às pessoas que sabem o que é um ponto de extremidade REST. Ele inclui qualquer pessoa cujo assistente de IA possa interagir com seu produto. O PM da Ramp que envia um recurso usando sua API? Provavelmente nunca lerá a sua documentação diretamente. O agente de IA deles lerá com certeza.&lt;/p&gt;
&lt;h2&gt;O que isso significa para a documentação&lt;/h2&gt;
&lt;p&gt;Se a documentação serve agora dois públicos, leitores humanos e intermediários de IA, precisa de funcionar para ambos. Parece óbvio. Na prática, quase ninguém o faz.&lt;/p&gt;
&lt;p&gt;Eis o que eu acho que realmente importa:&lt;/p&gt;
&lt;p&gt;**Se os documentos da sua API são uma página HTML lindamente renderizada que um LLM tem que raspar e analisar, a IA está a trabalhar mais do que deveria. Envie a especificação OpenAPI em bruto juntamente com a versão renderizada. Enviar markdown limpo. Tornar as especificações acessíveis sem exigir que a IA interprete o layout da página.&lt;/p&gt;
&lt;p&gt;**Estrutura ao nível do bloco em vez de narrativa ao nível da página. Os assistentes de IA não consomem documentação página a página. Extraem as secções relevantes. Um documento com títulos claros, parágrafos autónomos e semântica explícita ao nível do bloco é muito mais útil para uma IA do que uma narrativa fluida que requer a leitura de toda a página para obter o contexto.&lt;/p&gt;
&lt;p&gt;**Quando é que este documento foi revisto pela última vez? Ainda é atual? O conteúdo foi assinalado? Estes sinais têm de existir numa forma a que a IA possa aceder, e não apenas como sinais visuais numa página Web. Uma pontuação de atualidade, um estado de expiração, uma data de revisão, são os metadados que permitem a uma IA decidir se um documento é seguro para ser utilizado como fonte.&lt;/p&gt;
&lt;p&gt;**Quando um assistente de IA fornece a um construtor uma resposta confiante baseada num ponto final obsoleto, os danos são piores do que um 404. O construtor constrói sobre ele. Faz o envio. Depois, ele quebra na produção e ninguém sabe o motivo até que alguém rastreie a documentação que deveria ter sido atualizada meses atrás. Cada documento que uma IA possa referenciar precisa de um mecanismo para provar que ainda está atualizado. (Isto é, revelação completa, exatamente o problema que estamos a construir para resolver com o Rasepi. Forçar a expiração de blocos de documentação para que o conteúdo obsoleto não se possa esconder).&lt;/p&gt;
&lt;h2&gt;Começando: audite sua documentação atual&lt;/h2&gt;
&lt;p&gt;Se leu até aqui e está a pensar &amp;quot;ok, mas o que é que eu faço na segunda-feira?&amp;quot;, aqui estão quatro coisas concretas que pode verificar esta semana.&lt;/p&gt;
&lt;p&gt;**1. Abra o Claude ou o ChatGPT e peça-lhe para integrar o seu produto num cenário realista. Não utilize os seus conhecimentos internos. Veja apenas o que a IA produz. Está correto? Está actualizada? Está a utilizar os pontos finais corretos, a versão correta do SDK, o fluxo de autenticação correto? Se a IA estiver errada, é isso que os construtores estão a receber neste momento.&lt;/p&gt;
&lt;p&gt;**2. Escolha as cinco páginas de documentação mais visitadas e pergunte: quando foi a última revisão? Ainda descreve o estado atual do produto? Se não conseguir responder a esta pergunta com confiança, a IA também não conseguirá. Esta é a correção mais importante para a maioria das equipas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Envie formatos legíveis por máquina&lt;/strong&gt; Se você não tem um arquivo &lt;code&gt;/llms.txt&lt;/code&gt;, crie um. Se a sua referência de API estiver disponível apenas como HTML renderizado, exporte a especificação OpenAPI bruta e torne-a acessível. Se os seus documentos estão num CMS que não produz markdown limpo, esse é um problema que vale a pena resolver agora.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Adicione datas de revisão e metadados de atualização.&lt;/strong&gt; Mesmo algo simples, um campo &lt;code&gt;last-reviewed&lt;/code&gt; em seu sistema de gerenciamento de conteúdo, um ciclo de revisão obrigatório para páginas de alto tráfego. Isto dá aos humanos e à IA um sinal sobre se o conteúdo é fiável. Ferramentas como o Rasepi podem &lt;a href=&quot;https://rasepi.com/features/freshness&quot;&gt;automatizar isto com expiração forçada ao nível do bloco&lt;/a&gt;, mas mesmo um processo manual é melhor do que nada.&lt;/p&gt;
&lt;h2&gt;A mudança silenciosa na forma como os produtos são representados&lt;/h2&gt;
&lt;p&gt;Há uma consequência mais ampla de tudo isto que vale a pena referir diretamente.&lt;/p&gt;
&lt;p&gt;A sua documentação já não é apenas um manual de referência para os programadores. É o material de origem que os assistentes de IA utilizam para representar o seu produto para o mundo. Quando um construtor pergunta ao Claude como utilizar o seu produto, a resposta do Claude é moldada por tudo o que consegue encontrar e analisar na sua documentação.&lt;/p&gt;
&lt;p&gt;Bons documentos, boa resposta. Desactualizados, ambíguos, fechados em HTML que é difícil de analisar por um modelo? Pior resposta, ou uma resposta incorrecta. Tão simples quanto isso.&lt;/p&gt;
&lt;p&gt;A qualidade da resposta da IA sobre o seu produto é agora um indicador direto da experiência do programador. A maioria das empresas ainda não está a tratar isso dessa forma.&lt;/p&gt;
&lt;p&gt;As equipas que estão à frente nesta matéria, Stripe, Vercel, Cloudflare, Anthropic, tratam a legibilidade da IA como uma preocupação de primeira classe. Um requisito fundamental que molda a forma como a documentação é escrita, estruturada e mantida. Não é um item do backlog para o próximo trimestre.&lt;/p&gt;
&lt;p&gt;O construtor sentado no Claude neste momento, descrevendo o que quer construir, esperando um código funcional em minutos. Talvez nunca mais volte a visitar um sítio de documentação. Mas a IA que os serve fá-lo-á. Constantemente.&lt;/p&gt;
&lt;p&gt;Essa IA é agora o seu leitor mais frequente. A questão é saber se os seus documentos estão preparados para isso.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A melhor estratégia de experiência do programador em 2026 não é uma palestra numa conferência ou um guia de início rápido. É garantir que a IA o faz corretamente.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Este post faz referência a pesquisas e documentação de produtos disponíveis publicamente. As estatísticas são extraídas do &lt;a href=&quot;https://github.blog/news-insights/research/survey-ai-wave-grows/&quot;&gt;Inquérito aos programadores do GitHub de 2024&lt;/a&gt;, do &lt;a href=&quot;https://survey.stackoverflow.co/2024/&quot;&gt;Inquérito aos programadores do Stack Overflow de 2024&lt;/a&gt;, do &lt;a href=&quot;https://www.index.dev/blog/developer-productivity-statistics-with-ai-tools&quot;&gt;Relatório de produtividade dos programadores do Index.dev de 2026&lt;/a&gt;, das &lt;a href=&quot;https://www.incremys.com/en/resources/blog/claude-statistics&quot;&gt;Estatísticas da Incremys Claude&lt;/a&gt; e do &lt;a href=&quot;https://fortune.com/2025/12/02/how-anthropics-safety-first-approach-won-over-big-business-and-how-its-own-engineers-are-using-its-claude-ai/&quot;&gt;Relatório da Fortune sobre o Anthropic&lt;/a&gt;. A especificação /llms.txt é mantida em &lt;a href=&quot;https://llmstxt.org/&quot;&gt;llmstxt.org&lt;/a&gt;. O Protocolo de Contexto de Modelo está documentado em &lt;a href=&quot;https://modelcontextprotocol.io/&quot;&gt;modelcontextprotocol.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="ai" />
    <category term="documentation" />
    <category term="developer-experience" />
  </entry>
  <entry>
    <title>Como as traduções do Rasepi realmente funcionam e por que elas soam como a sua equipe</title>
    <link href="https://rasepi.com/pt/blog/how-rasepi-translations-work-and-why-they-sound-like-your-team/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/how-rasepi-translations-work-and-why-they-sound-like-your-team/</id>
    <updated>2026-03-31T00:00:00Z</updated>
    <summary>O Rasepi não se limita a traduzir a sua documentação para outros idiomas. Ele aprende a sua terminologia, combina o seu tom e permite que cada versão linguística viva a sua própria vida. Veja como.</summary>
    <content type="html">&lt;p&gt;Se alguma vez passou um documento pelo Google Translate ou, honestamente, por qualquer ferramenta de tradução, conhece o resultado. Tecnicamente correto. Tonalmente errado. De repente, o seu produto passa a chamar-se algo diferente. A abreviatura interna da sua equipa desaparece. &amp;quot;Você&amp;quot; formal onde a sua empresa usa informal, ou o contrário.&lt;/p&gt;
&lt;p&gt;O resultado é traduzido, mas não soa a si.&lt;/p&gt;
&lt;p&gt;Foi para isso que criei o sistema de tradução do Rasepi. Não é &amp;quot;podemos traduzir documentação&amp;quot; (todas as ferramentas podem fazer isso agora) mas &amp;quot;podemos traduzi-la para que soe como a nossa equipa a escreveu&amp;quot;.&lt;/p&gt;
&lt;p&gt;A resposta é sim. E não é necessária uma equipa de tradutores profissionais para o conseguir.&lt;/p&gt;
&lt;p&gt;Traduções que soam como a sua equipa](/pt/blog/img/natural-translations.svg)&lt;/p&gt;
&lt;h2&gt;Só o que mudou é traduzido&lt;/h2&gt;
&lt;p&gt;A maioria das plataformas de documentação traduzem páginas inteiras. Altera-se uma frase e todo o documento vai para a retradução. Cada língua, cada parágrafo, quer tenha sido alterado ou não.&lt;/p&gt;
&lt;p&gt;O Rasepi funciona de forma diferente. Acompanha cada parágrafo individualmente. Quando se edita uma secção de um documento de 20 secções, apenas essa secção é retraduzida. As outras 19, em todas as línguas, permanecem exatamente como estavam.&lt;/p&gt;
&lt;p&gt;Isto significa duas coisas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**Os seus custos de tradução baixam drasticamente. Estamos a falar de 94% menos para edições típicas. A maior parte das actualizações toca uma ou duas secções, não a página inteira.&lt;/li&gt;
&lt;li&gt;**Se a sua equipa alemã aprovou uma tradução na semana passada, editar um parágrafo não relacionado em inglês não afectará o texto aprovado.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O sistema sabe o que mudou porque cada parágrafo tem uma identidade única e uma impressão digital do conteúdo. Quando a impressão digital muda, esse parágrafo específico é assinalado para retradução. Nada mais.&lt;/p&gt;
&lt;h2&gt;O seu glossário, a sua terminologia&lt;/h2&gt;
&lt;p&gt;É aqui que as coisas ficam interessantes.&lt;/p&gt;
&lt;p&gt;Cada empresa tem o seu próprio vocabulário. &amp;quot;Sprint Review&amp;quot; pode ficar como &amp;quot;Sprint Review&amp;quot; nos seus documentos em alemão porque a sua equipa de Berlim usa o termo em inglês. Ou pode tornar-se &amp;quot;Sprint-Überprüfung&amp;quot; porque a sua equipa de Munique prefere a versão alemã. &amp;quot;Knowledge Base&amp;quot; pode ser &amp;quot;Wissensdatenbank&amp;quot; ou &amp;quot;Knowledge Base&amp;quot; ou algo completamente diferente que a sua equipa cunhou internamente.&lt;/p&gt;
&lt;p&gt;O Rasepi permite-lhe criar um glossário para cada língua. Basicamente, uma lista de termos e as suas traduções aprovadas. Quando um parágrafo é traduzido, o sistema verifica primeiro o seu glossário. Cada termo da sua lista é traduzido exatamente da forma como o definiu. Sempre. Em todos os documentos.&lt;/p&gt;
&lt;p&gt;Pode gerir o seu glossário diretamente no Rasepi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Adicionar termos um a um&lt;/strong&gt; à medida que se apercebe de inconsistências&lt;/li&gt;
&lt;li&gt;Importar um CSV** se já tiver uma lista de terminologia de outro sistema&lt;/li&gt;
&lt;li&gt;Exportar o seu glossário** para partilhar com tradutores externos ou outras ferramentas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O glossário funciona por par de línguas. O seu glossário de inglês para alemão é separado do seu glossário de inglês para francês. Isto é importante porque o mesmo termo em inglês pode precisar de um tratamento diferente em diferentes idiomas. &amp;quot;Sprint Review&amp;quot; pode permanecer em inglês em alemão, mas ser traduzido em japonês.&lt;/p&gt;
&lt;p&gt;Quando actualiza o seu glossário, a alteração entra em vigor na próxima vez que um parágrafo for traduzido para esse idioma. Não há necessidade de retraduzir tudo manualmente. O próximo ciclo de edição natural apanha-o.&lt;/p&gt;
&lt;h2&gt;Regras de estilo: fazer com que as traduções soem como se as tivesse escrito&lt;/h2&gt;
&lt;p&gt;Os glossários tratam de palavras individuais. Mas uma tradução pode usar todos os termos corretos e ainda assim parecer estranha. Tom incorreto. Datas no formato errado. Números com o separador errado. Símbolos de moeda no sítio errado.&lt;/p&gt;
&lt;p&gt;É para isso que servem as regras de estilo.&lt;/p&gt;
&lt;p&gt;Para cada língua, pode configurar um conjunto de regras que controlam a forma como as traduções são formatadas:&lt;/p&gt;
&lt;h3&gt;Convenções de formatação&lt;/h3&gt;
&lt;p&gt;Estes são os detalhes que fazem um documento parecer nativo em vez de &amp;quot;obviamente traduzido do inglês&amp;quot;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;** Formatos de data e hora: relógio de 24 horas para o alemão, AM/PM para o inglês, etc.&lt;/li&gt;
&lt;li&gt;Formatação de números: vírgula como separador decimal em alemão (3,14 em vez de 3,14), ponto final para milhares&lt;/li&gt;
&lt;li&gt;Regras de pontuação: formatação de graus académicos, estilos de aspas e outras convenções regionais&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O utilizador escolhe as convenções que correspondem aos padrões da sua empresa. O Rasepi aplica-as a todas as traduções nessa língua, em todos os documentos.&lt;/p&gt;
&lt;h3&gt;Instruções personalizadas&lt;/h3&gt;
&lt;p&gt;É aqui que as coisas ficam realmente poderosas. As instruções personalizadas são diretivas em linguagem simples que dizem ao motor de tradução como lidar com o seu conteúdo. Escreve-as em frases normais e o motor segue-as.&lt;/p&gt;
&lt;p&gt;Alguns exemplos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&amp;quot;Use um tom amigável e diplomático &amp;quot;&lt;/em&gt; para uma empresa que quer uma documentação acessível&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;quot;Utilize sempre a forma formal &#39;Sie&#39;, nunca &#39;du&#39;&amp;quot;&lt;/em&gt; para uma comunicação alemã profissional&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;quot;Utilize a ortografia do inglês britânico: colour, organisation, licence &amp;quot;&lt;/em&gt; quando o seu público de língua inglesa vive no Reino Unido&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;quot;Coloque símbolos de moeda após o valor numérico &amp;quot;&lt;/em&gt; para corresponder às convenções europeias&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;quot;Ao descrever os pontos finais da API, utilize o modo imperativo &amp;quot;&lt;/em&gt; para documentos técnicos que devem ser diretos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pode adicionar até 200 instruções personalizadas por idioma. Funcionam juntamente com o seu glossário e regras de formatação, e o motor de tradução considera-as todas em conjunto em cada tradução.&lt;/p&gt;
&lt;h3&gt;Formalidade&lt;/h3&gt;
&lt;p&gt;O alemão tem &amp;quot;du&amp;quot; e &amp;quot;Sie&amp;quot;. O francês tem &amp;quot;tu&amp;quot; e &amp;quot;vous&amp;quot;. O japonês tem vários níveis de polidez. Mesmo as línguas sem pronomes formais/informais óbvios têm diferenças tonais que são importantes.&lt;/p&gt;
&lt;p&gt;O Rasepi permite-lhe definir o nível de formalidade para cada língua. Uma vez configurado, cada parágrafo traduzido corresponde a esse tom. Se a sua empresa se dirige aos leitores formalmente em francês (&amp;quot;vous&amp;quot;) mas informalmente em alemão (&amp;quot;du&amp;quot;), é exatamente isso que cada tradução fará.&lt;/p&gt;
&lt;h3&gt;Tudo funciona em conjunto&lt;/h3&gt;
&lt;p&gt;Eis o que importa: os termos do glossário, as convenções de formatação, as instruções personalizadas e as definições de formalidade aplicam-se a todas as traduções ao mesmo tempo. Não se escolhe um ou outro. Configura-os todos uma vez, e cada parágrafo que é traduzido passa pelo mesmo conjunto de regras.&lt;/p&gt;
&lt;p&gt;O resultado são traduções que se lêem como se alguém da sua equipa local as tivesse escrito. Não como uma máquina que traduziu cada frase sem saber nada sobre a sua empresa.&lt;/p&gt;
&lt;h2&gt;Cada língua pode ter o seu próprio conteúdo&lt;/h2&gt;
&lt;p&gt;Esta é a caraterística que mais surpreende as pessoas.&lt;/p&gt;
&lt;p&gt;No Rasepi, um documento traduzido não é uma cópia bloqueada do original. Cada versão linguística pode ter conteúdos que só existem nessa língua.&lt;/p&gt;
&lt;p&gt;**Porque é que isto é importante?&lt;/p&gt;
&lt;p&gt;Porque mercados diferentes precisam de coisas diferentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A sua documentação alemã pode precisar de uma secção de conformidade com o DSGVO (GDPR) que não se aplica à versão americana&lt;/li&gt;
&lt;li&gt;A sua equipa japonesa pode precisar de uma nota sobre as ferramentas locais que mais ninguém utiliza&lt;/li&gt;
&lt;li&gt;O seu escritório no Brasil pode precisar de contexto sobre regulamentos fiscais regionais&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Na maioria das ferramentas de tradução, adicionar conteúdo a uma versão linguística significa que é substituído na próxima vez que alguém retraduzir do inglês. As equipas percebem isso rapidamente e param de adicionar conteúdo local. Criam documentos sombra no Notion, no Slack ou noutro sítio qualquer, e agora tem dois sistemas em que ninguém confia totalmente.&lt;/p&gt;
&lt;p&gt;No Rasepi, o conteúdo único é assinalado como pertencente a essa língua. Nunca é substituído por uma retradução. Nunca é apagado quando a fonte inglesa muda. Vive ao lado do conteúdo traduzido como uma parte natural do documento.&lt;/p&gt;
&lt;p&gt;O mesmo se aplica à estrutura. Se os seus tradutores japoneses preferirem listas numeradas onde a versão inglesa utiliza marcadores (uma convenção comum na escrita técnica japonesa), podem alterar o formato. O Rasepi preserva essa escolha em futuras actualizações.&lt;/p&gt;
&lt;p&gt;Cada versão linguística é um documento de primeira classe, não um espelho só de leitura.&lt;/p&gt;
&lt;h2&gt;Automático e humano: trabalham em conjunto&lt;/h2&gt;
&lt;p&gt;O Rasepi não o obriga a escolher entre a tradução automática e a tradução humana. Ele suporta ambas e sabe a diferença.&lt;/p&gt;
&lt;p&gt;Quando um parágrafo é traduzido por máquina e a fonte muda, o Rasepi retraduz-o automaticamente. Não é necessária qualquer intervenção humana. O glossário e as regras de estilo mantêm a coerência.&lt;/p&gt;
&lt;p&gt;Quando um parágrafo foi editado manualmente por um tradutor humano, talvez para lhe dar um toque cultural ou acrescentar um contexto que uma máquina não apanharia, o Rasepi respeita esse trabalho. Se a fonte for alterada, o sistema assinala o parágrafo como necessitando de revisão mas &lt;strong&gt;nunca substitui silenciosamente as edições humanas&lt;/strong&gt;. O tradutor vê o que mudou na fonte e decide como atualizar a sua versão.&lt;/p&gt;
&lt;p&gt;Isto significa que a qualidade da sua tradução melhora com o tempo. A tradução automática trata da maior parte do texto. Os tradutores humanos concentram-se nos parágrafos que precisam de um toque humano. E nenhum dos dois pisa o trabalho do outro.&lt;/p&gt;
&lt;h2&gt;Dois modos: sempre atual ou traduzir a pedido&lt;/h2&gt;
&lt;p&gt;Para cada língua, pode escolher quando as traduções são efectuadas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sempre que alguém salva o documento de origem, os parágrafos alterados são retraduzidos imediatamente. Melhor para os idiomas mais importantes, onde os leitores esperam uma precisão actualizada.&lt;/li&gt;
&lt;li&gt;Traduzir quando visualizado.** Os parágrafos alterados são assinalados mas não são traduzidos até que alguém abra efetivamente o documento nessa língua. Ótimo para as línguas que são utilizadas com menos frequência. Sem custos de tradução desperdiçados em conteúdo que ninguém está a ler.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ambos os modos utilizam o mesmo glossário, as mesmas regras de estilo, a mesma qualidade. A única diferença é o tempo.&lt;/p&gt;
&lt;h2&gt;O que isto parece na prática&lt;/h2&gt;
&lt;p&gt;Imagine que dirige uma empresa com equipas em Londres, Munique, Paris e Tóquio. A sua documentação está escrita em inglês.&lt;/p&gt;
&lt;p&gt;Um gerente de produto em Londres atualiza o guia de implantação. Uma secção sobre um novo passo de CI/CD.&lt;/p&gt;
&lt;p&gt;O que acontece é o seguinte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A secção alterada é retraduzida em segundos. &amp;quot;Sprint Review&amp;quot; torna-se &amp;quot;Sprint-Überprüfung&amp;quot; porque isso está no seu glossário. Formal &amp;quot;Sie&amp;quot; porque é a sua definição de formalidade. Datas em formato de 24 horas porque essa é a sua regra configurada. A instrução habitual &amp;quot;use um tom direto e imperativo&amp;quot; molda o fraseado. A secção DSGVO que a equipa de Munique acrescentou? Intocada.&lt;/li&gt;
&lt;li&gt;A mesma secção, retraduzida imediatamente. Formalidade &amp;quot;Vous&amp;quot;. Termos do glossário francês aplicados. Símbolos de moeda após o número de acordo com as suas instruções personalizadas. O resto do documento mantém-se exatamente como o escritório de Paris o reviu pela última vez.&lt;/li&gt;
&lt;li&gt;A secção alterada é assinalada como obsoleta. Quando alguém em Tóquio abre o documento, ele é traduzido na hora. A formatação personalizada da lista de números é preservada. A nota de ferramenta local permanece no lugar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Uma edição. Três idiomas actualizados. Zero retraduções de documentos completos. Terminologia consistente, tom consistente e respeito pelas adições locais de cada equipa.&lt;/p&gt;
&lt;h2&gt;Por falar em qualidade da língua&lt;/h2&gt;
&lt;p&gt;O motor de tradução que está por detrás de tudo isto é o DeepL, a mesma tecnologia que alimenta a funcionalidade &lt;strong&gt;Talk to Docs&lt;/strong&gt; do Rasepi. Pode falar com a sua documentação e obter respostas em voz alta. O DeepL Voice trata da interação falada, o que significa que a mesma consistência terminológica, regras de estilo e qualidade linguística que obtém nas traduções escritas também se aplica às conversas por voz. Os termos do seu glossário e as instruções personalizadas soam bem, quer a sua equipa esteja a ler ou a ouvir.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;As traduções que soam como a sua equipa não são um luxo. Para as empresas que operam em vários idiomas, elas são a diferença entre a documentação em que as pessoas confiam e a documentação que as pessoas contornam. Glossários, regras de estilo, instruções personalizadas, retradução inteligente e conteúdo exclusivo por idioma tornam isso possível. Automaticamente, desde o primeiro dia.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A sua documentação deve soar como a sua equipa em todas as línguas. Não como uma máquina. Não como uma empresa diferente. Como você.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://rasepi.com/#multilingual&quot;&gt;Veja a publicação multilingue em ação →&lt;/a&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="multilingual" />
    <category term="translation" />
    <category term="deepl" />
  </entry>
  <entry>
    <title>Por dentro do mecanismo de tradução: Glossários, Regras de Estilo e Retradução Inteligente</title>
    <link href="https://rasepi.com/pt/blog/inside-the-translation-engine-glossaries-style-rules-and-smart-retranslation/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/inside-the-translation-engine-glossaries-style-rules-and-smart-retranslation/</id>
    <updated>2026-03-31T00:00:00Z</updated>
    <summary>Um passo a passo técnico profundo de como o pipeline de tradução do Rasepi realmente funciona: resolução de glossário, DeepL regras de estilo e instruções personalizadas, hashing de conteúdo e a integração que une tudo isso.</summary>
    <content type="html">&lt;p&gt;O nosso &lt;a href=&quot;https://rasepi.com/pt/blog/how-plugin-guardrail-and-pipeline-systems-work/&quot;&gt;post de arquitetura anterior&lt;/a&gt; cobriu plugins, guardas de ação e o sistema de pipeline. Este vai mais fundo no motor de tradução, a parte que eu acho que torna o Rasepi fundamentalmente diferente de qualquer outra plataforma de documentação.&lt;/p&gt;
&lt;p&gt;Não é o discurso de marketing sobre traduzir parágrafos em vez de páginas. O código real. Como os glossários são resolvidos por locatário, como as regras de estilo do DeepL e as instruções personalizadas moldam cada tradução, como o hashing de conteúdo impulsiona a deteção de desatualização e como o orquestrador decide quais blocos devem ser retraduzidos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://rasepi.com/pt/blog/img/translation-engine-deep-dive.svg&quot; alt=&quot;Motor de tradução: glossários, regras de estilo e retradução inteligente&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;A linha de tradução&lt;/h2&gt;
&lt;p&gt;Quando um utilizador guarda um documento, o sistema não se limita a retraduzir tudo. Ele executa uma sequência bastante específica:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Analisa o JSON do TipTap em blocos individuais&lt;/li&gt;
&lt;li&gt;Compara hashes de conteúdo para detetar quais blocos foram realmente alterados&lt;/li&gt;
&lt;li&gt;Para blocos alterados, resolver o glossário do locatário e a lista de regras de estilo para o par de idiomas&lt;/li&gt;
&lt;li&gt;Aplicar regras de estilo, instruções personalizadas e formalidade da configuração do locatário&lt;/li&gt;
&lt;li&gt;Enviar apenas blocos modificados para DeepL&lt;/li&gt;
&lt;li&gt;Atualizar os blocos de tradução e sincronizar os hashes de conteúdo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cada passo é o seu próprio serviço com a sua própria interface. Isso é importante porque qualquer etapa pode ser trocada por outra coisa, um fornecedor de tradução diferente, um algoritmo de hashing diferente, uma fonte de glossário diferente.&lt;/p&gt;
&lt;h2&gt;Resolução do glossário: com escopo do locatário, sincronizado com DeepL&lt;/h2&gt;
&lt;p&gt;DeepL glossários têm uma restrição que a maioria das pessoas não conhece: &lt;strong&gt;eles são imutáveis.&lt;/strong&gt; Você não pode editar um glossário DeepL. Qualquer mudança significa apagar o antigo e criar um novo.&lt;/p&gt;
&lt;p&gt;O Rasepi lida com isto tratando a base de dados como a fonte da verdade e os DeepL glossários como artefactos descartáveis em tempo de execução. A entidade &lt;code&gt;TenantGlossary&lt;/code&gt; armazena tudo localmente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class TenantGlossary : ITenantScoped
{
    public Guid Id { get; set; }
    public Guid TenantId { get; set; }
    public string Name { get; set; }
    public string SourceLanguage { get; set; }     // e.g. &amp;quot;en&amp;quot;
    public string TargetLanguage { get; set; }     // e.g. &amp;quot;de&amp;quot;
    public string? DeepLGlossaryId { get; set; }   // Runtime DeepL ID
    public DateTime? LastSyncedAt { get; set; }
    public bool IsDirty { get; set; } = true;      // Triggers re-sync
    public ICollection&amp;lt;TenantGlossaryEntry&amp;gt; Entries { get; set; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando um utilizador adiciona uma entrada no glossário, por exemplo, mapeando &amp;quot;Sprint Review&amp;quot; para &amp;quot;Sprint-Überprüfung&amp;quot; para EN→DE, o registo da base de dados é atualizado imediatamente e &lt;code&gt;IsDirty&lt;/code&gt; é definido para &lt;code&gt;true&lt;/code&gt;. O glossário DeepL não é recriado imediatamente. Ele é recriado preguiçosamente, na próxima vez que uma tradução realmente precisar dele.&lt;/p&gt;
&lt;h3&gt;O fluxo de sincronização&lt;/h3&gt;
&lt;p&gt;Antes de cada chamada de tradução, o sistema resolve o glossário:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task&amp;lt;string?&amp;gt; GetOrSyncDeepLGlossaryIdAsync(
    string sourceLanguage, string targetLanguage,
    CancellationToken ct = default)
{
    var glossary = await _db.TenantGlossaries
        .Include(g =&amp;gt; g.Entries)
        .FirstOrDefaultAsync(g =&amp;gt;
            g.SourceLanguage == sourceLanguage &amp;amp;&amp;amp;
            g.TargetLanguage == targetLanguage, ct);

    if (glossary is null || glossary.Entries.Count == 0)
        return null;

    if (!glossary.IsDirty &amp;amp;&amp;amp; glossary.DeepLGlossaryId is not null)
        return glossary.DeepLGlossaryId;

    // Dirty - delete old, create new
    if (glossary.DeepLGlossaryId is not null)
        await _deepL.DeleteGlossaryAsync(glossary.DeepLGlossaryId);

    var entries = glossary.Entries
        .ToDictionary(e =&amp;gt; e.SourceTerm, e =&amp;gt; e.TargetTerm);

    var deepLGlossary = await _deepL.CreateGlossaryAsync(
        $&amp;quot;rasepi-{glossary.Id}&amp;quot;,
        glossary.SourceLanguage,
        glossary.TargetLanguage,
        entries);

    glossary.DeepLGlossaryId = deepLGlossary.GlossaryId;
    glossary.IsDirty = false;
    glossary.LastSyncedAt = DateTime.UtcNow;
    await _db.SaveChangesAsync(ct);

    return glossary.DeepLGlossaryId;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Três coisas dignas de nota aqui:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Sincronização preguiçosa&lt;/strong&gt; Nós só acessamos a API DeepL quando uma tradução é realmente necessária. A edição de entradas do glossário em massa não desencadeia dezenas de chamadas à API.&lt;/li&gt;
&lt;li&gt;**A consulta é executada através de filtros de consulta global EF, então &lt;code&gt;TenantGlossaries&lt;/code&gt; é automaticamente escopo. As entradas do glossário do locatário A nunca entram nas traduções do locatário B.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Um glossário por par de línguas&lt;/strong&gt; DeepL impõe isto de qualquer forma. Um glossário EN→DE, um glossário EN→FR, e assim por diante. O par &lt;code&gt;(SourceLanguage, TargetLanguage)&lt;/code&gt; é único por locatário.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Entradas do glossário&lt;/h3&gt;
&lt;p&gt;As entradas individuais são apenas mapeamentos de termos:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class TenantGlossaryEntry
{
    public Guid Id { get; set; }
    public Guid GlossaryId { get; set; }
    public string SourceTerm { get; set; }   // e.g. &amp;quot;Sprint Review&amp;quot;
    public string TargetTerm { get; set; }   // e.g. &amp;quot;Sprint-Überprüfung&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A API oferece-lhe CRUD completo e importação/exportação de CSV para gestão em massa:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;POST   /api/admin/glossaries                       Create glossary
POST   /api/admin/glossaries/{id}/entries           Add term
PUT    /api/admin/glossaries/{id}/entries/{entryId}  Update term
DELETE /api/admin/glossaries/{id}/entries/{entryId}  Remove term
POST   /api/admin/glossaries/{id}/import            Import CSV
GET    /api/admin/glossaries/{id}/export            Export CSV
POST   /api/admin/glossaries/{id}/sync              Force DeepL sync
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A importação de CSV é muito útil para equipas que migram de sistemas de memória de tradução existentes. Exporte os seus termos, limpe-os, importe-os para o Rasepi, e a próxima tradução usa o novo glossário automaticamente.&lt;/p&gt;
&lt;h2&gt;Regras de estilo, instruções personalizadas e formalidade&lt;/h2&gt;
&lt;p&gt;Os glossários tratam da terminologia. Mas a terminologia é apenas metade da questão. Uma tradução pode usar todas as palavras corretas e mesmo assim soar mal. Tom errado, formato de data errado, convenções de pontuação erradas.&lt;/p&gt;
&lt;p&gt;A ** API de regras de estilo** (v3) do DeepL resolve este problema. É possível criar listas de regras de estilo reutilizáveis que combinam dois tipos de controlos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Regras configuradas&lt;/strong&gt;, convenções de formatação predefinidas para datas, horas, pontuação, números e muito mais&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instruções personalizadas&lt;/strong&gt;, diretivas de texto livre que moldam o tom, o fraseado e as convenções específicas do domínio&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O Rasepi cria e gere estas instruções por inquilino, por idioma de destino. A entidade &lt;code&gt;TenantStyleRuleList&lt;/code&gt; armazena o DeepL &lt;code&gt;style_id&lt;/code&gt; juntamente com as regras configuradas e as instruções personalizadas do locatário:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class TenantStyleRuleList : ITenantScoped
{
    public Guid Id { get; set; }
    public Guid TenantId { get; set; }
    public string Name { get; set; }
    public string TargetLanguage { get; set; }      // e.g. &amp;quot;de&amp;quot;
    public string? DeepLStyleId { get; set; }       // Runtime DeepL style_id
    public string ConfiguredRulesJson { get; set; }  // Serialized configured rules
    public bool IsDirty { get; set; } = true;
    public DateTime? LastSyncedAt { get; set; }
    public ICollection&amp;lt;TenantCustomInstruction&amp;gt; CustomInstructions { get; set; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Criar listas de regras de estilo&lt;/h3&gt;
&lt;p&gt;Quando um administrador define regras de tradução para alemão, o Rasepi chama a API v3 do DeepL para criar a lista de regras de estilo. Aqui está o que parece:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task&amp;lt;string&amp;gt; CreateOrSyncStyleRuleListAsync(
    TenantStyleRuleList ruleList, CancellationToken ct = default)
{
    if (!ruleList.IsDirty &amp;amp;&amp;amp; ruleList.DeepLStyleId is not null)
        return ruleList.DeepLStyleId;

    // DeepL style rule lists are mutable - we can update in place
    if (ruleList.DeepLStyleId is not null)
    {
        // Replace configured rules on existing list
        await _httpClient.PutAsJsonAsync(
            $&amp;quot;v3/style_rules/{ruleList.DeepLStyleId}/configured_rules&amp;quot;,
            JsonSerializer.Deserialize&amp;lt;JsonElement&amp;gt;(ruleList.ConfiguredRulesJson),
            ct);

        // Sync custom instructions
        await SyncCustomInstructionsAsync(ruleList, ct);

        ruleList.IsDirty = false;
        ruleList.LastSyncedAt = DateTime.UtcNow;
        return ruleList.DeepLStyleId;
    }

    // Create new style rule list
    var payload = new
    {
        name = $&amp;quot;rasepi-{ruleList.TenantId}-{ruleList.TargetLanguage}&amp;quot;,
        language = ruleList.TargetLanguage,
        configured_rules = JsonSerializer.Deserialize&amp;lt;JsonElement&amp;gt;(
            ruleList.ConfiguredRulesJson),
        custom_instructions = ruleList.CustomInstructions.Select(ci =&amp;gt; new
        {
            label = ci.Label,
            prompt = ci.Prompt,
            source_language = ci.SourceLanguage
        })
    };

    var response = await _httpClient.PostAsJsonAsync(&amp;quot;v3/style_rules&amp;quot;, payload, ct);
    var result = await response.Content.ReadFromJsonAsync&amp;lt;StyleRuleResponse&amp;gt;(ct);

    ruleList.DeepLStyleId = result.StyleId;
    ruleList.IsDirty = false;
    ruleList.LastSyncedAt = DateTime.UtcNow;
    await _db.SaveChangesAsync(ct);

    return ruleList.DeepLStyleId;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ao contrário dos glossários, as listas de regras de estilo do DeepL são &lt;strong&gt;mutáveis&lt;/strong&gt;. Pode substituir as regras configuradas no local com &lt;code&gt;PUT /v3/style_rules/{style_id}/configured_rules&lt;/code&gt;, e as instruções personalizadas podem ser adicionadas, actualizadas ou eliminadas individualmente. Muito mais amigável para refinamento iterativo.&lt;/p&gt;
&lt;h3&gt;Como são as regras configuradas&lt;/h3&gt;
&lt;p&gt;As regras configuradas cobrem convenções de formatação que variam de acordo com o idioma ou preferência da empresa. Coisas como:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &amp;quot;dates_and_times&amp;quot;: {
    &amp;quot;time_format&amp;quot;: &amp;quot;use_24_hour_clock&amp;quot;,
    &amp;quot;calendar_era&amp;quot;: &amp;quot;use_bc_and_ad&amp;quot;
  },
  &amp;quot;punctuation&amp;quot;: {
    &amp;quot;periods_in_academic_degrees&amp;quot;: &amp;quot;do_not_use&amp;quot;
  },
  &amp;quot;numbers&amp;quot;: {
    &amp;quot;decimal_separator&amp;quot;: &amp;quot;use_comma&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estas regras parecem triviais, mas são muito rápidas. Um documento alemão que usa o formato de hora AM/PM e decimais separados por ponto final é lido como &amp;quot;traduzido do inglês&amp;quot; para um leitor alemão. Definir &lt;code&gt;use_24_hour_clock&lt;/code&gt; e &lt;code&gt;use_comma&lt;/code&gt; para separadores decimais em todas as traduções alemãs elimina isso imediatamente.&lt;/p&gt;
&lt;h3&gt;Instruções personalizadas: este é o verdadeiro poder&lt;/h3&gt;
&lt;p&gt;As instruções personalizadas são diretivas de texto livre, até 200 por lista de regras de estilo, cada uma com um máximo de 300 caracteres. Basicamente, diz a DeepL como moldar a tradução em linguagem simples:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class TenantCustomInstruction
{
    public Guid Id { get; set; }
    public Guid StyleRuleListId { get; set; }
    public string Label { get; set; }              // e.g. &amp;quot;Tone instruction&amp;quot;
    public string Prompt { get; set; }             // e.g. &amp;quot;Use a friendly, diplomatic tone&amp;quot;
    public string? SourceLanguage { get; set; }    // Optional source lang filter
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Exemplos reais dos nossos inquilinos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Use a friendly, diplomatic tone&amp;quot;&lt;/code&gt; para uma empresa em fase de arranque que pretende documentos acessíveis&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Always use &#39;Sie&#39; form, never &#39;du&#39;&amp;quot;&lt;/code&gt; para um escritório de advogados alemão&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Translate &#39;deployment&#39; as &#39;Bereitstellung&#39;, never &#39;Deployment&#39;&amp;quot;&lt;/code&gt; para termos que necessitam de tratamento dependente do contexto para além do simples mapeamento do glossário&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Use British English spelling (colour, organisation, licence)&amp;quot;&lt;/code&gt; para empresas sediadas no Reino Unido que traduzem entre variantes do inglês&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;Put currency symbols after the numeric amount&amp;quot;&lt;/code&gt; para corresponder às convenções europeias&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As instruções personalizadas são realmente poderosas para convenções específicas do domínio que não cabem nas entradas do glossário. Um glossário mapeia um termo para outro. Uma instrução personalizada pode dizer &amp;quot;ao traduzir documentos API, use o modo imperativo em vez da voz passiva&amp;quot;. Trata-se de um tipo de controlo completamente diferente.&lt;/p&gt;
&lt;h3&gt;Formalidade&lt;/h3&gt;
&lt;p&gt;O parâmetro &lt;code&gt;formality&lt;/code&gt; de DeepL (&lt;code&gt;default&lt;/code&gt;, &lt;code&gt;more&lt;/code&gt;, &lt;code&gt;less&lt;/code&gt;, &lt;code&gt;prefer_more&lt;/code&gt;, &lt;code&gt;prefer_less&lt;/code&gt;) ainda está disponível como um controlo separado juntamente com as regras de estilo. Alemão &amp;quot;du&amp;quot; versus &amp;quot;Sie&amp;quot;, francês &amp;quot;tu&amp;quot; versus &amp;quot;vous&amp;quot;, níveis de polidez japoneses. Estes são definidos por idioma do locatário através de &lt;code&gt;TenantLanguageConfig&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public class TenantLanguageConfig : ITenantScoped
{
    public string LanguageCode { get; set; }
    public string DisplayName { get; set; }
    public bool IsEnabled { get; set; }
    public TranslationTrigger Trigger { get; set; }
    public string? Formality { get; set; }         // &amp;quot;more&amp;quot;, &amp;quot;less&amp;quot;, &amp;quot;prefer_more&amp;quot;, etc.
    public string? StyleRuleListId { get; set; }   // Links to TenantStyleRuleList
    public string? TranslationProvider { get; set; }
    public int SortOrder { get; set; }
    public bool IsDefault { get; set; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A formalidade, as regras de estilo e os glossários são todos compostos. Uma única chamada de tradução pode conter todos os três:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var glossaryId = await GetOrSyncDeepLGlossaryIdAsync(sourceLang, targetLang, ct);
var styleId = await GetOrSyncStyleRuleListAsync(targetLang, ct);
var formality = tenantLanguageConfig.Formality ?? &amp;quot;default&amp;quot;;

// Build the v2/translate request payload
var payload = new
{
    text = new[] { blockContent },
    source_lang = NormalizeLanguageCode(sourceLang),
    target_lang = NormalizeLanguageCode(targetLang),
    glossary_id = glossaryId,
    style_id = styleId,
    formality = formality,
    preserve_formatting = true,
    context = surroundingContext,  // Adjacent blocks, not billed
    model_type = &amp;quot;quality_optimized&amp;quot;
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Duas coisas que vale a pena notar aqui:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**Passamos blocos adjacentes como contexto para melhorar a qualidade da tradução. DeepL usa-o para resolver ambiguidades, mas não o traduz nem o fatura. Um parágrafo sobre &amp;quot;células&amp;quot; é traduzido de forma diferente quando o contexto circundante é um documento de biologia versus um manual de folha de cálculo.&lt;/li&gt;
&lt;li&gt;**Seleção do modelo Qualquer pedido com &lt;code&gt;style_id&lt;/code&gt; ou &lt;code&gt;custom_instructions&lt;/code&gt; utiliza automaticamente o modelo &lt;code&gt;quality_optimized&lt;/code&gt; de DeepL. Este é o nível de qualidade mais elevado. Não é possível combiná-los com &lt;code&gt;latency_optimized&lt;/code&gt;, o que é uma restrição deliberada de DeepL. A personalização do estilo necessita do modelo completo.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Porque é que isto é mais importante do que se pensa&lt;/h3&gt;
&lt;p&gt;Imagine uma empresa que escreve documentos internos em alemão com o informal &amp;quot;du&amp;quot; que subitamente muda para o formal &amp;quot;Sie&amp;quot; numa secção traduzida. Parece inconsistente, na melhor das hipóteses, e pouco profissional, na pior. A formalidade trata disso. Mas a formalidade, por si só, não vai apanhar um documento que usa carimbos de data e hora AM/PM quando o seu escritório alemão usa o formato de 24 horas, ou que coloca o símbolo da moeda antes do número em vez de depois.&lt;/p&gt;
&lt;p&gt;Todos estes elementos em conjunto (regras de estilo, instruções personalizadas, formalidade, glossários) produzem traduções que parecem ter sido escritas por alguém da sua equipa. Não como se fossem produzidas por uma máquina que não sabe que a sua empresa existe.&lt;/p&gt;
&lt;h2&gt;A camada de serviço DeepL&lt;/h2&gt;
&lt;p&gt;Toda a comunicação DeepL passa pelo &lt;code&gt;IDeepLService&lt;/code&gt;. Ele envolve o SDK oficial do DeepL .NET e lida com as chamadas da API v3 para regras de estilo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public interface IDeepLService
{
    // Text translation (v2)
    Task&amp;lt;TextResult&amp;gt; TranslateTextAsync(
        string text, string sourceLanguage, string targetLanguage,
        string? options = null);

    Task&amp;lt;TextResult[]&amp;gt; TranslateTextBatchAsync(
        IEnumerable&amp;lt;string&amp;gt; texts, string sourceLanguage,
        string targetLanguage, string? options = null);

    // Glossary management (v2)
    Task&amp;lt;GlossaryInfo&amp;gt; CreateGlossaryAsync(
        string name, string sourceLang, string targetLang,
        Dictionary&amp;lt;string, string&amp;gt; entries);
    Task DeleteGlossaryAsync(string glossaryId);
    Task&amp;lt;GlossaryInfo&amp;gt; GetGlossaryAsync(string glossaryId);
    Task&amp;lt;GlossaryInfo[]&amp;gt; ListGlossariesAsync();
    Task&amp;lt;Dictionary&amp;lt;string, string&amp;gt;&amp;gt; GetGlossaryEntriesAsync(
        string glossaryId);

    // Style rules (v3)
    Task&amp;lt;StyleRuleResponse&amp;gt; CreateStyleRuleListAsync(
        string name, string language,
        JsonElement configuredRules,
        IEnumerable&amp;lt;CustomInstructionRequest&amp;gt; customInstructions);
    Task ReplaceConfiguredRulesAsync(
        string styleId, JsonElement configuredRules);
    Task&amp;lt;CustomInstructionResponse&amp;gt; AddCustomInstructionAsync(
        string styleId, string label, string prompt,
        string? sourceLanguage = null);
    Task DeleteCustomInstructionAsync(
        string styleId, string instructionId);
    Task DeleteStyleRuleListAsync(string styleId);

    // Usage tracking
    Task&amp;lt;Usage&amp;gt; GetUsageAsync();
    Task&amp;lt;Language[]&amp;gt; GetSourceLanguagesAsync();
    Task&amp;lt;Language[]&amp;gt; GetTargetLanguagesAsync();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A implementação trata da normalização do código da língua. DeepL requer &lt;code&gt;EN-US&lt;/code&gt; ou &lt;code&gt;EN-GB&lt;/code&gt; em vez de &lt;code&gt;en&lt;/code&gt; simples, e &lt;code&gt;PT-PT&lt;/code&gt; ou &lt;code&gt;PT-BR&lt;/code&gt; em vez de &lt;code&gt;pt&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;private static string NormalizeLanguageCode(string code)
    =&amp;gt; code.ToLower() switch
    {
        &amp;quot;en&amp;quot; =&amp;gt; &amp;quot;EN-US&amp;quot;,
        &amp;quot;pt&amp;quot; =&amp;gt; &amp;quot;PT-PT&amp;quot;,
        _ =&amp;gt; code.ToUpper()
    };
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A tradução em lote usa 50-item chunking para ficar dentro dos limites da API do DeepL enquanto maximiza a taxa de transferência:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task&amp;lt;TranslationBatchResult&amp;gt; TranslateBatchAsync(
    Dictionary&amp;lt;string, string&amp;gt; texts,
    string sourceLanguage, string targetLanguage)
{
    var translations = new Dictionary&amp;lt;string, string&amp;gt;();
    long totalChars = 0;

    foreach (var chunk in texts.Chunk(50))
    {
        var results = await _deepL.TranslateTextBatchAsync(
            chunk.Select(kv =&amp;gt; kv.Value),
            sourceLanguage, targetLanguage);

        for (int i = 0; i &amp;lt; chunk.Length; i++)
        {
            translations[chunk[i].Key] = results[i].Text;
            totalChars += chunk[i].Value.Length;
        }
    }

    return new TranslationBatchResult
    {
        Translations = translations,
        BilledCharacters = totalChars
    };
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Como só enviamos blocos obsoletos, e não documentos inteiros, um lote de tradução típico para uma única edição contém 1-3 blocos em vez de mais de 40. É daí que vem a redução de custos de 94%.&lt;/p&gt;
&lt;h2&gt;O orquestrador de tradução&lt;/h2&gt;
&lt;p&gt;O &lt;code&gt;TranslationOrchestrator&lt;/code&gt; decide o que fazer com cada bloco quando o documento de origem é alterado. Vamos percorrer a árvore de decisão:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task OrchestrateTranslationAsync(
    Guid entryId, List&amp;lt;Guid&amp;gt; changedBlockIds,
    CancellationToken ct = default)
{
    var entry = await _db.Entries
        .FirstOrDefaultAsync(e =&amp;gt; e.Id == entryId, ct);

    var translations = await _db.EntryTranslations
        .Where(t =&amp;gt; t.EntryId == entryId)
        .ToListAsync(ct);

    foreach (var translation in translations)
    {
        var langConfig = await GetLanguageConfigAsync(
            translation.Language, ct);

        var translationBlocks = await _db.TranslationBlocks
            .Where(tb =&amp;gt; changedBlockIds.Contains(tb.SourceBlockId)
                      &amp;amp;&amp;amp; tb.Language == translation.Language)
            .ToListAsync(ct);

        foreach (var block in translationBlocks)
        {
            if (block.IsLocked || block.TranslatedById is not null)
            {
                // Human-edited or locked - mark stale, don&#39;t overwrite
                block.Status = TranslationStatus.Stale;
            }
            else if (langConfig.Trigger == TranslationTrigger.AlwaysTranslate)
            {
                // Machine-translated, auto mode - retranslate now
                await RetranslateBlockAsync(block, translation.Language, ct);
            }
            else
            {
                // TranslateOnFirstVisit - mark stale, translate later
                block.Status = TranslationStatus.Stale;
            }
        }
    }

    await _db.SaveChangesAsync(ct);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A parte chave: **Se um tradutor ajustou manualmente um bloco, talvez adicionando contexto cultural ou reformulando a redação para maior clareza, o sistema respeita esse trabalho. Marca o bloco como obsoleto para que o tradutor saiba que a fonte mudou, mas não substitui silenciosamente as suas edições.&lt;/p&gt;
&lt;p&gt;Blocos traduzidos por máquina com &lt;code&gt;AlwaysTranslate&lt;/code&gt; ativado são retraduzidos imediatamente. Os blocos traduzidos automaticamente com &lt;code&gt;TranslateOnFirstVisit&lt;/code&gt; são marcados como obsoletos e traduzidos quando alguém abre efetivamente o documento nessa língua.&lt;/p&gt;
&lt;h2&gt;Gatilhos de tradução: quando as traduções acontecem&lt;/h2&gt;
&lt;p&gt;Cada língua tem um &lt;code&gt;TranslationTrigger&lt;/code&gt; que controla o tempo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public enum TranslationTrigger
{
    AlwaysTranslate,         // Translate on every save
    TranslateOnFirstVisit    // Translate when first opened in that language
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O &lt;code&gt;AlwaysTranslate&lt;/code&gt; é útil para línguas de alta prioridade onde quer que as traduções sejam imediatamente actuais. Francês para uma empresa com um grande escritório em Paris. Alemão para uma empresa com sede em Munique.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;TranslateOnFirstVisit&lt;/code&gt; é útil para línguas que são ocasionalmente necessárias, mas que não valem o custo da API para manter perfeitamente actualizadas em todos os momentos. Quando alguém abre o documento nessa língua, os blocos obsoletos são traduzidos em tempo real.&lt;/p&gt;
&lt;p&gt;Ambos os modos usam a mesma resolução de glossário, as mesmas configurações de formalidade e o mesmo hashing de conteúdo. A única diferença é o tempo.&lt;/p&gt;
&lt;h2&gt;Adaptação única de conteúdo e estrutura&lt;/h2&gt;
&lt;p&gt;É aqui que a arquitetura compensa realmente, para além da simples tradução.&lt;/p&gt;
&lt;p&gt;Quando um tradutor alemão adiciona uma secção de conformidade DSGVO que não existe em inglês, adiciona-a como um novo bloco na versão alemã. Esse bloco não tem &lt;code&gt;SourceBlockId&lt;/code&gt;, é assinalado como conteúdo único. O sistema nunca o envia para retradução porque não existe uma fonte a partir da qual traduzir. Só existe em alemão.&lt;/p&gt;
&lt;p&gt;Quando um tradutor japonês muda uma lista de marcadores para uma lista numerada (uma convenção comum na escrita técnica japonesa), a marca &lt;code&gt;IsStructureAdapted&lt;/code&gt; do bloco preserva-o em futuros ciclos de retradução:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var translation = new TranslationBlock
{
    SourceBlockId = sourceBlockId,
    Language = targetLanguage,
    BlockType = translatedBlockType,
    SourceBlockType = sourceBlock.BlockType,
    IsStructureAdapted = translatedBlockType != sourceBlock.BlockType,
    StructureAdaptationNotes = &amp;quot;Numbered list preferred in JP technical docs&amp;quot;,
    SourceContentHash = sourceBlock.ContentHash,
    Status = TranslationStatus.UpToDate,
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O sinalizador &lt;code&gt;IsNoTranslate&lt;/code&gt; lida com o conteúdo que deve ser copiado literalmente: blocos de código, URLs, nomes de produtos, notação matemática. O fornecedor de tradução ignora-os completamente.&lt;/p&gt;
&lt;h2&gt;Colocando tudo junto&lt;/h2&gt;
&lt;p&gt;Vamos percorrer o fluxo completo. Um utilizador em Londres edita um parágrafo no documento de origem em inglês e o seu escritório em Munique tem o alemão definido como &lt;code&gt;AlwaysTranslate&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**O utilizador guarda. O TipTap envia JSON para a API.&lt;/li&gt;
&lt;li&gt;**O &lt;code&gt;CreateBlocksFromDocumentAsync&lt;/code&gt; analisa o JSON, recalcula os hashes de conteúdo e compara os hashes antigos e novos para identificar os blocos que foram efetivamente alterados.&lt;/li&gt;
&lt;li&gt;**Encontra o &lt;code&gt;EntryTranslation&lt;/code&gt; alemão e verifica o bloco alemão. É traduzido por máquina, não está bloqueado, não foi editado por humanos, por isso é elegível para retradução.&lt;/li&gt;
&lt;li&gt;**Configuração de tradução carregada: ID do glossário resolvido através de &lt;code&gt;GetOrSyncDeepLGlossaryIdAsync(&amp;quot;en&amp;quot;, &amp;quot;de&amp;quot;)&lt;/code&gt;, regras de estilo através de &lt;code&gt;GetOrSyncStyleRuleListAsync(&amp;quot;de&amp;quot;)&lt;/code&gt;, formalidade definida para &amp;quot;more&amp;quot; (formal &amp;quot;Sie&amp;quot;), blocos adjacentes passados como contexto para desambiguação.&lt;/li&gt;
&lt;li&gt;Chamada &lt;strong&gt;DeepL&lt;/strong&gt; Bloco único enviado com ID do glossário, ID do estilo, formalidade e contexto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bloco atualizado.&lt;/strong&gt; Conteúdo traduzido armazenado, &lt;code&gt;SourceContentHash&lt;/code&gt; sincronizado, estado definido para &lt;code&gt;UpToDate&lt;/code&gt;. Um bloco traduzido em vez de 40+. Os restantes 39 blocos? Inalterados.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Entretanto, o seu escritório de Tóquio tem o japonês definido para &lt;code&gt;TranslateOnFirstVisit&lt;/code&gt;. A mesma edição marca o bloco de tradução em japonês como &lt;code&gt;Stale&lt;/code&gt;. Quando alguém em Tóquio abre o documento, os passos 5-9 acontecem na hora. A adaptação da sua estrutura (lista numerada) é preservada. Os seus blocos únicos permanecem exatamente onde estão.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Penso que o motor de tradução é a parte do Rasepi que oferece o valor mais visível. As traduções que utilizam a sua terminologia, seguem as suas convenções de formatação, obedecem às suas instruções personalizadas, correspondem ao seu tom, respeitam o trabalho dos seus tradutores e custam uma fração do que custaria a retradução de um documento completo. A arquitetura torna tudo isto automático e mantém-se fora do caminho quando os humanos querem assumir o controlo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;O mesmo motor DeepL que alimenta as traduções escritas também alimenta o Talk to Docs, a nossa interface de documentação conversacional, com o DeepL Voice a tratar da interação falada. Os mesmos glossários, as mesmas regras de estilo, a mesma formalidade, a mesma consistência. Quer a sua equipa leia a documentação ou fale com ela, a qualidade da linguagem é idêntica.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.rasepi.com/&quot;&gt;Explore a API de tradução →&lt;/a&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="architecture" />
    <category term="translation" />
    <category term="deepl" />
  </entry>
  <entry>
    <title>Pare de manter cinco cópias do mesmo documento</title>
    <link href="https://rasepi.com/pt/blog/stop-maintaining-five-copies-of-the-same-document/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/stop-maintaining-five-copies-of-the-same-document/</id>
    <updated>2026-03-31T00:00:00Z</updated>
    <summary>A maioria das empresas tem onboarding_germany, onboarding_japan, onboarding_brazil. No Rasepi, é apenas &quot;Onboarding&quot;. Um documento. Passos partilhados traduzidos, passos locais por língua. Não há mais cópias à deriva.</summary>
    <content type="html">&lt;p&gt;Abra a wiki da sua empresa agora mesmo e pesquise por &amp;quot;onboarding&amp;quot;. Quantos resultados obtém?&lt;/p&gt;
&lt;p&gt;Se for uma empresa global, acho que não é um só. Provavelmente é algo como isto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BLOQUEIO DE CÓDIGO_0&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BLOQUEIO DE CÓDIGO_1&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Onboarding Guide - Japan&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Onboarding LATAM (draft)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BLOQUEIO DE CÓDIGO_4&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cinco documentos. Todos cobrem mais ou menos a mesma coisa. Todos ligeiramente diferentes. Todos mantidos por pessoas diferentes em horários diferentes. Alguns actuais, outros com três meses de atraso, um de que já ninguém tem a certeza.&lt;/p&gt;
&lt;p&gt;Isto é o que acontece quando a sua plataforma de documentação não consegue lidar corretamente com conteúdos multilingues. Acaba por copiar todo o documento para cada mercado, e cada cópia afasta-se lentamente das outras.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://rasepi.com/pt/blog/img/one-document-all-languages.svg&quot; alt=&quot;Um documento, todas as línguas&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;A armadilha de copiar e localizar&lt;/h2&gt;
&lt;p&gt;Começa de forma bastante inocente. Tem um ótimo guia de integração em inglês. O escritório de Berlim precisa dele em alemão, por isso alguém o copia, traduz e acrescenta as partes específicas da Alemanha: Formação DSGVO, informação Betriebsrat, inscrição no seguro de saúde local.&lt;/p&gt;
&lt;p&gt;Depois, Tóquio precisa de um. Copiar de novo. Traduzir. Acrescentar as informações específicas do Japão: registo no hanko, processo de obtenção do passe de transportes públicos, guia de etiqueta do escritório.&lt;/p&gt;
&lt;p&gt;Segue-se São Paulo. A mesma coisa. Copiar, traduzir, adicionar conteúdo local sobre os requisitos do CLT, vales de refeição e documentos fiscais.&lt;/p&gt;
&lt;p&gt;Agora tem quatro documentos. O original em inglês é atualizado regularmente. A versão alemã foi actualizada no último trimestre. A versão japonesa... alguém pensa que Tanaka-san a actualizou em outubro. A versão brasileira foi criada por um empreiteiro que saiu e, desde então, ninguém lhe tocou.&lt;/p&gt;
&lt;p&gt;**Cada cópia é um fardo de manutenção e cada uma delas contém uma mistura de conteúdo partilhado (o que é igual em todo o lado) e conteúdo local (o que é específico desse mercado). Mas a plataforma não sabe a diferença. É tudo apenas texto numa página.&lt;/p&gt;
&lt;p&gt;Assim, quando alguém actualiza a secção da política de segurança no original em inglês, ninguém actualiza as outras quatro. Ou pior, alguém actualiza a secção alemã mas não a japonesa. Agora tem cinco documentos que dizem coisas ligeiramente diferentes sobre a mesma política da empresa.&lt;/p&gt;
&lt;h2&gt;O verdadeiro problema: os conteúdos partilhados e locais estão misturados&lt;/h2&gt;
&lt;p&gt;O facto é que a maioria destes documentos são 70-80% idênticos. Os passos de integração, a configuração das ferramentas, as políticas de segurança, a secção de valores da empresa, a lista de &amp;quot;quem contactar&amp;quot;. Tudo isto é igual, independentemente de estarmos em Berlim, Tóquio ou São Paulo.&lt;/p&gt;
&lt;p&gt;Os aspectos locais representam talvez 20-30% do documento. Requisitos de conformidade específicos, benefícios locais, processos regionais, contactos da equipa para esse escritório.&lt;/p&gt;
&lt;p&gt;Mas quando tudo está num grande documento plano por língua, não há forma de saber que partes são partilhadas e quais são locais. Uma atualização do conteúdo partilhado implica a verificação e atualização manual de todas as cópias. O que ninguém faz de forma consistente. É por isso que as cópias se desviam.&lt;/p&gt;
&lt;h2&gt;Um documento. É só isso.&lt;/h2&gt;
&lt;p&gt;No Rasepi, o guia de integração é um documento. Não um por língua. Um.&lt;/p&gt;
&lt;p&gt;O conteúdo partilhado, os 70-80% que são iguais em todo o lado, é escrito uma vez em inglês e traduzido automaticamente para todas as línguas que a sua equipa utiliza. Quando alguém actualiza a secção da política de segurança em inglês, esta é retraduzida para alemão, japonês, português e francês em segundos. Sem cópia manual. Nada de &amp;quot;alguém deve atualizar as outras versões&amp;quot;.&lt;/p&gt;
&lt;p&gt;O conteúdo local reside na respectiva versão linguística. A secção de formação DSGVO existe apenas na versão alemã. O processo hanko existe apenas na versão japonesa. Os requisitos do TTC existem apenas na versão portuguesa. Estas secções estão assinaladas como conteúdo único, pertencem a essa língua e nunca são substituídas por retradução.&lt;/p&gt;
&lt;p&gt;Explicámos exatamente como isto funciona no nosso post sobre &lt;a href=&quot;https://rasepi.com/pt/blog/how-rasepi-translations-work-and-why-they-sound-like-your-team/&quot;&gt;como funcionam as traduções da Rasepi&lt;/a&gt;. A versão resumida: cada parágrafo tem a sua própria identidade. Os parágrafos partilhados são traduzidos e monitorizados. Os parágrafos únicos pertencem à sua língua e nada mais lhes toca.&lt;/p&gt;
&lt;p&gt;O resultado? A sua pesquisa na wiki por &amp;quot;onboarding&amp;quot; apresenta um resultado. Apenas &amp;quot;Onboarding&amp;quot;. Se o abrir em inglês, verá a versão inglesa com todo o conteúdo partilhado. Se abrir em alemão, verá o mesmo conteúdo partilhado em alemão e as secções específicas da Alemanha. Se abrir em japonês, vê o mesmo conteúdo partilhado em japonês e as secções específicas do Japão.&lt;/p&gt;
&lt;p&gt;Um documento. Não cinco. Não cinco documentos a apodrecerem lentamente a velocidades diferentes.&lt;/p&gt;
&lt;h2&gt;O que isso realmente muda&lt;/h2&gt;
&lt;p&gt;Isto não é apenas mais arrumado. Altera fundamentalmente a forma como a sua documentação funciona em todos os escritórios.&lt;/p&gt;
&lt;h3&gt;As actualizações chegam a todos&lt;/h3&gt;
&lt;p&gt;Quando actualiza a parte partilhada do guia de integração, esta é actualizada em todas as línguas. Não eventualmente, nem depois de alguém se lembrar de o fazer. Automaticamente. O parágrafo que alterou é retraduzido. Tudo o resto permanece exatamente onde estava.&lt;/p&gt;
&lt;p&gt;Isto significa que o escritório de Tóquio está a ler a mesma política da empresa que o escritório de Londres. Não a versão de há seis meses atrás que ninguém conseguiu atualizar.&lt;/p&gt;
&lt;h3&gt;As equipas locais são proprietárias dos seus conteúdos locais&lt;/h3&gt;
&lt;p&gt;A sua equipa de Munique pode adicionar uma secção sobre o desconto no ginásio local sem se preocupar com a possibilidade de ser eliminada pela próxima atualização em inglês. O seu conteúdo exclusivo é deles. Permanece na versão alemã, sem ser afetado por quaisquer alterações à fonte inglesa.&lt;/p&gt;
&lt;p&gt;O mesmo se aplica a todos os outros escritórios. O conteúdo local é genuinamente local. Não interfere com os conteúdos partilhados, e os conteúdos partilhados não interferem com eles.&lt;/p&gt;
&lt;h3&gt;As novas contratações recebem a informação correta&lt;/h3&gt;
&lt;p&gt;Um novo contratado em São Paulo abre o guia de integração e vê tudo o que precisa. As secções partilhadas (ferramentas, segurança, valores) estão em português. As secções específicas do Brasil (CLT, documentos fiscais, vales de refeição) estão mesmo ao lado. Um documento, tudo na língua deles, nada em falta, nada desatualizado.&lt;/p&gt;
&lt;p&gt;Não precisam de saber que três outros escritórios têm secções locais diferentes. Vêem apenas a sua versão. Limpa e completa.&lt;/p&gt;
&lt;h3&gt;O número de páginas diminui&lt;/h3&gt;
&lt;p&gt;Esta é a matemática simples. Se tiver 50 documentos-chave e os mantiver em 5 línguas com a abordagem copiar-e-localizar, tem 250 documentos. No Rasepi, tem 50. Cada um com versões linguísticas que partilham conteúdos comuns e mantêm as suas próprias secções locais.&lt;/p&gt;
&lt;p&gt;250 documentos para manter versus 50. São 200 páginas de despesas gerais de manutenção que simplesmente desaparecem.&lt;/p&gt;
&lt;h2&gt;Não se trata apenas de integração&lt;/h2&gt;
&lt;p&gt;O onboarding é o exemplo óbvio porque todas as empresas globais têm este problema. Mas o mesmo padrão aparece em todo o lado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Os passos principais são os mesmos, mas a equipa de Berlim utiliza um servidor de teste local e Tóquio tem um processo de aprovação diferente.&lt;/li&gt;
&lt;li&gt;Documentação de conformidade: secção GDPR para a Europa, LGPD para o Brasil, APPI para o Japão. Tudo no mesmo documento, cada um aparecendo apenas onde é relevante.&lt;/li&gt;
&lt;li&gt;Benefícios e políticas de RH: a política de licença parental é diferente em cada país. Os valores da empresa são os mesmos em todo o lado.&lt;/li&gt;
&lt;li&gt;O produto funciona da mesma forma em todo o lado, mas os métodos de pagamento, as horas de apoio e os regulamentos regionais variam.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada um destes é um documento que a maioria das empresas mantém em cópias separadas por mercado. E cada um deles pode ser um único documento com conteúdo partilhado e local.&lt;/p&gt;
&lt;h2&gt;O efeito composto&lt;/h2&gt;
&lt;p&gt;É aqui que as coisas se tornam reais. Uma empresa com 200 documentos em 4 mercados não está a manter 200 documentos. Está a manter 800. Mas tem pessoal para 200. Portanto, o que acontece de facto é:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As versões em inglês estão actualizadas&lt;/li&gt;
&lt;li&gt;As versões em alemão estão quase todas actualizadas&lt;/li&gt;
&lt;li&gt;As versões francesas estão atrasadas&lt;/li&gt;
&lt;li&gt;As versões japonesas são um ponto de interrogação&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parece-lhe familiar?&lt;/p&gt;
&lt;p&gt;Na Rasepi, são actualizados 200 documentos. O conteúdo partilhado é traduzido automaticamente. O conteúdo local é adicionado pelas equipas locais. Cada versão é tão atual como a versão inglesa, acrescida de quaisquer adições locais que a equipa regional tenha feito.&lt;/p&gt;
&lt;p&gt;Os custos de tradução também são mais baixos. Quando actualiza um parágrafo em inglês, apenas esse parágrafo é retraduzido em todas as línguas. Não o documento inteiro, nem todos os 200 documentos. Apenas o parágrafo que foi efetivamente alterado. Escrevemos sobre &lt;a href=&quot;https://rasepi.com/pt/blog/how-rasepi-translations-work-and-why-they-sound-like-your-team/&quot;&gt;como isso funciona&lt;/a&gt; em pormenor, incluindo o glossário e as regras de estilo que fazem com que o conteúdo traduzido pareça natural.&lt;/p&gt;
&lt;h2&gt;Uma verificação rápida&lt;/h2&gt;
&lt;p&gt;Se estiver a gerir uma equipa global, pergunte a si próprio:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Quantos documentos duplicados tem?&lt;/strong&gt; Pesquise o mesmo tópico e conte as cópias específicas de cada língua.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quão actuais são as versões não inglesas?&lt;/strong&gt; Verifique a data da última edição nos documentos em alemão, francês ou japonês. Quão atrasadas estão?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As equipas locais adicionam conteúdo às suas versões?&lt;/strong&gt; Ou desistiram porque é substituído?&lt;/li&gt;
&lt;li&gt;**Quanto tempo demora o onboarding nos escritórios que não falam inglês? Se demorar mais tempo, é provável que a documentação não esteja a ser devidamente utilizada.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se as respostas o deixam desconfortável, não é o único. A maioria das empresas não se apercebe da sobrecarga que criou até contar efetivamente as cópias.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A documentação deve acompanhar a sua empresa e não multiplicar-se. Cada cópia que mantém é uma cópia que pode ficar para trás, confundir uma nova contratação ou contradizer a versão que outra pessoa está a ler. Um documento por tópico, com o conteúdo partilhado traduzido e o conteúdo local no seu devido lugar, é a forma como a documentação deve funcionar numa empresa global.&lt;/p&gt;
&lt;p&gt;**A sua wiki não deve precisar de cinco cópias do mesmo documento. Uma é suficiente. Passos partilhados traduzidos, passos locais por língua. É só isso.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rasepi.com/#multilingual&quot;&gt;Veja a publicação multilingue em ação →&lt;/a&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="multilingual" />
    <category term="documentation" />
    <category term="localisation" />
  </entry>
  <entry>
    <title>O caso de negócios para a localização em nível de bloco</title>
    <link href="https://rasepi.com/pt/blog/why-multilingual-knowledge-is-the-key-to-business-success/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/why-multilingual-knowledge-is-the-key-to-business-success/</id>
    <updated>2026-03-24T00:00:00Z</updated>
    <summary>As equipas globais não precisam apenas de traduções. Precisam de conhecimentos que funcionem em todos os mercados, com cada língua a ter a sua própria estrutura. A localização em bloco torna isso prático.</summary>
    <content type="html">&lt;p&gt;Existe um padrão em todas as empresas que operam além-fronteiras. A documentação em inglês é sólida. A versão alemã está três meses atrasada. A versão japonesa foi traduzida uma vez, por uma empresa contratada, e ninguém tocou nela desde então. A versão em português do Brasil ainda não existe, apesar de São Paulo ser o escritório que mais cresce.&lt;/p&gt;
&lt;p&gt;Toda a gente concorda que isto é um problema. Ninguém tem uma boa solução. Até agora, a localização tem sido tratada como um projeto, um esforço único que se orçamenta, executa e depois se negligencia discretamente até à próxima grande revisão.&lt;/p&gt;
&lt;p&gt;Esta abordagem está estragada. Eis porquê e o que eu penso que realmente funciona.&lt;/p&gt;
&lt;h2&gt;Tradução não é localização&lt;/h2&gt;
&lt;p&gt;Vamos esclarecer a terminologia. A tradução é pegar num texto numa língua e produzir um texto equivalente noutra. A localização é fazer com que o conhecimento funcione num mercado específico. Sobrepõem-se, mas não são a mesma coisa.&lt;/p&gt;
&lt;p&gt;Um documento traduzido lê-se corretamente. Um documento localizado lê-se naturalmente. Tem em conta o contexto cultural, os regulamentos regionais, as ferramentas locais e a forma como as pessoas desse mercado trabalham efetivamente.&lt;/p&gt;
&lt;p&gt;Esta distinção é importante porque a maioria das plataformas de documentação trata a localização como uma tarefa de tradução. Escreve-se em inglês, carrega-se num botão e obtém-se um resultado em francês. Está feito. Exceto que não está feito, porque:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A equipa francesa tem um processo de implementação diferente que o documento em inglês não cobre&lt;/li&gt;
&lt;li&gt;Os requisitos de conformidade alemães acrescentam um passo de aprovação adicional que não existe noutros locais&lt;/li&gt;
&lt;li&gt;O escritório japonês utiliza uma ferramenta interna diferente para o mesmo fluxo de trabalho&lt;/li&gt;
&lt;li&gt;Os leitores do português do Brasil precisam de contexto sobre as regras fiscais locais que não são relevantes em mais lado nenhum&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**Uma tradução direta do documento em inglês é tecnicamente correta em todos estes casos e praticamente inútil também em todos eles.&lt;/p&gt;
&lt;h2&gt;O problema da tradução ao nível do documento&lt;/h2&gt;
&lt;p&gt;A localização tradicional funciona ao nível do documento. Tem um documento em inglês. Traduz todo o documento para alemão. Quando a versão inglesa é alterada, envia-se o documento completo para retradução. Isto cria três problemas:&lt;/p&gt;
&lt;h3&gt;1. É caro&lt;/h3&gt;
&lt;p&gt;Se o seu guia de integração tiver 15 secções e alterar um parágrafo, estará a pagar para retraduzir todas as 15 secções. Multiplique isso por 8 idiomas e cada edição torna-se uma conversa de orçamento.&lt;/p&gt;
&lt;h3&gt;2. É lento&lt;/h3&gt;
&lt;p&gt;Enviar documentos completos para tradução leva tempo. Mesmo com a tradução automática moderna, o ciclo de revisão de um documento completo é significativamente mais longo do que a revisão de uma única secção alterada. As equipas noutras línguas estão sempre atrasadas.&lt;/p&gt;
&lt;h3&gt;3. Não suporta conteúdo exclusivo&lt;/h3&gt;
&lt;p&gt;Este é o verdadeiro problema. Se a versão alemã precisar de uma secção extra sobre a conformidade com a DSGVO, para onde vai? Num sistema de tradução ao nível do documento, qualquer conteúdo adicionado à versão alemã é substituído na próxima vez que alguém retraduzir a partir do inglês. A equipa alemã aprende depressa: não acrescente nada, porque será apagado.&lt;/p&gt;
&lt;h2&gt;Localização ao nível do bloco: uma arquitetura diferente&lt;/h2&gt;
&lt;p&gt;O Rasepi não traduz documentos. Traduz blocos: parágrafos individuais, cabeçalhos e secções, cada um deles rastreado de forma independente com a sua própria identidade e hash de conteúdo.&lt;/p&gt;
&lt;p&gt;Eis o que isto significa na prática:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quando edita um único parágrafo em inglês&lt;/strong&gt;, o Rasepi detecta qual o bloco que foi alterado através da comparação de hashes de conteúdo SHA256. Apenas esse bloco é enviado para tradução via DeepL. Os outros 14 blocos do documento permanecem exatamente como estavam. O seu custo de tradução diminui até 94%.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quando o tradutor alemão precisa de acrescentar uma secção DSGVO&lt;/strong&gt;, acrescenta-a como um novo bloco na versão alemã. Esse bloco existe apenas em alemão. Não afecta a fonte inglesa. Não é substituído quando o inglês é alterado. É assinalado como conteúdo exclusivo para que todos saibam que é intencional.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quando a versão japonesa precisa de uma estrutura diferente&lt;/strong&gt;, por exemplo, uma lista numerada em vez de pontos, porque é essa a convenção na escrita técnica japonesa, o tradutor pode alterar o tipo de bloco. O sistema regista isto como uma &amp;quot;adaptação de estrutura&amp;quot; e preserva-a em futuras actualizações.&lt;/p&gt;
&lt;p&gt;Cada versão linguística torna-se um documento de primeira classe, não uma cópia sombra.&lt;/p&gt;
&lt;h2&gt;Como funciona, tecnicamente&lt;/h2&gt;
&lt;p&gt;Cada bloco no Rasepi tem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Um UUID&lt;/strong&gt; que persiste em todas as edições e traduções&lt;/li&gt;
&lt;li&gt;Um hash de conteúdo** (SHA256) que muda quando o texto muda&lt;/li&gt;
&lt;li&gt;Um índice de posição** para que os blocos fiquem na ordem correta&lt;/li&gt;
&lt;li&gt;Um sinalizador de eliminação suave** para que a remoção de um bloco em inglês não quebre o alinhamento noutras línguas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quando um bloco de tradução é criado, ele armazena o hash de conteúdo do bloco de origem. Em cada gravação, o sistema compara os hashes. Se coincidirem, a tradução é atual. Se não corresponderem, a tradução é marcada como obsoleta, e apenas esse bloco específico precisa de atenção.&lt;/p&gt;
&lt;p&gt;Este é o mecanismo por detrás da redução de custos de 94%. A maioria das edições altera uma ou duas secções. O resto do documento, em todas as línguas, permanece inalterado.&lt;/p&gt;
&lt;h2&gt;Conteúdo único por língua&lt;/h2&gt;
&lt;p&gt;É aqui que as coisas se tornam genuinamente diferentes de qualquer outra plataforma.&lt;/p&gt;
&lt;p&gt;No Rasepi, cada versão linguística pode conter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blocos traduzidos: traduções diretas da língua de origem, controladas quanto à sua obsolescência&lt;/li&gt;
&lt;li&gt;Blocos únicos: conteúdo que só existe nessa língua, acrescentado pela equipa local&lt;/li&gt;
&lt;li&gt;Blocos adaptados à estrutura: mesmo conteúdo de origem, formatação ou tipo de bloco diferente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um único documento pode ter o seguinte aspeto em todas as línguas:&lt;/p&gt;
&lt;p&gt;| Bloco | Inglês (fonte) | Alemão | Japonês | Português | Inglês (fonte)
|-------|------------------|--------|----------|
1 | Introdução | Traduzido | Traduzido | Traduzido |
| 2 | Passos de configuração | Traduzido | Estrutura adaptada (lista numerada) |
| 3 | - | Conformidade DSGVO (única) | - |
4 | Implementação | Traduzido | Traduzido | |
| 5 | - | - | Nota de ferramentas locais (única) |
6 | Resolução de problemas | Traduzido | Traduzido | Traduzido |&lt;/p&gt;
&lt;p&gt;Cada equipa recebe exatamente a documentação de que necessita. Sem compromissos. Sem soluções alternativas. Sem limitações de tamanho único.&lt;/p&gt;
&lt;h2&gt;Controlo de atualidade entre idiomas&lt;/h2&gt;
&lt;p&gt;Cada versão linguística monitoriza a sua própria atualidade de forma independente. A fonte em inglês pode ter uma pontuação de 94 (revisto recentemente, todos os links válidos, grande número de leitores). A versão francesa pode ter uma pontuação de 71 (dois blocos obsoletos, um link quebrado específico para o conteúdo francês). A versão japonesa pode ter uma pontuação de 88 (todas as traduções são actuais, mas o número de leitores está a diminuir).&lt;/p&gt;
&lt;p&gt;Este controlo da atualidade por língua significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sabe exatamente quais as línguas que precisam de atenção&lt;/li&gt;
&lt;li&gt;As traduções desatualizadas são descobertas automaticamente, não por acidente&lt;/li&gt;
&lt;li&gt;As ferramentas de IA podem ter em conta a atualidade específica da língua ao fornecer respostas&lt;/li&gt;
&lt;li&gt;Os painéis de controlo mostram a integridade dos conteúdos por língua e não apenas por documento&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;O caso de negócio&lt;/h2&gt;
&lt;p&gt;As empresas que operam em vários idiomas enfrentam uma realidade simples: a sua documentação é um ativo ou um passivo em todos os mercados que serve.&lt;/p&gt;
&lt;p&gt;Quando a sua equipa de Berlim está a trabalhar a partir de uma tradução alemã com três meses de atraso em relação à fonte inglesa, está a tomar decisões com base em informações desactualizadas. Quando o seu escritório de Tóquio não pode adicionar contexto local a documentos partilhados porque o sistema de tradução o substitui, deixa de utilizar a wiki e cria a sua própria documentação sombra. Quando a sua equipa de São Paulo não tem documentos em português, a integração demora o dobro do tempo.&lt;/p&gt;
&lt;p&gt;O custo não é apenas a taxa de tradução. É:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Integração mais lenta&lt;/strong&gt; em mercados não ingleses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Esforço duplicado&lt;/strong&gt; quando as equipas mantêm documentação paralela em ferramentas locais&lt;/li&gt;
&lt;li&gt;Silos de conhecimento** que se formam quando o wiki oficial não serve a todos&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Risco de conformidade&lt;/strong&gt; quando os requisitos específicos da região não são capturados&lt;/li&gt;
&lt;li&gt;Perda de confiança** no próprio sistema de documentação&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A localização em bloco resolve tudo isto, não tornando a tradução mais barata (embora o faça), mas tornando cada versão linguística num documento vivo, mantido e fiável.&lt;/p&gt;
&lt;h2&gt;Começar&lt;/h2&gt;
&lt;p&gt;Se está a gerir uma equipa multilingue em qualquer plataforma de documentação hoje em dia, aqui está uma verificação rápida:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**Escolha o seu documento mais importante e verifique-o em todas as línguas. Cada versão está actualizada?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pergunte às suas equipas que não falam inglês:&lt;/strong&gt; confiam nos documentos traduzidos? Utilizam-nos?&lt;/li&gt;
&lt;li&gt;**As equipas estão a manter wikis locais, páginas Notion ou mensagens fixas no Slack porque os documentos oficiais não lhes servem?&lt;/li&gt;
&lt;li&gt;**Calcule os seus gastos com tradução. Quanto está a pagar por atualização, e quanto desse valor é para retraduzir conteúdo que não mudou?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se as respostas forem incómodas, não é o único. A maioria das empresas não descobre a lacuna até que ela cause um problema real: uma questão de conformidade, uma implantação malfeita, um novo contratado que passou duas semanas seguindo instruções desatualizadas.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;O conhecimento multilingue não é uma coisa boa de se ter. Para qualquer empresa que opere além-fronteiras, é a base da forma como as equipas se alinham, tomam decisões e enviam. A questão é se a sua plataforma de documentação o trata dessa forma.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cada idioma merece ser um cidadão de primeira classe na sua base de conhecimento. Não uma cópia. Não uma sombra. Um documento real, mantido e confiável.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;É isso que o Rasepi oferece. Tradução em nível de bloco, conteúdo exclusivo por idioma, rastreamento de atualização independente e uma redução de 94% nos custos de tradução. Tudo automático. Tudo desde o primeiro dia.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rasepi.com/#multilingual&quot;&gt;Veja a publicação multilingue em ação →&lt;/a&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="multilingual" />
    <category term="localisation" />
    <category term="documentation" />
  </entry>
  <entry>
    <title>Atualização de conteúdo, parte 2: além das datas de validade</title>
    <link href="https://rasepi.com/pt/blog/expiry-dates-are-just-not-enough/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/expiry-dates-are-just-not-enough/</id>
    <updated>2026-03-18T00:00:00Z</updated>
    <summary>As datas de validade resolvem a responsabilidade. Mas um documento pode ficar obsoleto de centenas de maneiras entre as revisões. A Parte 2 explica como a monitorização contínua da atualidade preenche esta lacuna.</summary>
    <content type="html">&lt;p&gt;*Esta é a Parte 2 da nossa série de atualização de conteúdos. &lt;a href=&quot;https://rasepi.com/pt/blog/why-freshness-matters-more-than-ever/&quot;&gt;A Parte 1&lt;/a&gt; aborda a razão pela qual a atualidade é importante e o que significa realmente. Esta publicação continua de onde parou: porque é que as datas de validade não são suficientes e o que é a monitorização contínua.&lt;/p&gt;
&lt;p&gt;Digamos que faz a coisa responsável. Cada documento na sua wiki tem uma data de revisão. Seis meses após a criação, talvez doze para material de referência estável. Quando a data chega, o proprietário recebe uma notificação: reveja isto ou será assinalado.&lt;/p&gt;
&lt;p&gt;Isso é melhor do que a maioria das empresas faz. A maioria das empresas não faz nada. O documento fica lá, a deteriorar-se lentamente, e ninguém repara até que alguém siga as instruções e algo se estrague.&lt;/p&gt;
&lt;p&gt;Mas aqui está a verdade incómoda: **Já vi documentos ficarem perigosamente obsoletos dias depois da sua última revisão, e uma data de revisão não o detecta.&lt;/p&gt;
&lt;h2&gt;O que é que as datas de validade realmente resolvem&lt;/h2&gt;
&lt;p&gt;As datas de validade resolvem o problema da responsabilidade. Elas respondem à pergunta: &lt;em&gt;&amp;quot;Quem é responsável por confirmar que isto ainda está correto, e quando?&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Isso é verdadeiramente valioso. Sem isso, a documentação entra naquilo a que chamamos o vazio de propriedade, um estado em que todos assumem que alguém a está a manter, por isso ninguém o faz. Definir uma data de revisão atribui a uma única pessoa uma única obrigação numa data específica. Simples. Claro. Eficaz.&lt;/p&gt;
&lt;p&gt;Eis como são as datas de expiração na prática:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um documento é criado com uma data de revisão de 90 dias&lt;/li&gt;
&lt;li&gt;14 dias antes da data de expiração, o proprietário é notificado&lt;/li&gt;
&lt;li&gt;Na data de expiração, o documento é assinalado como &amp;quot;necessita de revisão&amp;quot;&lt;/li&gt;
&lt;li&gt;O proprietário revê, confirma que ainda está correto e prolonga a data&lt;/li&gt;
&lt;li&gt;Ou actualiza-o, ou reatribui-o, ou arquiva-o&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este é um sistema sólido. Detecta a deterioração lenta, o documento em que ninguém pensou durante um ano. Cria uma cadência regular de revisão. Torna a propriedade visível.&lt;/p&gt;
&lt;p&gt;**Mas tem um ponto cego do tamanho de um continente.&lt;/p&gt;
&lt;h2&gt;O que as datas de expiração perdem&lt;/h2&gt;
&lt;p&gt;Entre datas de revisão, um documento vive numa caixa negra. Reviu-o a 15 de janeiro. A próxima revisão é a 15 de abril. No dia 3 de fevereiro, qualquer uma destas coisas pode acontecer:&lt;/p&gt;
&lt;h3&gt;Os links quebram silenciosamente&lt;/h3&gt;
&lt;p&gt;Um URL externo que você referenciou retorna um 404. Um link interno aponta para um documento que foi arquivado. Um repositório de código foi renomeado e todos os links do GitHub no seu documento estão agora mortos. O seu documento ainda está bem. A data de expiração é só daqui a dois meses. Ninguém sabe que os links estão quebrados.&lt;/p&gt;
&lt;h3&gt;Alterações de conteúdo relacionadas&lt;/h3&gt;
&lt;p&gt;Você escreveu um guia de implantação que faz referência ao seu documento de arquitetura. Em fevereiro, alguém reescreve completamente o documento de arquitetura. Novos padrões, nova infraestrutura, novas convenções. Seu guia de implantação ainda faz referência à arquitetura antiga. Ainda não está tecnicamente errado, mas está à deriva. Quando chegar a data da revisão, a lacuna pode ser significativa.&lt;/p&gt;
&lt;h3&gt;O número de leitores cai para zero&lt;/h3&gt;
&lt;p&gt;O seu documento costumava ser lido por 40 pessoas por mês. Depois, um processo mudou e já ninguém precisa dele, mas também ninguém o arquivou. Fica nos resultados de pesquisa, ocupando espaço, ocasionalmente confundindo um novo contratado que não sabe que é irrelevante. A data de expiração não se preocupa com os leitores. Vai enviar um ping para o proprietário na data prevista, independentemente disso.&lt;/p&gt;
&lt;h3&gt;As traduções ficam para trás&lt;/h3&gt;
&lt;p&gt;A fonte em inglês foi actualizada a 10 de fevereiro. As traduções em francês, alemão e japonês estão agora desatualizadas. Mas a data de expiração dessas versões traduzidas é apenas em maio. Durante três meses, as equipas não inglesas estão a ler conteúdos desactualizados e não o sabem.&lt;/p&gt;
&lt;h3&gt;Leitores sinalizam problemas&lt;/h3&gt;
&lt;p&gt;Um leitor deixa um comentário: &amp;quot;O passo 3 já não funciona, o sinalizador CLI foi descontinuado.&amp;quot; Esse comentário fica lá. A data de expiração ainda está a semanas de distância. A próxima pessoa que ler o documento pode não ver o comentário. A pessoa seguinte não verá de certeza.&lt;/p&gt;
&lt;p&gt;**A expiração é um ponto de controlo programado. Estes são eventos não programados. O intervalo entre os dois é onde a documentação obsoleta causa mais danos.&lt;/p&gt;
&lt;h2&gt;Atualidade: monitorização contínua&lt;/h2&gt;
&lt;p&gt;A pontuação de frescura preenche a lacuna que as datas de expiração deixam em aberto. Em vez de verificar a saúde de um documento uma vez a cada 90 dias, o Freshness monitoriza-o continuamente. Todos os dias, em segundo plano, sem que ninguém precise de fazer nada.&lt;/p&gt;
&lt;p&gt;Eis como funciona no Rasepi:&lt;/p&gt;
&lt;p&gt;Cada documento recebe uma pontuação de frescura em tempo real de 0 a 100, calculada a partir de vários sinais:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sinal&lt;/th&gt;
&lt;th&gt;O que detecta&lt;/th&gt;
&lt;th&gt;Porque é importante&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Saúde do link**&lt;/td&gt;
&lt;td&gt;URLs quebrados, redireccionados ou inacessíveis&lt;/td&gt;
&lt;td&gt;Os links quebrados corroem a confiança e desperdiçam tempo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estado da revisão**&lt;/td&gt;
&lt;td&gt;Se o documento foi revisto dentro do prazo&lt;/td&gt;
&lt;td&gt;A verificação de base da responsabilidade&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tendências de leitura**&lt;/td&gt;
&lt;td&gt;Se alguém está realmente a ler este documento&lt;/td&gt;
&lt;td&gt;Um baixo número de leitores sugere que o documento pode ser irrelevante&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quando o documento foi modificado pela última vez em relação ao conteúdo relacionado&lt;/td&gt;
&lt;td&gt;Detecta desvios em relação à base de conhecimento circundante&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alinhamento da tradução**&lt;/td&gt;
&lt;td&gt;Se todas as versões linguísticas são actuais&lt;/td&gt;
&lt;td&gt;Traduções obsoletas significam que as equipas de outros mercados trabalham com informação antiga&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Se os leitores relataram problemas&lt;/td&gt;
&lt;td&gt;Deteção de desatualização por crowdsourcing&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Referências cruzadas**&lt;/td&gt;
&lt;td&gt;Se os documentos a que este documento está ligado estão eles próprios desactualizados&lt;/td&gt;
&lt;td&gt;A desatualização é contagiosa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cada sinal contribui para a pontuação global. Um documento pode perder pontos de atualidade devido a um link quebrado hoje, mesmo que a sua data de revisão seja só daqui a semanas. É esse o objetivo.&lt;/p&gt;
&lt;h2&gt;Como os dois funcionam em conjunto&lt;/h2&gt;
&lt;p&gt;A expiração e a atualização não são abordagens concorrentes. São camadas complementares:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As datas de validade&lt;/strong&gt; são a camada de governação. Criam uma cadência regular de revisão humana. Alguém tem de olhar para este documento num determinado horário e confirmar que ainda está correto. Isto permite verificar o que a automatização não consegue: se o &lt;em&gt;conteúdo&lt;/em&gt; ainda está correto, se os conselhos ainda são sólidos, se o processo que descreve ainda reflecte a realidade.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A pontuação de atualidade&lt;/strong&gt; é a camada de monitorização. Apanha tudo entre as datas de revisão: as ligações quebradas, os desvios de tradução, os documentos abandonados, a deterioração contextual que acontece quando o mundo se move e um documento não.&lt;/p&gt;
&lt;p&gt;Juntos, eles criam um sistema onde:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cada documento é revisto por um humano num horário regular (expiração)&lt;/li&gt;
&lt;li&gt;Entre revisões, sinais automatizados detectam os problemas à medida que vão surgindo (atualidade)&lt;/li&gt;
&lt;li&gt;Ambos os sistemas alimentam uma única pontuação de confiança que todos podem ver&lt;/li&gt;
&lt;li&gt;Essa pontuação afecta a forma como o documento é classificado na pesquisa e se as ferramentas de IA o utilizam como fonte&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;O impacto da pontuação&lt;/h2&gt;
&lt;p&gt;É aqui que as coisas se tornam práticas. No Rasepi, a pontuação de frescura de um documento afecta diretamente a sua visibilidade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pontuação 80-100:** Visibilidade total. Aparece normalmente nos resultados da pesquisa. Elegível como fonte de respostas de IA. Sem sinalizações.&lt;/li&gt;
&lt;li&gt;Pontuação 50-79:** Visibilidade reduzida. Aparece na pesquisa com um indicador de inatividade. As ferramentas de IA podem retirar-lhe a prioridade como fonte. O proprietário é notificado.&lt;/li&gt;
&lt;li&gt;Pontuação inferior a 50:** Sinalizada. Deslocado para baixo nos resultados de pesquisa de forma significativa. Excluído totalmente das respostas de IA. O proprietário recebe uma notificação urgente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Isto cria um ciclo de feedback. Quando a pontuação de um documento desce, o proprietário é pressionado a corrigi-lo, não porque chegou uma data arbitrária, mas porque algo mudou efetivamente. O link quebrado, a tradução obsoleta, o declínio de leitores, são sinais reais que exigem atenção agora, não em seis semanas.&lt;/p&gt;
&lt;h2&gt;Um exemplo prático&lt;/h2&gt;
&lt;p&gt;Vamos analisar um cenário:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;março 1:&lt;/strong&gt; O seu &amp;quot;Manual de resposta a incidentes&amp;quot; tem uma pontuação de 92. Foi revisto há duas semanas, todas as ligações são válidas, o número de leitores é elevado e as quatro versões linguísticas estão actualizadas.&lt;/p&gt;
&lt;p&gt;**8 de março: Alguém reestruturou a página de status de engenharia. Três URLs no manual agora redireccionam. A pontuação de atualidade desce para 78. O proprietário recebe uma notificação: &amp;quot;3 links quebrados detectados.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;março 10:&lt;/strong&gt; O proprietário corrige os links. A pontuação recupera para 89.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;março 15:&lt;/strong&gt; A versão inglesa é actualizada com um novo caminho de escalonamento. As traduções francesa e alemã estão agora obsoletas (incompatibilidade de hash de conteúdo). A pontuação cai para 74.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;março 17:&lt;/strong&gt; As traduções são actualizadas. A pontuação volta a ser 91.&lt;/p&gt;
&lt;p&gt;**20 de março: Os dados de leitura mostram que a versão japonesa não é acedida há 30 dias. A pontuação desce para 86. Um sinal subtil, mas registado.&lt;/p&gt;
&lt;p&gt;**1 de abril: Chega a data prevista para a revisão. O proprietário revê o conteúdo, confirma que está correto e prolonga a expiração até 1 de julho. A pontuação mantém-se em 86 porque o sinal dos leitores ainda está presente.&lt;/p&gt;
&lt;p&gt;Em nenhum momento a equipa esperou por uma data de revisão para detetar um problema. O sistema de atualidade assinalou os problemas em poucos dias. A data de revisão forneceu o ponto de controlo da governação. Ambas as camadas estão a fazer o seu trabalho.&lt;/p&gt;
&lt;h2&gt;Porque é que &amp;quot;definir uma data de revisão&amp;quot; já não é suficiente&lt;/h2&gt;
&lt;p&gt;Há cinco anos atrás, as datas de expiração poderiam ser suficientes. A documentação era lida por pessoas e estas podiam fazer juízos de valor. Se um documento parecesse um pouco estranho, as pessoas perguntavam por ele.&lt;/p&gt;
&lt;p&gt;Atualmente, a documentação é uma infraestrutura. Alimenta as ferramentas de IA, a automatização da integração, os sistemas de conformidade e os motores de pesquisa que apresentam resultados sem contexto. Estes sistemas não fazem juízos de valor. Eles consomem o conteúdo como ele é e o redistribuem em escala.&lt;/p&gt;
&lt;p&gt;Um documento com links quebrados e traduções obsoletas que ainda tem três semanas até a data de revisão pode causar muitos danos nessas três semanas, especialmente se um assistente de IA estiver fornecendo respostas com confiança com base nele.&lt;/p&gt;
&lt;p&gt;**As datas de validade são a abordagem mínima viável para a governação da documentação. A pontuação de frescura é o que é necessário quando a documentação é consumida por sistemas que não conseguem pensar por si próprios.&lt;/p&gt;
&lt;h2&gt;Começar&lt;/h2&gt;
&lt;p&gt;Se já tem datas de validade nos seus documentos (ainda bem para si, a sério, a maioria das equipas nem sequer faz isso), eis como colocar a frescura em camadas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**Comece a monitorizar as hiperligações. Faça uma verificação de hiperligações quebradas nos seus 50 documentos principais. O número irá provavelmente surpreender-te.&lt;/li&gt;
&lt;li&gt;**Se tiver documentos multilingues, compare as datas de última edição entre a fonte e as traduções. Quantos estão mais de um mês atrasados?&lt;/li&gt;
&lt;li&gt;**Veja o número de leitores. Quais os documentos que não recebem qualquer tráfego? Ainda são necessários ou devem ser arquivados?&lt;/li&gt;
&lt;li&gt;**Fale com a sua equipa de IA. Se tiver um assistente de IA interno, pergunte-lhe quais os documentos que estão a ser obtidos. Depois, verifique a atualidade desses documentos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;É provável que descubra que os seus documentos tecnicamente não expirados têm muitos problemas que as datas de expiração nunca irão detetar.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;As datas de validade dizem-lhe se alguém verificou um documento recentemente. A frescura diz-lhe se o documento está realmente saudável neste momento. Um é um evento de calendário. O outro é um sinal vivo.&lt;/p&gt;
&lt;p&gt;Precisa de ambos. Mas se só tiver datas de validade, está a voar às cegas entre os pontos de controlo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Um documento não se torna obsoleto na sua data de revisão. Torna-se obsoleto no momento em que algo muda e ninguém dá por isso. A pontuação de frescura é notada.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O Rasepi combina datas de expiração obrigatórias com monitorização contínua da atualidade. Cada documento ganha ou perde a sua pontuação de confiança, em tempo real. Sem esperas, sem pontos cegos, sem surpresas na altura da revisão.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rasepi.com/#freshness&quot;&gt;Veja como funciona a pontuação de frescura →&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Esta é a Parte 2 de uma série de duas partes. Se ainda não a leu, comece pela &lt;a href=&quot;https://rasepi.com/pt/blog/why-freshness-matters-more-than-ever/&quot;&gt;Parte 1: A métrica que a sua equipa não está a seguir&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="freshness" />
    <category term="expiry" />
    <category term="documentation" />
  </entry>
  <entry>
    <title>Atualidade do conteúdo, Parte 1: A métrica que a sua equipa não está a monitorizar</title>
    <link href="https://rasepi.com/pt/blog/why-freshness-matters-more-than-ever/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/why-freshness-matters-more-than-ever/</id>
    <updated>2026-03-16T00:00:00Z</updated>
    <summary>A sua documentação pode estar tecnicamente correta hoje. Mas daqui a seis meses, quem é que verifica? A atualidade está prestes a tornar-se o sinal mais importante na sua base de conhecimentos.</summary>
    <content type="html">&lt;p&gt;Há um momento que todas as equipas de engenharia já viveram. Alguém encontra um documento no wiki interno, segue as instruções e algo quebra. A pessoa envia uma mensagem para o canal: &lt;em&gt;&amp;quot;Isto ainda está correto?&amp;quot;&lt;/em&gt; Ninguém sabe. A pessoa que o escreveu saiu há oito meses. O documento diz que foi editado pela última vez em 2024.&lt;/p&gt;
&lt;p&gt;Este é o problema da atualidade. E está a piorar.&lt;/p&gt;
&lt;h2&gt;O contrato antigo está a acabar&lt;/h2&gt;
&lt;p&gt;Durante muito tempo, a documentação tinha um contrato implícito: alguém a escrevia, todos confiavam nela e, ocasionalmente, alguém a actualizava. Talvez. Esse contrato funcionava, por pouco que fosse, quando os documentos eram consumidos apenas por pessoas que podiam fazer juízos de valor. Se um guia de configuração parecesse um pouco estranho, um engenheiro sénior adaptava-se rapidamente.&lt;/p&gt;
&lt;p&gt;Mas esse mundo acabou. Atualmente, a sua documentação não é lida apenas por humanos. É consumida por ferramentas de IA, chatbots internos, automação de integração e sistemas de pesquisa que tratam cada palavra como uma verdade equivalente. Um assistente de IA não olha para um documento e pensa &lt;em&gt;&amp;quot;hmm, isto parece um pouco antiquado.&amp;quot;&lt;/em&gt; Lê o texto, processa-o como um facto e serve-o com total confiança.&lt;/p&gt;
&lt;p&gt;**Documentação desactualizada mais IA é igual a respostas erradas com confiança e em grande escala.&lt;/p&gt;
&lt;h2&gt;O que significa realmente a atualidade&lt;/h2&gt;
&lt;p&gt;Frescura não é apenas &amp;quot;quando foi editado pela última vez&amp;quot;. Um documento pode ter sido editado ontem e ainda fazer referência a uma API obsoleta. A verdadeira atualidade é um sinal composto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Estado da revisão.&lt;/strong&gt; Alguém confirmou explicitamente que isto ainda está correto?&lt;/li&gt;
&lt;li&gt;Os URLs dentro do documento ainda estão a ser resolvidos?&lt;/li&gt;
&lt;li&gt;Leitores: alguém está realmente a usar isto, ou foi abandonado?&lt;/li&gt;
&lt;li&gt;Os documentos relacionados mudaram enquanto este permaneceu o mesmo?&lt;/li&gt;
&lt;li&gt;Alinhamento da tradução: se este documento existe em cinco línguas, todas elas estão actualizadas?&lt;/li&gt;
&lt;li&gt;Sinais da comunidade: os leitores assinalaram-no como desatualizado?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada um destes indicadores diz-lhe algo diferente. Juntos, dão-lhe uma pontuação de confiança: um único número que representa a confiança que deve depositar num conteúdo neste momento.&lt;/p&gt;
&lt;h2&gt;Porque é que isto é importante agora, especificamente&lt;/h2&gt;
&lt;p&gt;Três factores convergiram para tornar a atualidade urgente:&lt;/p&gt;
&lt;h3&gt;1. A IA está a consumir a sua base de conhecimentos&lt;/h3&gt;
&lt;p&gt;Se você implantou um sistema RAG interno, usa o Copilot em seu IDE ou tem um assistente de IA respondendo a perguntas de seus documentos, a qualidade do material de origem determina diretamente a qualidade da saída. Nunca foi tão literal o termo &amp;quot;lixo dentro, lixo fora&amp;quot;.&lt;/p&gt;
&lt;p&gt;Quando um programador pergunta ao seu assistente de IA &amp;quot;como faço para implementar no staging?&amp;quot; e este responde utilizando um runbook com dois anos que faz referência a uma infraestrutura que já migrou, o custo não é apenas uma resposta errada. É a perda de confiança em todo o sistema.&lt;/p&gt;
&lt;h3&gt;2. As equipas estão mais distribuídas do que nunca&lt;/h3&gt;
&lt;p&gt;Uma equipa em Berlim, outra em São Paulo, uma terceira em Tóquio. Todos a ler a mesma documentação, muitas vezes em línguas diferentes. Quando a fonte em inglês fica obsoleta, todas as traduções construídas em cima dela também ficam obsoletas, mas ninguém nota porque as traduções são mantidas separadamente, se é que são mantidas.&lt;/p&gt;
&lt;h3&gt;3. A pressão da conformidade e da auditoria está a aumentar&lt;/h3&gt;
&lt;p&gt;Os setores regulamentados estão começando a perguntar: &amp;quot;Você pode provar que essa documentação estava atualizada no momento em que foi referenciada?&amp;quot; Se a sua resposta for &amp;quot;bem, provavelmente alguém a verificou&amp;quot;, isso não vai aguentar.&lt;/p&gt;
&lt;h2&gt;Como é uma abordagem que dá prioridade à atualidade&lt;/h2&gt;
&lt;p&gt;A ideia central é simples: &lt;strong&gt;cada documento deve ganhar continuamente o direito de ser confiável.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Isto significa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;**Todos os documentos têm uma data de expiração quando são criados. Sem excepções. Quando a data chega, o proprietário é notificado e o documento é assinalado até que alguém o volte a aprovar explicitamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Em segundo plano, o sistema verifica continuamente se há links quebrados, tendências de leitura e alterações contextuais. Estes sinais alimentam uma pontuação em tempo real que é actualizada sem que ninguém tenha de fazer nada.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A atualidade afecta a visibilidade.&lt;/strong&gt; Este é o mecanismo principal. Um documento com uma pontuação elevada aparece no topo dos resultados de pesquisa e é elegível para ser utilizado como fonte de respostas de IA. Um documento com pontuação baixa desce na classificação. Se ficar abaixo de um limiar, é totalmente excluído das respostas da IA.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Transparência: todos podem ver porque é que um documento obteve a pontuação que obteve. Links quebrados, revisão atrasada, baixo número de leitores, os sinais são visíveis, não estão escondidos num relatório de backend que ninguém lê.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;O custo de não fazer nada&lt;/h2&gt;
&lt;p&gt;Eis o que acontece quando não se controla a atualidade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Os novos contratados seguem documentos de integração desactualizados e passam a primeira semana confusos&lt;/li&gt;
&lt;li&gt;As ferramentas de IA dão respostas erradas e ninguém percebe porquê&lt;/li&gt;
&lt;li&gt;Os documentos de conformidade desatualizam-se silenciosamente e criam riscos de auditoria&lt;/li&gt;
&lt;li&gt;As traduções ficam dessincronizadas e as equipas de diferentes regiões trabalham com versões diferentes da realidade&lt;/li&gt;
&lt;li&gt;Os engenheiros deixam de confiar inteiramente no wiki e recorrem às mensagens do Slack, o que cria o seu próprio silo de conhecimento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O custo composto da documentação obsoleta é enorme, mas é invisível até que algo se estrague.&lt;/p&gt;
&lt;h2&gt;Um ponto de partida prático&lt;/h2&gt;
&lt;p&gt;Não precisa de rever tudo de uma vez. Comece com isto:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Audite os seus 20 documentos mais lidos&lt;/strong&gt; Quando foram revistos pela última vez? As hiperligações ainda são válidas? O conteúdo ainda é exato?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Defina datas de revisão.&lt;/strong&gt; Mesmo que não faça mais nada, colocar uma data de &amp;quot;revisão por&amp;quot; em cada documento cria responsabilidade.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Se tiver um assistente de IA interno, veja quais os documentos que ele está a obter. Esses documentos são actuais?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Torne a atualidade visível. Coloque a pontuação onde as pessoas a possam ver, junto ao título do documento, nos resultados da pesquisa, na barra lateral. A visibilidade cria pressão para a manter.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;A atualidade da documentação não é uma caraterística. É uma mudança fundamental na forma como pensamos sobre o conhecimento organizacional. Num mundo em que as ferramentas de IA consomem e redistribuem os seus documentos em escala, a questão não é se pode dar-se ao luxo de se preocupar com a atualidade. É se pode dar-se ao luxo de não o fazer.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Cada documento deveria ter de provar que ainda vale a pena confiar nele. Não uma vez. Continuamente.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;É isso que estamos a construir na Rasepi. Uma plataforma onde a atualidade não é uma reflexão tardia. É a base sobre a qual tudo o resto é construído. Aplicação de revisões, pontuação de saúde em tempo real, pesquisa ponderada por frescura e respostas de IA que apenas utilizam fontes em que pode confiar.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rasepi.com/#freshness&quot;&gt;Veja como funciona →&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Esta é a Parte 1 de uma série de duas partes. Em &lt;a href=&quot;https://rasepi.com/pt/blog/expiry-dates-are-just-not-enough/&quot;&gt;Parte 2: Para além das datas de validade&lt;/a&gt;, exploramos a forma como a monitorização contínua da frescura preenche as lacunas que as datas de revisão deixam em aberto.&lt;/em&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="freshness" />
    <category term="ai" />
    <category term="documentation" />
  </entry>
  <entry>
    <title>Ensine a sua IA a ignorar documentação obsoleta</title>
    <link href="https://rasepi.com/pt/blog/ai-just-fetches-everything-stop-that/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/ai-just-fetches-everything-stop-that/</id>
    <updated>2026-03-12T00:00:00Z</updated>
    <summary>O seu assistente de IA trata um documento revisto na semana passada da mesma forma que um documento em que ninguém tocou durante dois anos. A governação de conteúdos resolve isso.</summary>
    <content type="html">&lt;p&gt;Eis o que acontece quando implementa um assistente de IA no topo da sua base de conhecimentos interna:&lt;/p&gt;
&lt;p&gt;Um novo engenheiro pergunta: &amp;quot;Como é que configuro o ambiente de teste?&amp;quot;&lt;/p&gt;
&lt;p&gt;A IA pesquisa a sua documentação, encontra três documentos relevantes, sintetiza uma resposta e apresenta-a com confiança. O engenheiro segue as instruções. Os dois primeiros passos funcionam. O terceiro passo faz referência a uma ferramenta CLI que foi descontinuada há seis meses. O quarto passo descreve uma configuração de infraestrutura que foi substituída durante uma migração que ninguém documentou.&lt;/p&gt;
&lt;p&gt;O engenheiro está preso. Envia uma mensagem para o canal da equipa. Alguém diz: &amp;quot;Oh, esse documento é muito antigo&amp;quot;. A IA não sabia disso. Não pode saber. Apenas foi buscar tudo o que encontrou e apresentou-o como verdade.&lt;/p&gt;
&lt;p&gt;**Este é o comportamento por defeito de todos os sistemas RAG, de todas as ferramentas de pesquisa de IA e de todos os assistentes com LLM que já utilizou em documentos internos. Eles vão buscar tudo. Não fazem discriminações. Não conseguem distinguir o que é recente do que é obsoleto.&lt;/p&gt;
&lt;p&gt;E isso está a destruir a confiança nas ferramentas de IA mais rapidamente do que essas ferramentas a conseguem construir.&lt;/p&gt;
&lt;h2&gt;Porque é que os assistentes de IA são cegos à qualidade&lt;/h2&gt;
&lt;p&gt;Os grandes modelos de linguagem e os sistemas de geração aumentada de recuperação (RAG) funcionam encontrando texto que é semanticamente relevante para uma consulta e, em seguida, utilizando esse texto para gerar uma resposta. A correspondência de relevância é normalmente excelente. A pesquisa vetorial e os embeddings são genuinamente bons a encontrar conteúdos relacionados com uma pergunta.&lt;/p&gt;
&lt;p&gt;Mas relevância não é o mesmo que fiabilidade.&lt;/p&gt;
&lt;p&gt;Um documento escrito em 2023 sobre o seu processo de implantação do Kubernetes é altamente relevante para a pergunta &amp;quot;como faço para implantar na produção?&amp;quot; Também é completamente errado se você migrou para uma plataforma diferente em 2024. A IA vê texto relevante. Ela não vê um documento que está 18 meses desatualizado, com links quebrados e zero leitores.&lt;/p&gt;
&lt;p&gt;A maioria dos sistemas de IA tem exatamente um sinal de classificação: &lt;strong&gt;semelhança semântica com a consulta.&lt;/strong&gt; É só isso. Eles não verificam:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quando é que este documento foi revisto pela última vez?&lt;/li&gt;
&lt;li&gt;As hiperligações nele contidas ainda são válidas?&lt;/li&gt;
&lt;li&gt;Alguém está realmente a ler este documento?&lt;/li&gt;
&lt;li&gt;O conteúdo foi assinalado pelos leitores como desatualizado?&lt;/li&gt;
&lt;li&gt;Trata-se de um rascunho, de uma página arquivada ou de um documento atual?&lt;/li&gt;
&lt;li&gt;Se este documento existir em várias línguas, as traduções estão actualizadas?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sem estes sinais, a IA está a fazer a correspondência de palavras-chave com passos adicionais. Uma correspondência de palavras-chave impressionante, sim, mas fundamentalmente incapaz de lhe dizer se a resposta que está a dar se baseia em conteúdos em que pode confiar.&lt;/p&gt;
&lt;h2&gt;O problema da confiança&lt;/h2&gt;
&lt;p&gt;Isto não seria tão perigoso se as ferramentas de IA apresentassem respostas incertas com as devidas advertências. Mas não o fazem. Não é assim que os LLMs funcionam. Geram textos fluentes e confiantes, independentemente de o material de origem ser atual ou antigo.&lt;/p&gt;
&lt;p&gt;Um ser humano que leia um artigo wiki pode reparar que parece datado. O layout da página é antigo. As capturas de ecrã mostram uma interface que já não existe. Há um comentário no final a dizer &amp;quot;isto está desatualizado&amp;quot;. Um ser humano pode fazer juízos de valor.&lt;/p&gt;
&lt;p&gt;Uma IA não pode. Lê o texto, processa-o como se fosse equivalente a qualquer outro texto e gera uma resposta que soa a autoridade. O utilizador, especialmente um novo contratado que não sabe como é o processo atual, não tem motivos para duvidar.&lt;/p&gt;
&lt;p&gt;**Quanto mais confiante a IA parecer, mais danos causa o material de origem obsoleto.&lt;/p&gt;
&lt;h2&gt;O que a IA realmente precisa&lt;/h2&gt;
&lt;p&gt;Para que um assistente de IA possa dar respostas fiáveis a partir da sua base de conhecimentos, precisa de mais do que texto e inserções. Precisa de metadados que lhe digam quais os documentos que vale a pena utilizar como fontes. Especificamente:&lt;/p&gt;
&lt;h3&gt;1. Pontuação de frescura&lt;/h3&gt;
&lt;p&gt;Um sinal numérico que representa o quão saudável um documento está neste momento. Não quando foi editado pela última vez, isso é apenas uma entrada. Uma verdadeira pontuação de frescura combina o estado da revisão, a saúde da ligação, o número de leitores, o alinhamento da tradução e a deriva contextual num único número.&lt;/p&gt;
&lt;p&gt;Quando um documento tem uma pontuação acima de um limite (digamos, 70 em 100), é elegível para ser utilizado como fonte de respostas de IA. Abaixo desse limiar, é excluído. Sem excepções.&lt;/p&gt;
&lt;p&gt;Este mecanismo único elimina a classe mais perigosa de erros de IA: respostas erradas com confiança baseadas em fontes obsoletas.&lt;/p&gt;
&lt;h3&gt;2. Status de expiração&lt;/h3&gt;
&lt;p&gt;Este documento está atualmente dentro da sua janela de revisão, ou expirou sem nova aprovação? Um documento expirado deve ser fortemente despriorizado ou totalmente excluído, independentemente da relevância que o seu conteúdo possa ter para a consulta.&lt;/p&gt;
&lt;p&gt;No Rasepi, os documentos expirados são assinalados e as suas pontuações de atualidade baixam automaticamente. Um sistema de IA que consulte a base de conhecimentos pode ver este estado e agir em conformidade.&lt;/p&gt;
&lt;h3&gt;3. Etiquetas de classificação&lt;/h3&gt;
&lt;p&gt;Nem todos os documentos têm o mesmo objetivo. Um rascunho não deve ser usado como fonte. Um documento arquivado não deve aparecer nas respostas de IA. Um documento apenas interno não deve aparecer em consultas de ferramentas externas.&lt;/p&gt;
&lt;p&gt;As etiquetas de classificação dão à IA um contexto sobre o tipo de documento que está a analisar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Publicado&lt;/strong&gt; Atual, aprovado, seguro para utilização&lt;/li&gt;
&lt;li&gt;Rascunho: trabalho em curso, não deve ser citado&lt;/li&gt;
&lt;li&gt;Em revisão.** Expiração acionada, a aguardar reaprovação&lt;/li&gt;
&lt;li&gt;Arquivado.** Já não está ativo, mantido apenas para referência&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interno&lt;/strong&gt; / &lt;strong&gt;Externo&lt;/strong&gt; Controla o âmbito da visibilidade&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quando um assistente de IA processa uma consulta, pode filtrar por classificação antes mesmo de analisar a relevância do conteúdo. Um projeto de documento que corresponda perfeitamente à consulta nunca deve ser apresentado como resposta.&lt;/p&gt;
&lt;h3&gt;4. Sinais ao nível da língua&lt;/h3&gt;
&lt;p&gt;Se a sua base de conhecimentos for multilingue, a IA precisa de saber se a versão de onde está a ser retirada é atual. Uma tradução francesa com três meses de atraso em relação à fonte inglesa é tecnicamente relevante em francês, mas a informação pode estar desactualizada.&lt;/p&gt;
&lt;p&gt;O Rasepi monitoriza a atualidade ao nível da língua. Cada tradução tem a sua própria pontuação com base na alteração dos blocos de origem desde a última atualização da tradução. Uma IA que consulte a base de conhecimentos em francês pode ver que a versão francesa de um documento está desactualizada e..:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recuar para a fonte inglesa (que é atual)&lt;/li&gt;
&lt;li&gt;Incluir uma advertência de que a versão francesa pode estar desactualizada&lt;/li&gt;
&lt;li&gt;Excluir totalmente o documento&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Sinais do leitor&lt;/h3&gt;
&lt;p&gt;Se vários leitores tiverem assinalado um documento como desatualizado, esse sinal deve reduzir o peso do documento nas respostas da IA. Os sinais de qualidade de crowdsourcing são ruidosos, mas são valiosos, especialmente quando combinados com outras métricas de atualidade.&lt;/p&gt;
&lt;h2&gt;Como isto funciona na prática&lt;/h2&gt;
&lt;p&gt;Vamos ver o que acontece quando um assistente de IA consulta uma base de conhecimento Rasepi:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Query:&lt;/strong&gt; &amp;quot;Qual é o nosso processo para lidar com um incidente P1 às 2 da manhã?&amp;quot;&lt;/p&gt;
&lt;p&gt;**Passo 1: Recuperação com filtragem: O sistema procura documentos semanticamente relevantes. Antes de classificar, filtra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Documentos com pontuação de frescura inferior ao limiar&lt;/li&gt;
&lt;li&gt;Documentos expirados que não tenham sido reaprovados&lt;/li&gt;
&lt;li&gt;Rascunhos e conteúdos arquivados&lt;/li&gt;
&lt;li&gt;Documentos cuja versão linguística é obsoleta (se a consulta estiver numa língua não primária)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**Entre os restantes documentos, aqueles com pontuações de frescura mais elevadas têm uma classificação mais elevada. Um documento com uma pontuação de 94 ultrapassa um com uma pontuação de 72, mesmo que o documento com pontuação de 72 tenha uma semelhança semântica ligeiramente superior.&lt;/p&gt;
&lt;p&gt;**A IA gera uma resposta a partir das fontes filtradas e classificadas como frescas. Cada fonte é citada com a sua pontuação de frescura visível.&lt;/p&gt;
&lt;p&gt;**Se a melhor fonte disponível tiver uma pontuação de frescura limítrofe, a IA inclui uma advertência: &lt;em&gt;&amp;quot;Nota: A fonte principal desta resposta foi revista pela última vez há 60 dias. Pode querer verificar com a equipa.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Compare isto com o comportamento predefinido: encontrar texto relevante, gerar uma resposta confiante, esperar pelo melhor.&lt;/p&gt;
&lt;h2&gt;O que acontece quando não se faz isto&lt;/h2&gt;
&lt;p&gt;As consequências dos sistemas de IA que funcionam com bases de conhecimento não filtradas são previsíveis e dispendiosas:&lt;/p&gt;
&lt;p&gt;**A utilização mais comum da IA para documentos internos é a integração. Os novos contratados, por definição, não sabem o que é atual e o que é obsoleto. Eles confiam na IA. A IA confia em tudo. Os documentos obsoletos são apresentados com confiança.&lt;/p&gt;
&lt;p&gt;**Se o seu assistente de IA fornecer orientações sobre processos regulamentares utilizando documentos desactualizados, o conselho pode não só estar errado, como também não estar em conformidade. &amp;quot;A IA disse-me para o fazer&amp;quot; não se sustenta numa auditoria.&lt;/p&gt;
&lt;p&gt;**Cada vez que a IA dá uma resposta errada, os utilizadores confiam um pouco menos nela. Após três ou quatro más experiências, deixam de a utilizar. O investimento em ferramentas de IA não tem qualquer valor porque o conteúdo subjacente não era fiável.&lt;/p&gt;
&lt;p&gt;**Quando as pessoas perdem a confiança na base de conhecimentos oficial (e na IA construída em cima dela), criam a sua própria base de conhecimentos: Mensagens do Slack, notas pessoais, conhecimento tribal partilhado em reuniões. A fragmentação que o wiki deveria evitar acontece na mesma, mas de forma diferente.&lt;/p&gt;
&lt;h2&gt;A correção está na fonte, não no modelo&lt;/h2&gt;
&lt;p&gt;Existe a tentação de resolver este problema na camada de IA: melhores avisos, pipelines RAG mais sofisticados, modelos ajustados que podem, de alguma forma, detetar a obsolescência apenas a partir do texto. Esta é a abordagem errada.&lt;/p&gt;
&lt;p&gt;A solução está na fonte. Se os seus documentos contêm metadados ricos e precisos sobre o seu estado atual (pontuação de frescura, estado de expiração, classificação, alinhamento linguístico, sinais do leitor), então qualquer sistema de IA pode utilizar esses metadados para tomar melhores decisões. Não precisa de um modelo mais inteligente. Precisa de documentos mais inteligentes.&lt;/p&gt;
&lt;p&gt;É isso que o Rasepi proporciona:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada documento tem uma pontuação de frescura** que é actualizada continuamente com base na saúde da ligação, nos leitores, no estado da revisão e muito mais&lt;/li&gt;
&lt;li&gt;Cada documento tem uma data de expiração** que acciona a revisão quando chega&lt;/li&gt;
&lt;li&gt;Cada documento tem uma classificação** (publicado, rascunho, em revisão, arquivado)&lt;/li&gt;
&lt;li&gt;Cada versão linguística tem o seu próprio sinal de atualização** para que as traduções obsoletas sejam detectadas de forma independente&lt;/li&gt;
&lt;li&gt;As bandeiras de leitor e o rastreio de referências cruzadas** acrescentam sinais de qualidade adicionais&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quando um sistema de IA consulta a base de conhecimentos do Rasepi, todos estes metadados estão disponíveis. A IA não tem de adivinhar se um documento é de confiança. O documento diz-lhe.&lt;/p&gt;
&lt;h2&gt;Um ponto de partida prático&lt;/h2&gt;
&lt;p&gt;Se tiver um assistente de IA a funcionar atualmente na sua base de conhecimentos, pode começar a avaliar o problema em 30 minutos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Faça ao seu assistente de IA 10 perguntas para as quais sabe as respostas.&lt;/strong&gt; Observe quais as respostas que utilizam fontes desactualizadas. É provável que encontre pelo menos 2-3 em cada 10 baseadas em conteúdos desactualizados.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verifique os documentos de origem.&lt;/strong&gt; Para cada resposta dada pela IA, consulte o documento de origem. Quando é que foi revisto pela última vez? As ligações são válidas? Confiarias nele se fosses tu a lê-lo?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Encontre o seu documento mais antigo e negligenciado que ainda aparece nos resultados de pesquisa. Faça à IA uma pergunta que o faça aparecer. A IA usa-o? É quase certo que sim.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**Quantas consultas por dia é que o seu assistente de IA trata? Se 20-30% das respostas se basearem em conteúdos obsoletos, qual é o custo em termos de perda de tempo, decisões erradas e perda de confiança?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;Os assistentes de IA são tão bons quanto o conteúdo em que se baseiam. Atualmente, a maioria deles trata todos os documentos da sua base de conhecimentos como igualmente válidos. Vão buscar tudo, o documento que foi revisto ontem e aquele em que ninguém tocou durante dois anos, e apresentam-no com a mesma confiança.&lt;/p&gt;
&lt;p&gt;Isso não é um problema de modelo. É um problema de qualidade dos dados. E a solução é simples: dar aos seus documentos metadados que digam às ferramentas de IA em que confiar.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;O seu assistente de IA não deve parecer confiante relativamente a uma resposta obtida a partir de um documento que ninguém reviu em 18 meses. Com os sinais corretos, não o fará.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;O Rasepi faz com que cada documento tenha a sua própria pontuação de confiança: atualidade, estado de expiração, classificação, alinhamento linguístico. As ferramentas de IA consultam a base de conhecimentos e obtêm não só o conteúdo, mas também o contexto. As fontes fiáveis vêm à superfície. As obsoletas não aparecem. É assim que a documentação baseada em IA deve funcionar.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rasepi.com/#talk-to-docs&quot;&gt;Ver como o Rasepi funciona com ferramentas de IA →&lt;/a&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="ai" />
    <category term="freshness" />
    <category term="documentation" />
  </entry>
  <entry>
    <title>Falar com os documentos é melhor do que lê-los</title>
    <link href="https://rasepi.com/pt/blog/why-talking-to-documents-feels-better-than-reading/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/why-talking-to-documents-feels-better-than-reading/</id>
    <updated>2026-03-10T00:00:00Z</updated>
    <summary>A leitura é poderosa, mas trabalhosa. A conversação é mais antiga, mais rápida e mais natural. Falar com a informação parece muitas vezes mentalmente mais leve do que ler páginas de texto.</summary>
    <content type="html">&lt;p&gt;Há uma razão para as pessoas dizerem &lt;em&gt;&amp;quot;vamos falar sobre isso&amp;quot;&lt;/em&gt; quando algo é complexo.&lt;/p&gt;
&lt;p&gt;Quando estamos a tentar compreender uma nova ideia, resolver um problema ou recordar um processo sob pressão, a conversa é muitas vezes mais fácil do que a leitura. Não porque a leitura seja má. A leitura é uma das ferramentas mais poderosas que o ser humano já desenvolveu. Mas a leitura é uma competência aprendida que se sobrepõe a algo muito mais antigo: a fala.&lt;/p&gt;
&lt;p&gt;Somos faladores muito antes de sermos leitores.&lt;/p&gt;
&lt;p&gt;Isso é mais importante do que as pessoas imaginam, especialmente agora que a maior parte do conhecimento do mundo vive em documentos, wikis, PDFs e longas páginas internas que ninguém quer abrir a menos que seja absolutamente necessário.&lt;/p&gt;
&lt;h2&gt;A leitura é aprendida. A conversação é nativa.&lt;/h2&gt;
&lt;p&gt;Os seres humanos falaram durante muito tempo antes de escreverem qualquer coisa. As crianças aprendem a compreender a linguagem falada naturalmente. A leitura requer instrução explícita, repetição e anos de prática.&lt;/p&gt;
&lt;p&gt;Mesmo para adultos altamente alfabetizados, a leitura continua a ser um ato mais deliberado do que ouvir ou falar. Exige concentração visual, atenção contínua, memória de trabalho e interpretação da estrutura na página. Está a descodificar símbolos, a analisar frases, a construir contextos e a decidir o que é importante.&lt;/p&gt;
&lt;p&gt;A conversação funciona de forma diferente. Quando a informação é transmitida de forma falada e interactiva, o cérebro tem uma experiência diferente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parece sequencial em vez de visualmente avassaladora&lt;/li&gt;
&lt;li&gt;Dá feedback e esclarecimentos imediatos&lt;/li&gt;
&lt;li&gt;Reduz a necessidade de analisar e filtrar grandes blocos de texto&lt;/li&gt;
&lt;li&gt;reflecte a forma como as pessoas já pedem ajuda na vida real&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este último ponto é muito importante. Em situações de incerteza, a maioria das pessoas não quer instintivamente ler 1500 palavras. Querem perguntar: &lt;em&gt;&amp;quot;O que é que faço a seguir?&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Falar reduz o atrito cognitivo&lt;/h2&gt;
&lt;p&gt;Um documento é estático. Contém tudo ao mesmo tempo.&lt;/p&gt;
&lt;p&gt;Isso parece útil, e muitas vezes é. Mas também cria fricção. Uma página cheia de títulos, chamadas de atenção, ligações, notas, exemplos e casos extremos obriga o leitor a decidir o que deve ignorar. Isso é cognitivamente dispendioso.&lt;/p&gt;
&lt;p&gt;Quando se fala com um sistema de informação, normalmente obtém-se a experiência oposta: relevância em primeiro lugar, detalhe em segundo.&lt;/p&gt;
&lt;p&gt;Faz-se uma pergunta. Obtém uma resposta. Depois, faz uma nova pergunta.&lt;/p&gt;
&lt;p&gt;Este padrão de interação reduz a sobrecarga mental de algumas formas importantes:&lt;/p&gt;
&lt;h3&gt;1. Reduz o espaço do problema&lt;/h3&gt;
&lt;p&gt;Um documento completo apresenta todo o cenário. Uma conversa apresenta o próximo passo útil.&lt;/p&gt;
&lt;p&gt;Quando alguém pergunta, &lt;em&gt;&amp;quot;Como é que eu integro um novo engenheiro?&amp;quot;&lt;/em&gt; normalmente não quer o manual completo imediatamente. Quer orientação. A conversa permite-lhes começar com pouco e expandir apenas quando necessário.&lt;/p&gt;
&lt;h3&gt;2. Preserva a memória de trabalho&lt;/h3&gt;
&lt;p&gt;A leitura exige que mantenha várias coisas na sua cabeça enquanto procura a parte relevante. A interação falada ou conversacional externaliza esse esforço. O sistema faz a maior parte da filtragem por si.&lt;/p&gt;
&lt;h3&gt;3. Parece socialmente familiar&lt;/h3&gt;
&lt;p&gt;Os seres humanos estão profundamente adaptados à troca de informações. Nós perguntamos. Alguém responde. Nós aperfeiçoamos. Eles esclarecem-nos. Este ciclo é uma das formas mais antigas de aprendizagem que temos.&lt;/p&gt;
&lt;p&gt;Mesmo quando o &amp;quot;alguém&amp;quot; é um sistema, a estrutura continua a parecer natural.&lt;/p&gt;
&lt;h2&gt;A leitura não é passiva. É exatamente esse o objetivo.&lt;/h2&gt;
&lt;p&gt;Uma das razões pelas quais falar pode parecer mais fácil é o facto de a leitura não ser tão fácil como as pessoas supõem. Os leitores experientes fazem com que pareça fácil, mas o processo é altamente ativo.&lt;/p&gt;
&lt;p&gt;Para ler bem, é preciso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;identificar a estrutura&lt;/li&gt;
&lt;li&gt;inferir a importância&lt;/li&gt;
&lt;li&gt;resolver ambiguidades&lt;/li&gt;
&lt;li&gt;guardar o contexto na memória&lt;/li&gt;
&lt;li&gt;ligar uma secção a outra&lt;/li&gt;
&lt;li&gt;decidir quando passar os olhos e quando abrandar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este é o verdadeiro trabalho cognitivo.&lt;/p&gt;
&lt;p&gt;Em muitas situações, esse trabalho vale a pena. A leitura aprofundada ajuda a obter nuances, precisão e uma compreensão mais alargada. Mas noutras situações, especialmente quando alguém está cansado, stressado, sobrecarregado ou apenas a tentar desbloquear, falar é muitas vezes a opção mentalmente mais leve.&lt;/p&gt;
&lt;p&gt;Isto é especialmente verdade no local de trabalho, onde as pessoas não estão normalmente a abordar a documentação em condições ideais. Estão:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a meio da tarefa&lt;/li&gt;
&lt;li&gt;interrompidas&lt;/li&gt;
&lt;li&gt;a mudar de contexto&lt;/li&gt;
&lt;li&gt;estão a tentar resolver algo rapidamente&lt;/li&gt;
&lt;li&gt;muitas vezes já ligeiramente frustrado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nesse estado, o &lt;em&gt;acesso conversacional&lt;/em&gt; à informação pode parecer dramaticamente melhor do que o acesso à primeira página.&lt;/p&gt;
&lt;h2&gt;Falar muda a relação com a informação&lt;/h2&gt;
&lt;p&gt;Há também uma dimensão emocional aqui.&lt;/p&gt;
&lt;p&gt;Os documentos podem parecer formais e distantes. Eles implicam: &lt;em&gt;leia tudo isto, compreenda-o corretamente e não perca nada de importante.&lt;/em&gt; Isto pode ser útil como material de referência, mas também pode criar hesitação.&lt;/p&gt;
&lt;p&gt;A conversa parece permissiva. Pode ser-se vago. Pode perguntar mal. Pode admitir-se a confusão. Pode dizer: &lt;em&gt;&amp;quot;Não sei bem o que procuro, mas preciso da informação sobre os pedidos de acesso.&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Isso é importante porque as pessoas muitas vezes evitam a documentação não porque não gostem da informação, mas porque não gostam do esforço e da incerteza envolvidos na procura da parte correta da mesma.&lt;/p&gt;
&lt;p&gt;Falar reduz essa barreira.&lt;/p&gt;
&lt;h2&gt;Porque é que isto é importante agora&lt;/h2&gt;
&lt;p&gt;Durante muito tempo, os documentos tinham de ser lidos porque não havia alternativa prática. A pesquisa ajudou as pessoas a encontrar páginas, mas não alterou o modelo de interação. Continuava a ser necessário abrir a página, digitalizá-la e extrair o que era necessário.&lt;/p&gt;
&lt;p&gt;Isso está a mudar.&lt;/p&gt;
&lt;p&gt;À medida que as interfaces se tornam mais conversacionais, as pessoas esperam cada vez mais que a informação responda em vez de simplesmente existir. Querem pedir o que precisam numa linguagem simples e receber algo adaptado ao momento.&lt;/p&gt;
&lt;p&gt;Isto não torna a leitura obsoleta. Altera o seu papel.&lt;/p&gt;
&lt;p&gt;A leitura torna-se a camada profunda. A conversação passa a ser a camada de acesso.&lt;/p&gt;
&lt;p&gt;Os melhores sistemas suportam ambos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;falar quando se precisa de orientação ou rapidez&lt;/li&gt;
&lt;li&gt;ler quando se precisa de profundidade, verificação ou contexto completo&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;O risco de simplificação excessiva&lt;/h2&gt;
&lt;p&gt;Há uma ressalva importante: falar com a informação só é melhor se as respostas forem fiáveis.&lt;/p&gt;
&lt;p&gt;Se uma interface de conversação der respostas parciais, enganadoras ou demasiado confiantes, a experiência torna-se pior do que a leitura, porque retira ao utilizador a capacidade de inspecionar diretamente o material de origem.&lt;/p&gt;
&lt;p&gt;Portanto, o futuro não é &amp;quot;substituir todos os documentos por voz&amp;quot;. O futuro é dar às pessoas uma forma mais humana de aceder a documentos sem perder a profundidade e a precisão que o conhecimento escrito proporciona.&lt;/p&gt;
&lt;p&gt;Esse equilíbrio é importante. A conversação é mais fácil, mas os documentos continuam a ter a estrutura duradoura, o detalhe e a responsabilidade de que as organizações necessitam.&lt;/p&gt;
&lt;h2&gt;Uma interface mais humana para o conhecimento&lt;/h2&gt;
&lt;p&gt;O ponto mais profundo é simples: as pessoas não pensam naturalmente em páginas. Pensam em perguntas, histórias, fragmentos e diálogos.&lt;/p&gt;
&lt;p&gt;Nós perguntamos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O que é que isto significa?&lt;/li&gt;
&lt;li&gt;O que é que eu faço primeiro?&lt;/li&gt;
&lt;li&gt;Qual é a parte importante?&lt;/li&gt;
&lt;li&gt;Consegues explicar isso de outra forma?&lt;/li&gt;
&lt;li&gt;O que é que mudou?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estes são movimentos de conversação, não de leitura.&lt;/p&gt;
&lt;p&gt;Por isso, quando falar com a informação parece mentalmente mais fácil do que lê-la, isso não é um sinal de preguiça intelectual. É normalmente um sinal de que a interface corresponde à forma como o cérebro prefere abordar a incerteza.&lt;/p&gt;
&lt;p&gt;A leitura continua a ser essencial. Mas, como ponto de entrada para o conhecimento, a conversa é muitas vezes melhor porque está mais próxima daquilo que somos por natureza.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Não somos leitores em primeiro lugar. Somos primeiro faladores. Os sistemas de conhecimento mais intuitivos lembrar-se-ão disso.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="voice" />
    <category term="knowledge" />
    <category term="documentation" />
  </entry>
  <entry>
    <title>Plataformas de documentação criadas para outra era</title>
    <link href="https://rasepi.com/pt/blog/why-confluence-and-notion-are-struggling-in-the-ai-era/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/why-confluence-and-notion-are-struggling-in-the-ai-era/</id>
    <updated>2026-03-08T00:00:00Z</updated>
    <summary>O Confluence e o Notion foram criados para um modelo de documentação anterior à IA. Eles podem evoluir, mas as plataformas estabelecidas carregam uma bagagem estrutural. Os sistemas mais recentes podem ser projetados para IA desde o primeiro dia.</summary>
    <content type="html">&lt;p&gt;O Confluence e o Notion não são produtos ruins. Isso precisa ser dito claramente no início.&lt;/p&gt;
&lt;p&gt;Eles tiveram sucesso por boas razões. O Confluence tornou-se o &lt;a href=&quot;https://www.atlassian.com/software/confluence&quot;&gt;local predefinido para a documentação interna&lt;/a&gt; em muitas empresas porque proporcionou às equipas um local central para escrever, organizar e partilhar conhecimentos. O Notion &lt;a href=&quot;https://www.notion.com/about&quot;&gt;conquistou as pessoas&lt;/a&gt; com flexibilidade, experiências de escrita mais limpas e uma superfície de produto mais moderna.&lt;/p&gt;
&lt;p&gt;Ambas as plataformas resolveram problemas reais na era para a qual foram criadas.&lt;/p&gt;
&lt;p&gt;O problema agora é que o mundo à sua volta mudou mais depressa do que as suas fundações.&lt;/p&gt;
&lt;p&gt;Já não estamos num mundo em que a documentação só precisa de ser escrita, armazenada e pesquisada. Estamos num mundo em que se espera cada vez mais que a documentação o seja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;legível por máquinas&lt;/li&gt;
&lt;li&gt;consciente da atualidade&lt;/li&gt;
&lt;li&gt;segura para recuperação por IA&lt;/li&gt;
&lt;li&gt;suficientemente estruturada para a automatização&lt;/li&gt;
&lt;li&gt;dinâmicas entre línguas e públicos&lt;/li&gt;
&lt;li&gt;continuamente fiável, não apenas disponível&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta é uma barreira diferente.&lt;/p&gt;
&lt;h2&gt;Foram criados para um modelo de conhecimento anterior à IA&lt;/h2&gt;
&lt;p&gt;As plataformas de documentação tradicionais foram concebidas com base num pressuposto simples: se a página existir e for pesquisável, o problema está praticamente resolvido.&lt;/p&gt;
&lt;p&gt;Isto era suficientemente bom quando o utilizador principal era um ser humano que abria uma wiki, passava os olhos pela página e fazia a sua avaliação. Nesse modelo, a função da plataforma era facilitar a criação e a navegação.&lt;/p&gt;
&lt;p&gt;A IA altera a descrição do trabalho.&lt;/p&gt;
&lt;p&gt;Agora, a plataforma não está apenas a armazenar conhecimentos para as pessoas. Está a produzir material de origem para sistemas que recuperam, classificam, resumem e respondem a perguntas automaticamente.&lt;/p&gt;
&lt;p&gt;Isto introduz novos requisitos a que as arquitecturas mais antigas não davam prioridade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Que conteúdos são fiáveis neste momento?&lt;/li&gt;
&lt;li&gt;Que páginas estão desactualizadas mas ainda são pesquisáveis?&lt;/li&gt;
&lt;li&gt;Que secções foram alteradas recentemente?&lt;/li&gt;
&lt;li&gt;Que versão linguística é a atual?&lt;/li&gt;
&lt;li&gt;Que conteúdos são projectos, arquivados, específicos de uma região ou de baixa confiança?&lt;/li&gt;
&lt;li&gt;Que documentos devem ser totalmente excluídos das respostas de IA?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Uma plataforma que não tenha sido construída em torno destas questões tem de as adaptar. Isso é sempre mais difícil do que concebê-las desde o início.&lt;/p&gt;
&lt;h2&gt;A força do legado transforma-se em travão do legado&lt;/h2&gt;
&lt;p&gt;Os produtos estabelecidos têm vantagens: distribuição, ecossistema, marca, familiaridade com o cliente, integrações e equipas que sabem como fazer o envio. Mas esses mesmos pontos fortes podem atrasar a mudança estrutural.&lt;/p&gt;
&lt;p&gt;Porquê? Porque as plataformas maduras implicam compromissos.&lt;/p&gt;
&lt;p&gt;Elas têm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;anos de decisões acumuladas sobre produtos&lt;/li&gt;
&lt;li&gt;enormes bases instaladas com fluxos de trabalho existentes&lt;/li&gt;
&lt;li&gt;expectativas em relação à compatibilidade com versões anteriores&lt;/li&gt;
&lt;li&gt;plugins e extensões que dependem de comportamentos antigos&lt;/li&gt;
&lt;li&gt;modelos de dados optimizados para os casos de utilização de ontem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quando uma plataforma como o Confluence ou o Notion pretende acrescentar uma capacidade genuinamente nova, muitas vezes tem de a adaptar ao sistema existente e não através dele.&lt;/p&gt;
&lt;p&gt;Este é o desafio da incumbência: não está apenas a construir o futuro, está a arrastar o passado consigo.&lt;/p&gt;
&lt;h2&gt;Acrescentar funcionalidades de IA não é o mesmo que tornar-se nativo da IA&lt;/h2&gt;
&lt;p&gt;Muitas plataformas estabelecidas estão agora a colocar a IA no topo. Resumos. Assistência à escrita. Melhorias na pesquisa. Interfaces de perguntas e respostas. O Confluence tem &lt;a href=&quot;https://www.atlassian.com/platform/intelligence&quot;&gt;Atlassian Intelligence&lt;/a&gt;, o Notion tem &lt;a href=&quot;https://www.notion.com/product/ai&quot;&gt;Notion AI&lt;/a&gt;, e o GitBook adicionou &lt;a href=&quot;https://docs.gitbook.com/product-tour/searching-your-content/gitbook-ai&quot;&gt;AI-powered search&lt;/a&gt;. Estas funcionalidades são úteis. Algumas delas são boas.&lt;/p&gt;
&lt;p&gt;Mas há uma diferença significativa entre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;adicionar caraterísticas de IA a um produto de documentação&lt;/li&gt;
&lt;li&gt;construir um produto de documentação cuja arquitetura central pressupõe o consumo de IA desde o primeiro dia&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A primeira abordagem conduz frequentemente a funcionalidades de assistência nas extremidades. A segunda altera a base.&lt;/p&gt;
&lt;p&gt;Uma plataforma de conhecimento nativa de IA coloca questões de design diferentes desde o início:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;como é que os documentos devem ser estruturados para que os sistemas possam raciocinar sobre eles com segurança?&lt;/li&gt;
&lt;li&gt;como deve ser representada a confiança?&lt;/li&gt;
&lt;li&gt;que metadados devem ser de primeira classe e não opcionais?&lt;/li&gt;
&lt;li&gt;Como é que os conteúdos obsoletos devem perder visibilidade?&lt;/li&gt;
&lt;li&gt;como é que as respostas devem ser restringidas quando as fontes subjacentes são fracas?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas são questões de arquitetura, não de caraterísticas.&lt;/p&gt;
&lt;h2&gt;As plataformas novas têm uma vantagem temporária&lt;/h2&gt;
&lt;p&gt;É aqui que as plataformas mais recentes podem ganhar, pelo menos durante algum tempo.&lt;/p&gt;
&lt;p&gt;Uma nova plataforma tem a liberdade de conceber em função das restrições actuais e não dos hábitos de ontem. Não tem de preservar uma década de pressupostos sobre o que é um documento ou como uma wiki se deve comportar. Pode fazer escolhas diferentes numa fase inicial:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tratar a atualidade como um conceito de primeira classe&lt;/li&gt;
&lt;li&gt;tornar a confiança na fonte visível tanto para humanos como para máquinas&lt;/li&gt;
&lt;li&gt;armazenar metadados mais ricos sobre o estado do conteúdo&lt;/li&gt;
&lt;li&gt;incorporar fluxos de trabalho multilingues no modelo principal, em vez de os acrescentar&lt;/li&gt;
&lt;li&gt;decidir que a pesquisa e a recuperação por IA devem ser classificadas por confiança e não apenas por relevância&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Essa liberdade é importante.&lt;/p&gt;
&lt;p&gt;Na tecnologia, os operadores históricos são frequentemente mais fortes durante períodos estáveis. Os novos operadores são muitas vezes mais fortes quando o próprio modelo está a mudar.&lt;/p&gt;
&lt;p&gt;A era da IA é uma dessas mudanças.&lt;/p&gt;
&lt;h2&gt;Porque é que isto é especialmente difícil para o Confluence&lt;/h2&gt;
&lt;p&gt;O Confluence é poderoso, mas vem de uma visão de mundo mais antiga. Foi construído em torno de [espaços de equipa, páginas, navegação hierárquica] (https://support.atlassian.com/confluence-cloud/docs/use-spaces-to-organize-your-work/) e de um [modelo empresarial rico em plug-ins] (https://marketplace.atlassian.com/). Essas escolhas faziam sentido. Ainda fazem sentido para muitas organizações.&lt;/p&gt;
&lt;p&gt;Mas também significam que o produto está a carregar uma grande complexidade. As plataformas empresariais raramente se conseguem reinventar de forma limpa. Têm de negociar com a sua própria história.&lt;/p&gt;
&lt;p&gt;Isso torna a modernização mais lenta. Não é impossível. Apenas mais lenta.&lt;/p&gt;
&lt;p&gt;Quando os requisitos da era da IA exigem metadados mais limpos, uma modelação de confiança mais explícita ou uma governação de conteúdos mais opinativa, um sistema criado para uma flexibilidade máxima através de anos de extensões pode ter dificuldade em avançar de forma coesa.&lt;/p&gt;
&lt;h2&gt;Por que isso é especialmente complicado para o Notion&lt;/h2&gt;
&lt;p&gt;O Notion tem um problema diferente. Ele parece mais novo, mais leve e mais flexível. Mas a flexibilidade também pode funcionar contra ele.&lt;/p&gt;
&lt;p&gt;O ponto forte do Notion é que [quase tudo pode se tornar uma página, um banco de dados, uma nota, um documento leve ou um espaço colaborativo] (https://www.notion.com/product). Essa flexibilidade é óptima para as equipas. Não é tão boa quando são necessárias garantias sólidas sobre o significado do conteúdo, o estado em que se encontra e se deve ser utilizado como uma fonte fiável por um sistema de IA.&lt;/p&gt;
&lt;p&gt;Quanto mais livre for uma plataforma, mais difícil será impor posteriormente uma semântica fiável.&lt;/p&gt;
&lt;p&gt;Os sistemas de IA prosperam com estrutura, metadados explícitos e sinais de confiança. Os espaços de trabalho flexíveis de uso geral precisam frequentemente de muita interpretação antes de o seu conteúdo ser seguro para esse tipo de utilização.&lt;/p&gt;
&lt;h2&gt;Nada disto significa que estão condenados&lt;/h2&gt;
&lt;p&gt;Seria uma análise preguiçosa dizer que o Confluence e o Notion não se podem adaptar. Claro que podem.&lt;/p&gt;
&lt;p&gt;Têm equipas inteligentes, recursos significativos e fortes incentivos. Vão lançar mais capacidades de IA. Vão melhorar a recuperação, a assistência à criação, os resumos, a governação e os fluxos de trabalho estruturados. Com o tempo, poderão colmatar uma grande parte da lacuna.&lt;/p&gt;
&lt;p&gt;Mas o tempo é importante.&lt;/p&gt;
&lt;p&gt;Quando uma mudança como esta acontece, a vantagem pertence frequentemente a quem estiver disposto a reconstruir os pressupostos mais rapidamente. As plataformas mais recentes podem avançar com mais coerência porque não estão a adaptar-se tanto. Isso dá-lhes uma janela.&lt;/p&gt;
&lt;p&gt;Pode não ser uma janela permanente. Mas é real.&lt;/p&gt;
&lt;h2&gt;A próxima fase das plataformas de documentação&lt;/h2&gt;
&lt;p&gt;A próxima geração de ferramentas de documentação será provavelmente julgada menos pela forma como permitem que as pessoas escrevam páginas e mais pela forma como gerem o conhecimento como um sistema de confiança.&lt;/p&gt;
&lt;p&gt;Isso significa que os vencedores provavelmente farão cinco coisas bem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Modelarão a confiança de forma explícita.&lt;/li&gt;
&lt;li&gt;Distinguem o conhecimento atual do conhecimento obsoleto.&lt;/li&gt;
&lt;li&gt;Tratarão a recuperação de IA como uma superfície central do produto e não como um complemento.&lt;/li&gt;
&lt;li&gt;Suportarão conhecimentos multilingues e específicos do público sem fragmentação.&lt;/li&gt;
&lt;li&gt;Darão às equipas um maior controlo sobre as informações que são apresentadas, a quem e em que condições.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta é uma categoria diferente da wiki clássica.&lt;/p&gt;
&lt;h2&gt;Porque é que os novos começos são importantes&lt;/h2&gt;
&lt;p&gt;Há momentos no software em que um produto novo tem uma vantagem, não porque os operadores históricos sejam incompetentes, mas porque a história é cara.&lt;/p&gt;
&lt;p&gt;Este é um desses momentos.&lt;/p&gt;
&lt;p&gt;Uma nova plataforma pode decidir, desde o primeiro dia, que os documentos não são apenas páginas. São fontes activas para humanos, agentes, sistemas de pesquisa e assistentes de IA. Esse pressuposto altera tudo a jusante.&lt;/p&gt;
&lt;p&gt;O Confluence e o Notion podem lá chegar. Mas o caminho é mais longo porque têm de transformar sistemas que foram optimizados para outra era.&lt;/p&gt;
&lt;p&gt;Essa transformação leva tempo. Entretanto, as plataformas mais recentes têm espaço para definir o que deve ser uma infraestrutura de conhecimento moderna.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A maior vantagem de uma nova plataforma não é a novidade. É a libertação de velhos pressupostos exatamente no momento em que esses pressupostos deixam de funcionar.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Este é um artigo de perspetiva. As afirmações sobre produtos concorrentes baseiam-se em documentação e anúncios de produtos disponíveis publicamente em março de 2026. Temos um respeito genuíno pelo Confluence e pelo Notion - são produtos excelentes que servem bem milhões de equipas.&lt;/em&gt;&lt;/p&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="ai" />
    <category term="platforms" />
    <category term="documentation" />
  </entry>
  <entry>
    <title>Por dentro da arquitetura Rasepi: Plugins, Action Guards e Pipelines</title>
    <link href="https://rasepi.com/pt/blog/how-plugin-guardrail-and-pipeline-systems-work/" rel="alternate" type="text/html" />
    <id>https://rasepi.com/pt/blog/how-plugin-guardrail-and-pipeline-systems-work/</id>
    <updated>2026-03-06T00:00:00Z</updated>
    <summary>Um passo-a-passo técnico profundo sobre como o sistema de plugins do Rasepi, o pipeline de proteção de acções e o motor de tradução ao nível do bloco funcionam realmente, com código real da base de código.</summary>
    <content type="html">&lt;p&gt;A maioria das plataformas de documentação fala sobre &amp;quot;extensibilidade&amp;quot; da mesma forma que as companhias aéreas falam sobre &amp;quot;espaço para as pernas&amp;quot;. Tecnicamente presente, praticamente dececionante. Eu queria que a arquitetura do Rasepi fosse genuinamente extensível sem se tornar imprevisível, por isso construímos três sistemas interligados: &lt;strong&gt;plugins&lt;/strong&gt; para capacidade, &lt;strong&gt;action guards&lt;/strong&gt; para controlo, e &lt;strong&gt;pipelines&lt;/strong&gt; para execução determinística.&lt;/p&gt;
&lt;p&gt;Este post mostra como cada um deles funciona em nossa base de código atual.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://rasepi.com/pt/blog/img/architecture-pipeline.svg&quot; alt=&quot;Arquitetura Rasepi: Plugins, Guardas, e Pipelines a trabalhar em conjunto&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;O sistema de plugins: modular por design&lt;/h2&gt;
&lt;p&gt;Cada plugin no Rasepi implementa &lt;code&gt;IPluginModule&lt;/code&gt;, uma única interface que declara o que o plugin é, quais serviços ele precisa, e quais rotas ele expõe:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public interface IPluginModule
{
    PluginManifest Manifest { get; }
    void RegisterServices(IServiceCollection services);
    void MapRoutes(IEndpointRouteBuilder routes);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O &lt;code&gt;PluginManifest&lt;/code&gt; é puro dado. Ele descreve o plugin sem executar nada:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed class PluginManifest
{
    public required string Id { get; init; }
    public required string Name { get; init; }
    public required string Version { get; init; }
    public string Description { get; init; }
    public string Category { get; init; }
    public IReadOnlyDictionary&amp;lt;string, string&amp;gt; UiContributions { get; init; }
    public bool HasSettings { get; init; }
    public bool HasEndpoints { get; init; }
    public IReadOnlyList&amp;lt;string&amp;gt; Dependencies { get; init; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Repare no &lt;code&gt;UiContributions&lt;/code&gt;. Esse dicionário mapeia os pontos de extensão do frontend para os nomes dos componentes, então o frontend do Vue sabe quais componentes de UI cada plugin contribui (um botão da barra de ferramentas, um painel da barra lateral, uma página de configurações).&lt;/p&gt;
&lt;h3&gt;O registo é uma linha por cada plugin&lt;/h3&gt;
&lt;p&gt;Na inicialização, nós registramos plugins através de uma API fluente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var pluginRegistry = new PluginRegistry();

pluginRegistry
    .AddPlugin&amp;lt;WorkflowPluginModule&amp;gt;(builder.Services)
    .AddPlugin&amp;lt;RulesPluginModule&amp;gt;(builder.Services)
    .AddPlugin&amp;lt;RetentionPluginModule&amp;gt;(builder.Services)
    .AddPlugin&amp;lt;ClassificationPluginModule&amp;gt;(builder.Services);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada chamada instancia o módulo, armazena-o no registo e chama &lt;code&gt;RegisterServices()&lt;/code&gt; para ligar as suas dependências. Depois que o aplicativo é construído, uma única linha mapeia todas as rotas de plugins:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;app.MapPluginRoutes(pluginRegistry);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Por baixo do capô, cada plugin recebe um grupo de rotas com escopo em &lt;code&gt;/api/plugins/{pluginId}/&lt;/code&gt; com autorização aplicada automaticamente.&lt;/p&gt;
&lt;h3&gt;Exemplo real: o plugin Workflow&lt;/h3&gt;
&lt;p&gt;Aqui está o aspeto de um plugin real, o módulo Workflow &amp;amp; Approvals:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed class WorkflowPluginModule : IPluginModule
{
    public const string PluginId = &amp;quot;workflow&amp;quot;;

    public PluginManifest Manifest { get; } = new()
    {
        Id = PluginId,
        Name = &amp;quot;Workflow &amp;amp; Approvals&amp;quot;,
        Version = &amp;quot;1.0.0&amp;quot;,
        Description = &amp;quot;Adds approval workflows to entry publishing.&amp;quot;,
        Category = &amp;quot;Workflow&amp;quot;,
        HasSettings = true,
        HasEndpoints = true,
        UiContributions = new Dictionary&amp;lt;string, string&amp;gt;
        {
            [&amp;quot;entry.toolbar.publish&amp;quot;] = &amp;quot;WorkflowPublishButton&amp;quot;,
            [&amp;quot;entry.sidebar.status&amp;quot;]  = &amp;quot;WorkflowStatusPanel&amp;quot;,
            [&amp;quot;hub.admin.settings&amp;quot;]    = &amp;quot;WorkflowHubSettings&amp;quot;,
        }
    };

    public void RegisterServices(IServiceCollection services)
    {
        services.AddScoped&amp;lt;IWorkflowService, WorkflowService&amp;gt;();
        services.AddScoped&amp;lt;IActionGuard, WorkflowPublishGuard&amp;gt;();
    }

    public void MapRoutes(IEndpointRouteBuilder routes)
    {
        WorkflowEndpoints.Map(routes);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A plataforma principal nunca faz referência a &lt;code&gt;WorkflowService&lt;/code&gt; ou &lt;code&gt;WorkflowPublishGuard&lt;/code&gt; diretamente. Descobre-os através do contentor DI. Essa é a chave para o acoplamento zero. A aplicação principal nunca toca no código do plugin.&lt;/p&gt;
&lt;h2&gt;Guardas de ação: a camada de controlo&lt;/h2&gt;
&lt;p&gt;Plugins adicionam capacidades. Os guardas de ação decidem se essa capacidade, ou qualquer ação do núcleo, tem permissão para continuar. Eles são validadores síncronos que interceptam operações antes da execução.&lt;/p&gt;
&lt;p&gt;Fluxo de avaliação dos guardas de ação](/pt/blog/img/action-guard-flow.svg)&lt;/p&gt;
&lt;p&gt;A interface é deliberadamente mínima:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public interface IActionGuard
{
    string PluginId { get; }
    string? ActionName { get; }  // null means guard ALL actions

    Task&amp;lt;ActionGuardResult&amp;gt; EvaluateAsync(
        ActionGuardContext context,
        IServiceProvider services,
        CancellationToken ct = default);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando &lt;code&gt;ActionName&lt;/code&gt; é &lt;code&gt;null&lt;/code&gt;, o guarda é executado para cada ação. Quando está definido para algo como &lt;code&gt;&amp;quot;Entry.Publish&amp;quot;&lt;/code&gt;, apenas intercepta essa ação específica.&lt;/p&gt;
&lt;h3&gt;O contexto e os contratos de resultado&lt;/h3&gt;
&lt;p&gt;Cada guard recebe um contexto tipado com o nome da ação, inquilino, utilizador, entidade e um saco de propriedades:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed record ActionGuardContext(
    string ActionName,
    Guid TenantId,
    Guid UserId,
    Guid EntityId,
    IReadOnlyDictionary&amp;lt;string, object?&amp;gt; Properties)
{
    public T? Get&amp;lt;T&amp;gt;(string key) =&amp;gt;
        Properties.TryGetValue(key, out var v) &amp;amp;&amp;amp; v is T typed
            ? typed : default;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E cada guarda retorna um resultado previsível: permitir, negar ou permitir-com-modificações:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed record ActionGuardResult
{
    public bool IsAllowed { get; init; }
    public string? ReasonCode { get; init; }
    public string? Message { get; init; }
    public IReadOnlyDictionary&amp;lt;string, object?&amp;gt;? Modifications { get; init; }

    public static ActionGuardResult Allow() =&amp;gt;
        new() { IsAllowed = true };

    public static ActionGuardResult Deny(
        string reasonCode, string message) =&amp;gt;
        new() { IsAllowed = false, ReasonCode = reasonCode, Message = message };
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O campo &lt;code&gt;Modifications&lt;/code&gt; é importante. Um guard pode aprovar uma ação mas reescrever parte do conteúdo (por exemplo, redigir segredos antes de publicar).&lt;/p&gt;
&lt;h3&gt;Nomes de acções canónicas&lt;/h3&gt;
&lt;p&gt;Nós definimos todas as ações interceptáveis como constantes de string para que não haja nenhuma ambigüidade sobre o que um guard pode ter como alvo:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public static class ActionNames
{
    public static class Entry
    {
        public const string Create  = &amp;quot;Entry.Create&amp;quot;;
        public const string Save    = &amp;quot;Entry.Save&amp;quot;;
        public const string Publish = &amp;quot;Entry.Publish&amp;quot;;
        public const string Delete  = &amp;quot;Entry.Delete&amp;quot;;
        public const string Archive = &amp;quot;Entry.Archive&amp;quot;;
        public const string Renew   = &amp;quot;Entry.Renew&amp;quot;;
    }

    public static class Hub
    {
        public const string Create = &amp;quot;Hub.Create&amp;quot;;
        public const string Delete = &amp;quot;Hub.Delete&amp;quot;;
        public const string TransferOwnership = &amp;quot;Hub.TransferOwnership&amp;quot;;
    }

    public static class Translation
    {
        public const string Create  = &amp;quot;Translation.Create&amp;quot;;
        public const string Publish = &amp;quot;Translation.Publish&amp;quot;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Exemplo real: bloquear publicação sem aprovação&lt;/h3&gt;
&lt;p&gt;O plugin Workflow regista um guard que intercepta &lt;code&gt;Entry.Publish&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed class WorkflowPublishGuard : IActionGuard
{
    public string PluginId =&amp;gt; WorkflowPluginModule.PluginId;
    public string? ActionName =&amp;gt; ActionNames.Entry.Publish;

    public async Task&amp;lt;ActionGuardResult&amp;gt; EvaluateAsync(
        ActionGuardContext context,
        IServiceProvider services,
        CancellationToken ct = default)
    {
        var db = services.GetRequiredService&amp;lt;RasepiDbContext&amp;gt;();
        var entry = await db.Entries
            .AsNoTracking()
            .FirstOrDefaultAsync(e =&amp;gt; e.Id == context.EntityId, ct);

        if (entry is null)
            return ActionGuardResult.Allow();

        var workflowService = services.GetRequiredService&amp;lt;IWorkflowService&amp;gt;();
        var check = await workflowService
            .CheckPublishAllowedAsync(entry.Id, entry.HubId);

        if (check.IsAllowed)
            return ActionGuardResult.Allow();

        return ActionGuardResult.Deny(
            &amp;quot;workflow.approval_required&amp;quot;,
            check.Message ?? &amp;quot;Approval required before publishing.&amp;quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A plataforma principal não sabe nada sobre workflows de aprovação. Apenas chama &lt;code&gt;Entry.Publish&lt;/code&gt; através do pipeline, e o guard bloqueia-o se o workflow não tiver sido concluído.&lt;/p&gt;
&lt;h2&gt;O pipeline de ação: onde tudo converge&lt;/h2&gt;
&lt;p&gt;O &lt;code&gt;ActionPipeline&lt;/code&gt; é o único caminho de execução para todas as operações protegidas. Ele resolve quais guardas se aplicam, avalia-os, e bloqueia ou executa a ação.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed class ActionPipeline : IActionPipeline
{
    public async Task&amp;lt;ActionPipelineResult&amp;gt; ExecuteAsync(
        string actionName,
        ActionGuardContext context,
        Func&amp;lt;Task&amp;gt; action,
        CancellationToken ct = default)
    {
        var result = await EvaluateAsync(actionName, context, ct);
        if (!result.IsAllowed) return result;

        await action();  // All guards passed — execute

        return result;   // Return modifications for caller
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O método &lt;code&gt;EvaluateAsync&lt;/code&gt; faz o trabalho pesado:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task&amp;lt;ActionPipelineResult&amp;gt; EvaluateAsync(
    string actionName,
    ActionGuardContext context,
    CancellationToken ct = default)
{
    // 1. Which plugins are enabled for this tenant?
    var enabledPlugins = await _resolver.GetEnabledPluginIdsAsync();

    // 2. Which guards match this action?
    var applicable = _guards
        .Where(g =&amp;gt; enabledPlugins.Contains(g.PluginId))
        .Where(g =&amp;gt; g.ActionName == null || g.ActionName == actionName)
        .ToList();

    // 3. Evaluate each guard
    var denials = new List&amp;lt;ActionGuardResult&amp;gt;();
    var modifications = new List&amp;lt;ActionGuardResult&amp;gt;();

    foreach (var guard in applicable)
    {
        try
        {
            var guardResult = await guard.EvaluateAsync(context, _services, ct);
            if (!guardResult.IsAllowed)
                denials.Add(guardResult);
            else if (guardResult.Modifications?.Count &amp;gt; 0)
                modifications.Add(guardResult);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, &amp;quot;Guard threw. Treating as Allow.&amp;quot;);
        }
    }

    // 4. Any denial blocks the whole action
    if (denials.Count &amp;gt; 0)
        return ActionPipelineResult.Blocked(denials);

    return modifications.Count &amp;gt; 0
        ? ActionPipelineResult.Allowed(modifications)
        : ActionPipelineResult.Allowed();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Três importantes decisões de design aqui:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Resolução por inquilino&lt;/strong&gt; O &lt;code&gt;TenantPluginResolver&lt;/code&gt; verifica quais os plugins que cada inquilino tem instalados e activados. Um guarda para um plugin desativado nunca é executado.&lt;/li&gt;
&lt;li&gt;**Se algum guarda negar, a ação é bloqueada. Esta é uma postura de segurança deliberada.&lt;/li&gt;
&lt;li&gt;**Se um guarda lança uma exceção, esta é registada e tratada como &lt;code&gt;Allow()&lt;/code&gt;. Isso evita que um plugin quebrado bloqueie toda a plataforma.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Resolução de plugins por inquilino&lt;/h3&gt;
&lt;p&gt;O resolvedor consulta a tabela &lt;code&gt;TenantPluginInstallations&lt;/code&gt; (com escopo automático para o locatário atual pelos filtros de consulta global EF):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public sealed class TenantPluginResolver : ITenantPluginResolver
{
    public async Task&amp;lt;IReadOnlySet&amp;lt;string&amp;gt;&amp;gt; GetEnabledPluginIdsAsync(
        CancellationToken ct = default)
    {
        if (_cache is not null) return _cache;

        var ids = await _db.TenantPluginInstallations
            .Where(i =&amp;gt; i.IsEnabled)
            .Select(i =&amp;gt; i.PluginId)
            .ToListAsync(ct);

        _cache = ids.ToHashSet();
        return _cache;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Efeitos colaterais orientados por eventos&lt;/h2&gt;
&lt;p&gt;As acções são síncronas. Os efeitos colaterais não são. Depois que uma ação é concluída, o serviço publica um evento de domínio:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;await _eventPublisher.PublishAsync(
    EventNames.Entry.Created, entry.Id, new { entry.OriginalLanguage });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Os eventos são enfileirados em um canal na memória e processados por um &lt;code&gt;EventConsumerWorker&lt;/code&gt; em segundo plano. O trabalhador encaminha os eventos para vários sistemas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registo de actividades. Regista quem fez o quê, quando&lt;/li&gt;
&lt;li&gt;Faturação da tradução: regista os custos por fornecedor&lt;/li&gt;
&lt;li&gt;Manipuladores de eventos de plugins.** Qualquer plugin pode subscrever eventos do domínio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Os manipuladores de eventos de plugins implementam &lt;code&gt;IPluginEventHandler&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public interface IPluginEventHandler
{
    string PluginId { get; }
    IReadOnlyList&amp;lt;string&amp;gt; SubscribedEvents { get; }

    Task HandleAsync(
        string eventName, Guid entityId,
        Guid? tenantId, Guid? userId,
        string payloadJson, IServiceProvider services,
        CancellationToken ct = default);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O trabalhador só invoca manipuladores cujo plugin está habilitado para o locatário. Isso significa que os efeitos colaterais do plugin A nunca vazam para um locatário que só tem o plugin B instalado.&lt;/p&gt;
&lt;h2&gt;O motor de tradução a nível de bloco&lt;/h2&gt;
&lt;p&gt;É aqui que a arquitetura compensa de forma mais visível.&lt;/p&gt;
&lt;p&gt;Tradução por blocos: apenas os blocos alterados são retraduzidos](/pt/blog/img/block-translation.svg)&lt;/p&gt;
&lt;p&gt;As plataformas tradicionais traduzem documentos inteiros. Nós traduzimos &lt;strong&gt;blocos&lt;/strong&gt; individuais: parágrafos, títulos, itens de lista. Quando um utilizador edita um parágrafo num documento de 50 blocos, apenas esse parágrafo precisa de ser traduzido novamente. Esta é a fonte da nossa poupança de custos de 94%.&lt;/p&gt;
&lt;h3&gt;Como os blocos são criados a partir do TipTap JSON&lt;/h3&gt;
&lt;p&gt;Quando um usuário salva um documento, o editor TipTap envia JSON como este:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &amp;quot;type&amp;quot;: &amp;quot;doc&amp;quot;,
  &amp;quot;content&amp;quot;: [
    {
      &amp;quot;type&amp;quot;: &amp;quot;paragraph&amp;quot;,
      &amp;quot;attrs&amp;quot;: { &amp;quot;blockId&amp;quot;: &amp;quot;a1b2c3d4-...&amp;quot; },
      &amp;quot;content&amp;quot;: [{ &amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;, &amp;quot;text&amp;quot;: &amp;quot;Hello world&amp;quot; }]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O &lt;code&gt;BlockTranslationService&lt;/code&gt; analisa este JSON e cria registos &lt;code&gt;EntryBlock&lt;/code&gt; individuais:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task&amp;lt;List&amp;lt;EntryBlock&amp;gt;&amp;gt; CreateBlocksFromDocumentAsync(
    Guid entryId, string language, string contentJson,
    int version, Guid userId)
{
    var doc = JsonDocument.Parse(contentJson);
    var content = doc.RootElement.GetProperty(&amp;quot;content&amp;quot;);

    int position = 0;
    foreach (var node in content.EnumerateArray())
    {
        var blockType = node.GetProperty(&amp;quot;type&amp;quot;).GetString();
        var blockJson = JsonSerializer.Serialize(node);

        // Strip metadata attrs before hashing
        var hashInput = StripBlockMetaAttrs(blockJson);

        var block = new EntryBlock
        {
            Id = ExtractOrGenerateBlockId(node),
            EntryId = entryId,
            Language = language,
            Position = position++,
            BlockType = blockType,
            ContentJson = blockJson,
            ContentHash = CalculateContentHash(hashInput),
            IsNoTranslate = ExtractNoTranslateFlag(node),
            Version = version,
        };

        _context.EntryBlocks.Add(block);
    }

    await _context.SaveChangesAsync();
    return blocks;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;hashing SHA256 para deteção de desatualização&lt;/h3&gt;
&lt;p&gt;O hash de conteúdo é o núcleo da deteção de desatualização. Fazemos o hash do conteúdo do bloco (depois de retirar os atributos de metadados como &lt;code&gt;blockId&lt;/code&gt; e &lt;code&gt;deleted&lt;/code&gt;) usando SHA256:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;private string CalculateContentHash(string content)
{
    using var sha256 = SHA256.Create();
    var hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(content));
    return Convert.ToHexString(hashBytes);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando um bloco de origem muda, seu hash muda. O sistema compara então o &lt;code&gt;SourceContentHash&lt;/code&gt; de cada bloco de tradução com o hash de origem atual, e as incompatibilidades são marcadas como &lt;code&gt;Stale&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task MarkTranslationsAsStaleAsync(List&amp;lt;Guid&amp;gt; changedBlockIds)
{
    var affected = await _context.TranslationBlocks
        .Where(t =&amp;gt; changedBlockIds.Contains(t.SourceBlockId))
        .ToListAsync();

    foreach (var translation in affected)
    {
        translation.Status = TranslationStatus.Stale;
        translation.UpdatedAt = DateTime.UtcNow;
    }

    await _context.SaveChangesAsync();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Adaptação da estrutura&lt;/h3&gt;
&lt;p&gt;Os tradutores podem alterar os tipos de blocos nas várias línguas. Uma lista de pontos em inglês pode tornar-se numa lista numerada em alemão, uma preferência cultural. O sistema regista este facto:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;var translation = new TranslationBlock
{
    SourceBlockId = sourceBlockId,
    Language = targetLanguage,
    BlockType = translatedBlockType,
    SourceBlockType = sourceBlock.BlockType,
    IsStructureAdapted = translatedBlockType != sourceBlock.BlockType,
    SourceContentHash = sourceBlock.ContentHash,
    Status = TranslationStatus.UpToDate,
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Fornecedores de tradução como plugins&lt;/h3&gt;
&lt;p&gt;Os serviços de tradução externos (DeepL, Google Translate, etc.) ligam-se através de &lt;code&gt;ITranslationProviderPlugin&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public interface ITranslationProviderPlugin : IRasepiPlugin
{
    string[] GetSupportedLanguages();

    Task&amp;lt;string&amp;gt; TranslateAsync(
        string text, string sourceLanguage, string targetLanguage);

    Task&amp;lt;TranslationBatchResult&amp;gt; TranslateBatchAsync(
        Dictionary&amp;lt;string, string&amp;gt; texts,
        string sourceLanguage, string targetLanguage);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O método batch recebe um dicionário de IDs de blocos para o conteúdo, traduz todos eles e retorna as traduções com uma contagem de caracteres facturados. Como só enviamos blocos antigos, e não o documento inteiro, os custos são mínimos.&lt;/p&gt;
&lt;h2&gt;Isolamento do inquilino: a rede de segurança invisível&lt;/h2&gt;
&lt;p&gt;Todos os sistemas descritos acima funcionam dentro de um isolamento rigoroso do locatário.&lt;/p&gt;
&lt;p&gt;O &lt;code&gt;TenantContextMiddleware&lt;/code&gt; resolve o inquilino a partir do JWT em cada pedido e verifica a adesão:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;public async Task InvokeAsync(
    HttpContext context, TenantContext tenantContext, RasepiDbContext db)
{
    var tenantIdClaim = context.User.FindFirstValue(&amp;quot;tenant_id&amp;quot;);
    var userIdClaim = context.User.FindFirstValue(ClaimTypes.NameIdentifier);

    // Populate scoped context
    tenantContext.TenantId = Guid.Parse(tenantIdClaim);
    tenantContext.UserId = Guid.Parse(userIdClaim);

    // Verify membership — fail closed
    var membership = await db.TenantMemberships
        .Where(m =&amp;gt; m.TenantId == tenantContext.TenantId
                  &amp;amp;&amp;amp; m.UserId == tenantContext.UserId)
        .FirstOrDefaultAsync();

    if (membership == null)
    {
        context.Response.StatusCode = 401;
        return;  // No membership = no access
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Os filtros de consulta globais do Entity Framework garantem que, mesmo que um programador se esqueça de filtrar por inquilino, a camada de base de dados fá-lo automaticamente:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-csharp&quot;&gt;modelBuilder.Entity&amp;lt;Hub&amp;gt;()
    .HasQueryFilter(h =&amp;gt; h.TenantId == _tenantContext.TenantId);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;O resultado: &lt;code&gt;db.Hubs.ToListAsync()&lt;/code&gt; sempre retorna apenas os hubs do locatário atual. As fugas de dados exigem que se contorne ativamente o filtro de consulta, o que é proibido na nossa base de código.&lt;/p&gt;
&lt;h2&gt;A imagem completa&lt;/h2&gt;
&lt;p&gt;Quando um utilizador clica em &amp;quot;Publicar&amp;quot; numa entrada, eis o que acontece:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**A autenticação valida o JWT, &lt;code&gt;TenantContextMiddleware&lt;/code&gt; resolve e verifica o inquilino.&lt;/li&gt;
&lt;li&gt;**O controlador chama o pipeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O pipeline resolve os guardas.&lt;/strong&gt; Consulta quais os plugins que o inquilino activou, seleciona os guardas aplicáveis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Os guardas avaliam.&lt;/strong&gt; O guarda de Fluxo de trabalho verifica as aprovações, o guarda de Retenção verifica a política, o guarda de Regras valida o conteúdo. Todos passam? A entrada é publicada.&lt;/li&gt;
&lt;li&gt;**O evento &lt;code&gt;Entry.Published&lt;/code&gt; é colocado na fila. Um trabalhador em segundo plano regista a atividade, actualiza a faturação da tradução e chama os manipuladores de eventos do plugin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traduções de blocos verificadas.&lt;/strong&gt; Blocos obsoletos são identificados para retradução.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cada camada faz o seu trabalho. Nenhuma camada se intromete em outra. Esta é a arquitetura.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Não construímos isto porque a extensibilidade está na moda. Construímo-la porque uma plataforma de documentação que não se pode adaptar ao fluxo de trabalho de cada equipa acabará por ser substituída por uma que o possa fazer. E uma plataforma que se adapta sem proteção acabará por quebrar algo que é importante.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
    <author><name>Tim Cadenbach</name></author>
    <category term="architecture" />
    <category term="plugins" />
    <category term="ai" />
  </entry>
</feed>
