teqo-backup/scripts/lib/faceConsentTexts.mjs

53 lines
4.1 KiB
JavaScript

/**
* C242 — the legal texts the selfie search resolves by stable key, versioned in
* the repo so the delivery that opens the surface owns what the visitor reads:
*
* - `busca-selfie-fotos` is the QUERY consent: authorizes the use of the
* visitor's own selfie/biometrics for this one search, on device.
* - `busca-selfie-indice` is the PUBLIC NOTICE of the anonymous archive index
* (scope B): transparency about the descriptor index over approved photos
* and the self-service opt-out. It is not an enrollment consent — nobody is
* individually enrolled.
*
* Both are written to the `consent` collection by `pnpm seed:face-consents`
* (create-if-missing, idempotent, guarded); editing a text here and re-running
* updates the row (versioned by Payload).
*/
/** Builds the Lexical root of a Consent text from plain paragraphs. */
export const buildConsentRichText = (paragraphs) => ({
root: {
type: 'root',
children: paragraphs.map((text) => ({
type: 'paragraph',
children: [{ type: 'text', text, version: 1 }],
direction: null,
format: '',
indent: 0,
version: 1,
})),
direction: null,
format: '',
indent: 0,
version: 1,
},
})
export const FACE_SEARCH_CONSENT_PARAGRAPHS = [
'Autorizo, de forma livre, informada e específica, o uso da minha selfie e dos dados biométricos faciais dela extraídos exclusivamente para esta consulta: procurar, entre as fotos públicas aprovadas do acervo do mandato de Jorge Solla, aquelas em que eu apareço.',
'O reconhecimento acontece no meu próprio aparelho. A imagem da selfie não é enviada nem armazenada; ao servidor é enviado apenas o vetor matemático necessário para a comparação, que é descartado ao fim da consulta e não fica guardado.',
'Estou ciente de que o resultado não mostra nomes de terceiros e não informa grau de semelhança. A busca pode não encontrar fotos, e posso interrompê-la a qualquer momento.',
'A base legal é o consentimento específico para dados pessoais sensíveis (art. 11, I, da LGPD). Posso retirar este consentimento a qualquer momento, sem custo, pelo próprio fluxo ou pelos canais do mandato — a retirada não afeta o que já foi realizado.',
'Controlador: campanha Jorge Solla 1313. Mais detalhes na Política de Privacidade do site.',
]
export const FACE_INDEX_CONSENT_PARAGRAPHS = [
'Aviso público sobre o índice de fotos: as fotos públicas aprovadas do acervo podem conter rostos de várias pessoas. Para que cada pessoa encontre as próprias fotos pela busca por selfie, o sistema mantém um índice biométrico anônimo — vetores matemáticos extraídos dos rostos presentes nessas fotos, sem nome, sem vínculo com cadastro de pessoas e sem qualquer identificação de quem aparece.',
'O índice serve para localizar fotos: encontrar as fotos da própria pessoa que faz a busca e alimentar o filtro “Pessoa pública” do álbum. Esse filtro identifica exclusivamente as figuras públicas do catálogo curado e aprovado do mandato, com aval jurídico registrado; qualquer rosto fora desse catálogo continua anônimo no índice, sem nome e sem vínculo com cadastro, e nunca é usado para identificar, nomear ou listar terceiros, nem cruza os dados biométricos com contatos, lideranças ou apoiadores.',
'O catálogo de figuras é curado e auditável: cada figura tem descritores de referência de retratos oficiais ou do arquivo do mandato, revisados por curadoria humana, e pode ser desativada a qualquer momento, deixando de aparecer no filtro.',
'Qualquer pessoa pode retirar seu rosto do índice a qualquer momento, sem custo: use a opção “Minha presença” na página da busca e siga as instruções. A retirada apaga do índice as referências biométricas correspondentes, e o rosto deixa de ser encontrado.',
'Para pedir a remoção de uma foto específica, use o canal indicado no álbum público. Fotos que não estejam aprovadas para o público não fazem parte do índice.',
]
export const FACE_SEARCH_CONSENT_TEXT = buildConsentRichText(FACE_SEARCH_CONSENT_PARAGRAPHS)
export const FACE_INDEX_CONSENT_TEXT = buildConsentRichText(FACE_INDEX_CONSENT_PARAGRAPHS)