Confiança

O que garante isto, tecnicamente

O que garante o isolamento entre igrejas, o anonimato dos pedidos de oração, o uso de IA (BYOK, pseudonimização, teto de custo) e o RGPD operacional nesta plataforma — com a fonte de cada facto no código.

Cada facto abaixo tem, por baixo, onde se confirma no código ou na base de dados — não é uma promessa, é uma leitura. Números citados com a data em que foram lidos, porque mudam a cada alteração ao esquema.

Isolamento entre igrejas

  • Cada igreja só vê os seus próprios dados

    175 tabelas na base, 161 delas com um identificador de igreja (church_id) e políticas de segurança ao nível da linha (Row Level Security) do Postgres — não um filtro que a aplicação possa esquecer de aplicar, mas uma regra que a própria base de dados impõe a qualquer consulta, venha de onde vier.

    information_schema.columns, schema public — lido a 2026-08-13

  • A identidade da igreja vem de um token assinado, nunca do pedido

    Qual igreja é 'a minha' é decidido por uma claim assinada dentro da sessão autenticada (JWT), lida no servidor — nunca por um parâmetro que o pedido HTTP possa trazer. Um pedido a fingir-se de outra igreja não muda a resposta.

    current_church_id(), funções RLS do schema public

  • 17 fronteiras que têm de recusar mesmo quando outra regra deixaria passar

    Em Postgres, uma política RESTRICTIVE só pode TIRAR acesso — nunca dar. 17 dessas políticas (contra 491 políticas comuns, que só podem dar acesso) protegem especificamente o que não pode ter um erro de programação a expor: notas pastorais, pedidos de oração, conversas com o assistente de IA.

    pg_policies WHERE permissive = 'RESTRICTIVE' — lido a 2026-08-13

  • 186 relações que a base recusa fisicamente misturar entre igrejas

    186 das 443 chaves estrangeiras da base cruzam duas colunas (registo + igreja), não uma. Mesmo que uma regra de acesso mal escrita deixasse passar um pedido, a própria base recusa ligar o registo de uma igreja ao de outra — a integridade não depende só da política de segurança estar certa.

    information_schema.table_constraints/key_column_usage — lido a 2026-08-13

Pedidos de oração

  • Um pedido de oração anónimo é anónimo mesmo para a equipa pastoral

    Quando alguém marca um pedido como anónimo, o nome e o identificador da pessoa nunca saem da base — as consultas que a equipa pastoral usa devolvem esse campo vazio (NULL) diretamente no servidor, não escondido depois na interface. Não há caminho de código onde o dado sai e a interface só decide não o mostrar.

    get_prayer_wall(), get_prayer_queue() — supabase/migrations/20260726161000_mural_oracao_servidor.sql

Inteligência artificial

  • BYOK — a chave do modelo de IA é da igreja, não da plataforma

    Cada igreja pode usar a sua própria chave de API do fornecedor de IA (Bring Your Own Key). Os dados enviados ao modelo não passam por uma conta partilhada entre igrejas.

    src/lib/assistente/definicoes.server.ts, src/lib/assistente/pseudonimizacao.ts

  • Pseudonimização antes de qualquer envio ao modelo

    Nomes e outros dados identificáveis são substituídos antes do texto sair para o modelo de IA, e repostos só na resposta final, no lado do servidor.

    src/lib/assistente/pseudonimizacao.ts

  • Teto de custo mensal e travão de emergência

    Cada igreja define um limite de despesa mensal com IA; um interruptor manual (travão de emergência) corta imediatamente novas chamadas ao modelo, sem esperar pelo limite.

    src/lib/assistente/limites.server.ts (travaoActivo, limite_mensal_cents)

RGPD, no dia a dia

  • Exportação dos próprios dados

    Qualquer pessoa pode pedir os seus dados pessoais em formato legível, gerado a pedido — não é um relatório interno reaproveitado.

    export_my_data(), src/lib/exportCsv.ts (exportToPrintableDocument)

  • Anonimização, não só apagamento

    Uma pessoa pode ser anonimizada mantendo o histórico agregado íntegro (ex.: contagens de presenças), sem o nome nem o contacto continuarem associados a esse histórico.

    src/lib/escrita-verificada.ts (fluxo de anonimização)

  • Consentimentos e retenção configuráveis por igreja

    Cada igreja define os seus próprios prazos de conservação de dados por tipo de registo, e regista consentimentos separadamente do resto do perfil.

    /admin/retencao, /admin/privacidade

Operação

  • Backups exportáveis pela própria igreja

    Uma igreja pode gerar, a qualquer momento, uma cópia de segurança dos seus módulos centrais em CSV, sem depender de um pedido ao suporte.

    /admin/backup, src/lib/backup.server.ts

  • Autenticação de dois fatores (TOTP)

    2FA por aplicação de autenticação (TOTP), independente de SMS.

    src/lib/security.ts (enrollTotp, listMfaFactors)

  • Auditoria de acessos a dados sensíveis

    Consultas a episódios de cuidado pastoral ficam registadas em auditoria — quem acedeu, quando — não só quem editou.

    audit_log, políticas RESTRICTIVE de care_episode_notes

Em preparação

Estes dois pontos dependem de uma decisão e assinatura da entidade legal responsável — não são um facto técnico que o código já garanta hoje, por isso não entram na lista acima nem se inventam aqui.

  • Acordo de Processamento de Dados (DPA)

    Em preparação — depende da entidade legal responsável assinar o acordo. Ainda não publicado.

  • Lista pública de subprocessadores

    Em preparação — publica-se junto com o DPA, não antes.

Atualizado em