Pular para o conteúdo

ADR-0036: Política limitada de redação de nomes

  • Status: Accepted
  • Data: 2026-07-02
  • Responsáveis pela decisão: Waldemar Szemat

O redator determinístico de PII redige um conjunto fixo de identificadores estruturados e deliberadamente não redige nomes de pessoas. Essa exclusão viveu como prosa no módulo de redação e como um teste fixado desde que o redator foi enviado, e a postura de governança a descreve, mas nunca tinha sido ratificada como uma decisão citada de primeira classe.

Uma revisão de certificação externa sinalizou o comportamento de nomes não redigidos como uma lacuna a adjudicar em vez de um detalhe de implementação silencioso. O comportamento é deliberado e defensável, mas “deliberado” só é auditável se for uma decisão explícita com uma justificativa enunciada e um residual nomeado, não uma propriedade sem dono do código. Este registro ratifica a política existente e registra a alternativa diferida - uma passagem ativa de nomes condicionada por configuração - como uma decisão do proprietário em vez de um descuido. É uma ratificação de documentação: não introduz nenhuma mudança de comportamento do código.

  • Taxa de falsos positivos. A detecção confiável de nomes de pessoas sem um modelo de Reconhecimento de Entidades Nomeadas (NER) tem uma taxa de falsos positivos inaceitável - um padrão com forma de nome mascararia palavras comuns e termos de medicação ou clínicos, degradando as próprias respostas que o agente existe para dar.
  • Dados somente sintéticos (ADR-0018). A implementação de referência roda com dados 100% sintéticos sem identidades reais de pacientes, então um nome próprio não redigido não acarreta risco de divulgação no mundo real nesta implantação.
  • Sem nova dependência de execução. Adicionar um modelo NER para redigir nomes violaria a postura de zero-nova-dependência-de-execução e $0 do demo por um benefício que o invariante somente-sintético já neutraliza.
  • Auditabilidade. A exclusão deve ser uma decisão citada e fixada que não possa derivar em silêncio, não uma lacuna implícita.
  • O redator segue sendo um redator. É sempre informativo e nunca um portão de recusa (ADR-0005), então uma omissão de nome não pode bloquear um turno em silêncio.
  • Ratificar a política limitada - só identificadores estruturados, nomes excluídos por taxa de falsos positivos e por dados somente sintéticos - e registrar a passagem ativa de nomes condicionada por configuração como explicitamente diferida, desligada por padrão e não implementada (escolhida).
  • Implementar agora uma passagem de redação de nomes baseada em modelo NER (rejeitada: adiciona uma dependência de execução e um custo de hospedagem de modelo que violam a postura de $0, por um benefício que o invariante somente-sintético já neutraliza nesta implantação).
  • Implementar agora uma passagem de redação de nomes por regex/heurística (rejeitada: os padrões com forma de nome têm uma taxa de falsos positivos inaceitável - mascarariam palavras comuns e termos de medicação ou clínicos, degradando as respostas centrais do agente).
  • Só identificadores estruturados. O escopo do redator é o conjunto de tipos de identificador estruturado: e-mail, telefone, ID nacional (incluído um SSN dos EUA), cartão de pagamento, os identificadores nacionais latino-americanos RUT, CPF e DNI, e o número de registro médico, a data de nascimento e o endereço postal. Cada um está ancorado, limitado e - onde o identificador carrega um dígito verificador - validado estruturalmente (um checksum de cartão para cartões de pagamento, o dígito verificador nacional para RUT e CPF), então um trecho coincidente é um identificador real, não um parecido. Nomes de pessoas não estão neste conjunto.
  • Os nomes são excluídos por taxa de falsos positivos e por dados somente sintéticos. A detecção confiável de nomes sem um modelo NER produz uma taxa de falsos positivos inaceitável - mascarando palavras comuns e termos clínicos ou de medicação - o demo roda com dados somente sintéticos (ADR-0018) sem identidades reais de pacientes, e a postura de privacidade documentada não requer redação de nomes. Um usuário que escreve “Oi, eu sou …” tem um e-mail ou telefone na mesma mensagem redigido enquanto o nome próprio chega ao modelo textualmente.
  • A passagem ativa de redação de nomes condicionada por configuração é diferida. Uma futura passagem ativa de nomes condicionada por configuração - desligada por padrão - é o caminho de melhoria sancionado para uma implantação com dados reais, mas não está implementada nem cabeada atrás de nenhum ajuste hoje. Habilitá-la é uma preocupação de produção com dados reais de pacientes, não uma preocupação do demo; é uma opção nomeada e fora de escopo, não uma lacuna esquecida.
  • A política está fixada e não pode derivar em silêncio. A exclusão é afirmada por um teste fixado e documentada no módulo de redação; mudá-la requer revisitar esta decisão e esse teste juntos.
  • Um teste fixado prova que um nome em uma mensagem que de resto carrega identificadores é deixado textual enquanto os identificadores estruturados ao seu redor são redigidos.
  • Nenhum código mudou para esta ratificação, então os trechos coincidentes do redator e seu contrato sempre-informativo ficam sem alteração, e o piso de barreira determinístico e sem chave segue em verde.
  • A exclusão deliberada de nomes é agora uma decisão explícita e citada com um residual nomeado: o achado da revisão externa fecha como aceito, não aberto.
  • A justificativa - taxa de falsos positivos, dados somente sintéticos, sem dependência de NER - é registrada uma vez e referenciada a partir da postura de governança, então um revisor vê a mesma política a partir do código, deste registro de decisão e da documentação de postura.
  • O caminho de melhoria - uma passagem ativa de nomes condicionada por configuração para implantações com dados reais - é uma opção diferida nomeada, não uma lacuna esquecida.
  • Nomes de pessoas em uma implantação com dados reais chegariam ao modelo textualmente sob a configuração de hoje; mitigar isso é exatamente a passagem condicionada por configuração diferida, que uma implantação de produção com dados reais de pacientes deve habilitar.
  • Sem mudanças de código, forma de trecho nem teste: este registro ratifica o comportamento existente e adiciona só referências cruzadas.

Ratificar a política limitada, diferir a passagem ativa de nomes (escolhida)

Seção intitulada “Ratificar a política limitada, diferir a passagem ativa de nomes (escolhida)”
  • Bom, porque coincide com o risco real: com dados somente sintéticos um nome não redigido não acarreta risco real de divulgação, enquanto um casador com forma de nome corromperia respostas clínicas.
  • Bom, porque converte uma propriedade implícita do código em uma decisão citada e fixada com um residual nomeado e um caminho de melhoria sancionado.
  • Ruim, porque não faz nada por uma implantação hipotética com dados reais até que a passagem ativa diferida seja habilitada - aceito, porque isso é uma preocupação de produção.

Implementar agora uma passagem de nomes com modelo NER (rejeitada)

Seção intitulada “Implementar agora uma passagem de nomes com modelo NER (rejeitada)”
  • Bom, porque um modelo NER daria a detecção de nomes de maior recall.
  • Ruim, porque adiciona uma dependência de execução e um custo de hospedagem de modelo que violam a postura de $0 e zero-nova-dependência-de-execução, por um benefício que o invariante somente-sintético já neutraliza aqui.

Implementar agora uma passagem de nomes por regex/heurística (rejeitada)

Seção intitulada “Implementar agora uma passagem de nomes por regex/heurística (rejeitada)”
  • Bom, porque não precisa de modelo.
  • Ruim, porque os padrões com forma de nome têm uma taxa de falsos positivos inaceitável - mascarariam palavras comuns e termos de medicação ou clínicos, degradando as respostas centrais do agente.