{
  "product": "BeryX",
  "vendor": "BeryxTech",
  "locale": "pt",
  "updated": "2026-10-20",
  "source": "https://beryxtech.lbostuff.tech/rfp",
  "capabilities": [
    {
      "id": "profiling",
      "analyst_criterion": "Profiling",
      "name": "Criação de perfis",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Descoberta automática e perfil de cada tabela em mais de 15 tipos de fonte — warehouses, bases operacionais, SaaS, ficheiros, documentos e streaming (Kafka e Pub/Sub). Contagens, nulos, distintos, estatísticas, distribuições e amostras limitadas, com perfil incremental em tabelas grandes.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: criação de perfis",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#profiling"
        },
        {
          "label": "Guia de conectores (lista de fontes)",
          "url": "https://beryxtech.lbostuff.tech/docs/conectores#resumo"
        },
        {
          "label": "Métodos: profiling profundo e amostragem",
          "url": "https://beryxtech.lbostuff.tech/docs/metodos#profiling-profundo"
        }
      ]
    },
    {
      "id": "monitoring",
      "analyst_criterion": "Monitoring / observability",
      "name": "Monitorização",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Monitores automáticos de atualidade, volume e schema em todas as tabelas da conexão (até 500 por conexão), a partir dos metadados do catálogo e sem configuração; drift e anomalias; motor de regras; SLO por dataset. Alertas em email, Slack, Teams e webhook, com escalas de piquete e um âmbito por canal (domínios, conexões, datasets, tipos de problema), e por SMS ou WhatsApp (conta Twilio do cliente) só para incidentes críticos e violações de SLA.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: monitorização",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#monitorização"
        },
        {
          "label": "Métodos: monitores automáticos (metadados por fonte e teto por scan)",
          "url": "https://beryxtech.lbostuff.tech/docs/metodos#monitores-automáticos"
        },
        {
          "label": "Regras de streaming (Kafka)",
          "url": "https://beryxtech.lbostuff.tech/docs/conectores#apache-kafka-tópicos-como-datasets"
        },
        {
          "label": "Métodos: anomalias, drift e monitores",
          "url": "https://beryxtech.lbostuff.tech/docs/metodos#anomalias"
        }
      ]
    },
    {
      "id": "parsing",
      "analyst_criterion": "Parsing / standardization",
      "name": "Parsing e normalização",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Tipos semânticos detetados automaticamente (email, NIF, IBAN, código postal, telefone, datas, montantes, nomes, moradas) com regras de validação sugeridas. Telefones, códigos postais, NIF, IBAN e datas em formatos mistos passam à forma canónica. Campos compostos são decompostos por regras de locale PT, ES e EN: moradas (rua, número, andar, código postal, localidade, país), nomes (título, nome, apelidos), telefones com indicativo, NIF e nome na mesma coluna, datas em texto livre e montantes com moeda. Cada coluna mostra a taxa de sucesso na amostra e os formatos que falham. A normalização é proposta em SQL no dialeto da fonte e em PySpark, só de leitura, e aplicada pelo seu processo, também por pull request. Nunca escrevemos nas fontes.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: parsing e normalização",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#parsing-e-normalização"
        },
        {
          "label": "Capacidades: limpeza e remediação por pull request",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#limpeza-e-remediação"
        },
        {
          "label": "Contratos ODCS em CI",
          "url": "https://beryxtech.lbostuff.tech/docs/ci#1-exportar-o-contrato"
        }
      ]
    },
    {
      "id": "matching",
      "analyst_criterion": "Matching / linking / merging",
      "name": "Matching e deduplicação",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Duplicados exatos e aproximados dentro de cada dataset e correspondência entre dois datasets, também de fontes diferentes, como o CRM e o ERP. As regras de correspondência configuram-se por campo: comparador (exato, normalizado, Jaro–Winkler, por palavras, numérico com tolerância ou data com janela), peso e semelhança mínima, com blocking e um limiar de correspondência e outro de revisão. Os clusters entre os dois datasets reveem-se na interface (fundir, ignorar ou repor), e a decisão fica no BeryX, no trilho de auditoria, e vale nas execuções seguintes. As regras de sobrevivência por campo (fonte prioritária, mais recente, mais completo ou mais frequente) dão um registo consolidado proposto, com a origem de cada campo, em SQL e PySpark só de leitura, que pode seguir por pull request para o processo do cliente aprovar. Num benchmark sintético rotulado, as regras sugeridas dão precisão 1,0 e recall 0,85 em 10 000 linhas. Nunca escrevemos nas fontes.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: matching e deduplicação",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#matching-e-deduplicação"
        },
        {
          "label": "Métodos: duplicados exatos e fuzzy",
          "url": "https://beryxtech.lbostuff.tech/docs/metodos#duplicados"
        },
        {
          "label": "Métodos: correspondência entre datasets",
          "url": "https://beryxtech.lbostuff.tech/docs/metodos#correspondência-entre-datasets"
        },
        {
          "label": "Métodos: regras configuráveis, clusters e benchmark",
          "url": "https://beryxtech.lbostuff.tech/docs/metodos#regras-configuráveis-e-clusters-cartão-387"
        }
      ]
    },
    {
      "id": "cleansing",
      "analyst_criterion": "Cleansing",
      "name": "Limpeza de dados",
      "status": "coberto-humano",
      "status_label": "Coberto (com intervenção humana)",
      "summary": "Limpeza com intervenção humana: propomos a correção — SQL e PySpark gerados, com poupança estimada e risco analisado —, abrimos um pull request no repositório do cliente e uma pessoa aprova a aplicação, num fluxo governado (proposto, aceite, aplicado, verificado no scan seguinte). Nunca escrevemos nas fontes sem essa aprovação.",
      "missing": null,
      "positioning": "Propomos SQL/PySpark e PR no repositório; nunca escrevemos na fonte. Pedir credenciais de escrita seria a primeira objeção da sua equipa de segurança.",
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: limpeza e remediação",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#limpeza-e-remediação"
        },
        {
          "label": "Acesso read-only mecânico",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#acesso-read-only-mecânico"
        },
        {
          "label": "Matriz de comparação: correção",
          "url": "https://beryxtech.lbostuff.tech/comparar#matriz"
        }
      ]
    },
    {
      "id": "enrichment",
      "analyst_criterion": "Enrichment",
      "name": "Enriquecimento",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Propomos valores a partir de fontes de referência, cada um com a fonte, a data da consulta e a confiança: a localidade, o concelho e o distrito pelo código postal português (GeoAPI.pt, com dados dos CTT e do INE), a localidade pelo código postal espanhol (Nominatim do OpenStreetMap, que recebe só o código postal), as coordenadas pela morada (na sua própria instância Nominatim, a única que recebe moradas), o nome e a morada registados de uma empresa pelo NIF de pessoa coletiva (VIES da Comissão Europeia) e os códigos ISO de país e de moeda (listas locais). Cada proposta dá a cobertura na amostra e sai em SQL no dialeto da fonte e em PySpark: uma contagem só de leitura e um UPDATE proposto, ou um SELECT com os valores propostos, que o seu processo aplica por pull request ou SQL depois de aprovar a sugestão. Cada fornecedor externo recebe só o campo a enriquecer, depois de um administrador o autorizar no workspace; a sua instância Nominatim autoriza-se com o URL e com uma confirmação própria de dados pessoais. Nunca escrevemos nas fontes.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: enriquecimento",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#enriquecimento"
        },
        {
          "label": "Segurança: o que sai para cada fornecedor de referência",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#enriquecimento-proposto-o-que-sai-para-cada-fornecedor"
        },
        {
          "label": "Capacidades: limpeza e remediação por pull request",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#limpeza-e-remediação"
        }
      ]
    },
    {
      "id": "metadata",
      "analyst_criterion": "Metadata management",
      "name": "Gestão de metadados",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Catálogo automático com domínios; linhagem por chaves estrangeiras, SQL das views ao nível da coluna, manifest do dbt e OpenLineage; sensibilidade por coluna e README por dataset aprovado por um humano. Glossário de negócio nativo: termos com definição, sinónimos, owner, domínio e estado (rascunho, aprovado ou depreciado), ligados a colunas e datasets. As ligações sugeridas pelo nome, pelos sinónimos, pelo tipo semântico e pelas descrições do dbt nascem sempre como proposta, e só uma pessoa as aprova. Cada dataset pode ter owner (herdado do domínio quando está vazio) e steward, e tags por dataset e por coluna, livres ou de uma lista controlada do workspace. As alterações de owner, steward e tags, a sensibilidade posta à mão, as ligações de termos a colunas e as edições dos termos ficam no histórico (o quê, quem, quando, antes e depois), com diff entre duas datas. O histórico começa na versão que o introduziu: as alterações anteriores não foram convertidas, e a criação de termos, as sugestões automáticas e o que o datavault.yaml aplica ainda não entram. O dicionário de dados exporta-se por dataset, domínio ou workspace em CSV, JSON e Markdown, com descrições, tipos, sensibilidade, termos, tags, owner, steward, regras e SLA. Também se exporta em ficheiros para carregar no OpenMetadata (um pedido de criação de tabela por dataset; o owner, o SLA e as regras vão à parte, porque o pedido não os aceita) e no DataHub (MCPs para o datahub ingest). É um ficheiro para o seu processo carregar: não o enviamos. A pesquisa transversal encontra datasets, colunas, termos, tags e owners e respeita os domínios restritos. O owner, as tags, o histórico, o dicionário e a pesquisa usam-se pela API: ainda não têm página na app. Os veredictos de qualidade publicam-se no OpenMetadata, no DataHub, no Collibra (Import API v2), no Microsoft Purview e no Unity Catalog (os três últimos validados com transporte simulado; validação em tenant do cliente pendente).",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: gestão de metadados",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#gestão-de-metadados"
        },
        {
          "label": "OpenLineage (emitir e consumir)",
          "url": "https://beryxtech.lbostuff.tech/docs/openlineage#consumir-o-lineage-do-cliente-no-grafo-do-beryx-cartão-130"
        },
        {
          "label": "Catálogo externo: OpenMetadata e DataHub",
          "url": "https://beryxtech.lbostuff.tech/docs/catalogo-externo#o-que-aparece-no-openmetadata"
        },
        {
          "label": "Catálogo externo: Collibra (Import API v2, validado com transporte simulado; validação em tenant do cliente pendente)",
          "url": "https://beryxtech.lbostuff.tech/docs/catalogo-externo#collibra-catsync-v3"
        },
        {
          "label": "Catálogo externo: Unity Catalog (tags beryx_* e leitura para o catálogo leve, validado com transporte simulado; validação em workspace do cliente pendente)",
          "url": "https://beryxtech.lbostuff.tech/docs/catalogo-externo#unity-catalog-databricks-cartão-691"
        }
      ]
    },
    {
      "id": "orchestration",
      "analyst_criterion": "Workflow / orchestration",
      "name": "Orquestração e fluxo de trabalho",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Webhook do dbt Cloud e pacote Airflow com gate de qualidade; gate de regras e data-diff em CI; servidor MCP para agentes; configuração do workspace como código; fluxo de problemas com responsáveis, escalas e agendamentos. Validação no ponto de entrada, só de leitura: o integrador ou a pipeline mandam até 5 000 registos por pedido à API antes de os escrever e recebem o veredito de cada um com as regras que o BeryX já monitoriza no dataset (campos obrigatórios, padrões, intervalos, NIF, NISS e IBAN com dígito de controlo, listas de referência ISO e do workspace), o código do motivo de cada falha e o veredito do lote. Nada é guardado nem enviado a um LLM e a fonte não é lida: rejeitar ou pôr em quarentena fica do lado do cliente. As regras que medem o dataset inteiro (unicidade, atualidade, volume) vêm marcadas como não aplicáveis.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: orquestração",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#orquestração-e-fluxo-de-trabalho"
        },
        {
          "label": "dbt Cloud e Airflow",
          "url": "https://beryxtech.lbostuff.tech/docs/orquestradores#2-airflow--pacote-beryx-airflow"
        },
        {
          "label": "Gate de regras em CI",
          "url": "https://beryxtech.lbostuff.tech/docs/ci#gate-de-regras-em-ci-cigate-radar-vaga-3"
        },
        {
          "label": "Servidor MCP",
          "url": "https://beryxtech.lbostuff.tech/docs/mcp#tools-disponíveis"
        },
        {
          "label": "Portal de developers (API, incluindo POST /datasets/{id}/validate)",
          "url": "https://beryxtech.lbostuff.tech/developers"
        }
      ]
    },
    {
      "id": "business_ux",
      "analyst_criterion": "Business-user experience",
      "name": "Experiência para utilizadores de negócio",
      "status": "coberto",
      "status_label": "Coberto",
      "summary": "Relatórios por perfil (engenharia, gestão, executivo) com impacto em euros, em PDF, agendáveis e partilháveis; assistente em linguagem natural; primeiro scan ao vivo; interface em português, inglês e espanhol.",
      "missing": null,
      "positioning": null,
      "planned": null,
      "evidence": [
        {
          "label": "Capacidades: utilizadores de negócio",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#experiência-para-utilizadores-de-negócio"
        },
        {
          "label": "Página de produto",
          "url": "https://beryxtech.lbostuff.tech/"
        },
        {
          "label": "Novidades semanais (changelog)",
          "url": "https://beryxtech.lbostuff.tech/changelog"
        }
      ]
    }
  ],
  "security": [
    {
      "id": "read_only",
      "question": "O BeryX escreve nas nossas fontes de dados?",
      "answer": "Não. A garantia está no código, não só nas permissões: o cliente HTTP dos conectores recusa qualquer verbo de escrita antes de sair para a rede, nenhum conector pode ter um método de escrita, e as sessões PostgreSQL abrem em modo só de leitura.",
      "evidence": [
        {
          "label": "Acesso read-only mecânico",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#acesso-read-only-mecânico"
        }
      ]
    },
    {
      "id": "credentials",
      "question": "Como são guardadas as credenciais das nossas fontes?",
      "answer": "Cifradas com Fernet antes de serem gravadas, nunca devolvidas pela API nem escritas em logs. As chaves rodam sem interrupção: várias chaves ativas, a primeira cifra e todas decifram, e um script re-cifra tudo com a chave nova.",
      "evidence": [
        {
          "label": "Credenciais cifradas e rotação de chaves",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#credenciais-cifradas-e-rotação-de-chaves"
        }
      ]
    },
    {
      "id": "ssrf",
      "question": "Um URL de ligação malicioso pode ser usado para chegar à vossa rede interna (SSRF)?",
      "answer": "Não. Só aceitamos https, recusamos hosts que resolvam para endereços internos e fixamos o IP validado na ligação (pinning de DNS), repetindo a validação em cada redirect — o que fecha também o DNS rebinding.",
      "evidence": [
        {
          "label": "Proteção anti-SSRF com pinning de DNS",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#proteção-anti-ssrf-com-pinning-de-dns"
        }
      ]
    },
    {
      "id": "gdpr",
      "question": "Podemos exportar e apagar os nossos dados sem pedir ao suporte?",
      "answer": "Sim. Os administradores exportam os dados do workspace e apagam-no em cascata, e cada utilizador apaga a própria conta — tudo na aplicação e na API.",
      "evidence": [
        {
          "label": "RGPD: exportação e eliminação",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#rgpd-exportação-e-eliminação-self-service"
        },
        {
          "label": "Política de privacidade",
          "url": "https://beryxtech.lbostuff.tech/privacidade"
        }
      ]
    },
    {
      "id": "ai_label",
      "question": "Como identificam o conteúdo gerado por IA?",
      "answer": "Todo o conteúdo produzido com um modelo leva um rodapé que o identifica, com o modelo e o fornecedor que de facto responderam, nos termos do art. 50.º do Regulamento (UE) 2024/1689. Exportamos também o dossiê de evidência do art. 10.º.",
      "evidence": [
        {
          "label": "Rotulagem de conteúdo de IA",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#rotulagem-de-conteúdo-de-ia-art-50º-do-ai-act"
        }
      ]
    },
    {
      "id": "byok",
      "question": "Podemos usar a nossa chave ou o Claude da nossa conta cloud?",
      "answer": "Sim. Chave Anthropic própria por workspace, política de IA (incluindo «IA desligada») e, no plano Enterprise, Claude na sua conta Google Cloud (Vertex AI, regiões europeias), sem a BeryxTech guardar segredos dessa rota. Claude na sua conta AWS (Amazon Bedrock, regiões da UE): em breve.",
      "evidence": [
        {
          "label": "Os teus modelos",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#os-teus-modelos-chave-própria-amazon-bedrock-e-vertex-ai"
        },
        {
          "label": "Amazon Bedrock (em breve): como vai funcionar",
          "url": "https://beryxtech.lbostuff.tech/docs/byok-bedrock#como-funciona"
        },
        {
          "label": "Onboarding Vertex AI",
          "url": "https://beryxtech.lbostuff.tech/docs/byok-vertex#como-funciona"
        }
      ]
    },
    {
      "id": "anonymization",
      "question": "Que dados nossos chegam a um modelo de linguagem?",
      "answer": "Por omissão, só a Anthropic recebe dados de clientes, em amostras limitadas. As amostras podem ser anonimizadas antes de sair (NIF, NISS, IBAN, telefone, nomes), e um fornecedor alternativo nunca recebe amostras em bruto.",
      "evidence": [
        {
          "label": "Anonimização antes do LLM",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#anonimização-antes-do-llm"
        }
      ]
    },
    {
      "id": "certifications",
      "question": "Têm certificação ISO 27001 ou relatório SOC 2?",
      "answer": "Ainda não. Estão em programa, com base nos controlos descritos nesta página. Até lá, respondemos com a evidência técnica de cada controlo — não com selos que não temos.",
      "evidence": [
        {
          "label": "Certificações: ISO 27001 e SOC 2",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#certificações-iso-27001-e-soc-2"
        },
        {
          "label": "Registo de auditoria",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#registo-de-auditoria"
        }
      ]
    },
    {
      "id": "identity",
      "question": "Suportam SSO, MFA e aprovisionamento SCIM?",
      "answer": "SSO por OIDC com o fornecedor de identidade do cliente (Entra ID, Google Workspace, Keycloak e outros), com papéis por workspace, equipas e registo de auditoria exportável em CSV. As contas com password têm MFA por TOTP (app autenticadora), com códigos de recuperação de uso único: é obrigatória para os administradores da organização e para o staff da BeryxTech, e o administrador do workspace pode exigi-la a todos os membros. As contas SSO usam a MFA do seu fornecedor de identidade. O suporte da BeryxTech só entra num workspace com o consentimento de um administrador do cliente, em modo de leitura e por 72 horas no máximo, e cada acesso fica no registo de auditoria. Aprovisionamento SCIM 2.0 por organização, testado com o Entra ID e o Okta: o fornecedor de identidade cria e desativa as contas e mantém as equipas, e desativar uma conta fecha as sessões dela no momento. O token SCIM é gerado pelo administrador da organização através da API; ainda não há uma página na app para o gerar.",
      "evidence": [
        {
          "label": "Controlo de acessos e MFA",
          "url": "https://beryxtech.lbostuff.tech/seguranca#access"
        },
        {
          "label": "Registo de auditoria",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#registo-de-auditoria"
        }
      ]
    },
    {
      "id": "sla",
      "question": "Têm SLA de disponibilidade e de suporte?",
      "answer": "Ainda não em contrato. O SLA só passa a contrato depois de um trimestre de disponibilidade medida e de uma política de suporte por severidade, ainda em definição. Hoje: backups diários com recuperação para um ponto no tempo (7 dias), verificados em cada deploy, e o produto continua a funcionar em modo offline se a IA falhar. Os prazos de 7, 30 e 90 dias da nossa política de vulnerabilidades são para corrigir falhas de segurança, não um SLA de suporte.",
      "evidence": [
        {
          "label": "Backups e recuperação",
          "url": "https://beryxtech.lbostuff.tech/seguranca#backups"
        }
      ]
    },
    {
      "id": "accessibility",
      "question": "Cumprem o WCAG 2.2 AA e a EN 301 549? Têm VPAT ou ACR?",
      "answer": "Parcialmente, e o ACR está disponível. O relatório de conformidade de acessibilidade (baseado no VPAT® 2.5) avalia os 55 critérios WCAG 2.2 de nível A e AA na app e no site, com a cláusula EN 301 549 de cada um, e diz o que ainda falta e onde. O lint de acessibilidade, o axe e o contraste dos tokens correm no CI. É uma auto-avaliação, não uma auditoria externa.",
      "evidence": [
        {
          "label": "ACR WCAG 2.2: resumo por estado",
          "url": "https://beryxtech.lbostuff.tech/docs/acessibilidade#resumo"
        },
        {
          "label": "ACR: os 55 critérios",
          "url": "https://beryxtech.lbostuff.tech/docs/acessibilidade#critérios-wcag-22-a-e-aa"
        },
        {
          "label": "ACR: lacunas conhecidas e plano",
          "url": "https://beryxtech.lbostuff.tech/docs/acessibilidade#lacunas-conhecidas-e-plano"
        }
      ]
    },
    {
      "id": "regulatory_dossier",
      "question": "Conseguem provar, por elemento de dados crítico, que os requisitos de qualidade do BCBS 239 ou da Solvência II estão controlados?",
      "answer": "Em parte, e dizemos onde não. Cada dataset ou coluna pode ser marcado como elemento de dados crítico do BCBS 239, da Solvência II ou de outra regulação, com owner e referência. O dossiê regulatório mostra, por princípio do BCBS 239 (3 a 6) ou por número do art. 19.º do Regulamento Delegado (UE) 2015/35, os controlos de qualidade de cada elemento, o último resultado de cada regra, os problemas abertos, o SLA, a linhagem e o contrato de dados, e aponta as lacunas. Exporta-se em CSV e PDF e partilha-se por link. A exatidão e a integridade ainda aparecem como lacuna em todos os elementos, porque nenhum tipo de regra do BeryX as mede hoje. A interface do dossiê ainda não existe: por agora usa-se pela API e pelos relatórios. O dossiê é evidência para o supervisor, não uma declaração de conformidade.",
      "evidence": [
        {
          "label": "Capacidades: elementos de dados críticos e dossiê regulatório",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#elementos-de-dados-críticos-e-dossiê-regulatório"
        },
        {
          "label": "Portal de developers (GET /cde/dossier)",
          "url": "https://beryxtech.lbostuff.tech/developers"
        }
      ]
    }
  ],
  "not_done": [
    {
      "id": "destructive_remediation",
      "title": "Remediação destrutiva nas fontes",
      "why": "Propomos a correção e abrimos o pull request; quem aplica é o cliente. Escrever nas fontes exigiria credenciais de escrita — a objeção n.º 1 das equipas de segurança europeias.",
      "evidence": [
        {
          "label": "O que não fazemos, e porquê",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#o-que-não-fazemos-e-porquê"
        },
        {
          "label": "Limpeza e remediação",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#limpeza-e-remediação"
        }
      ]
    },
    {
      "id": "mdm_golden_record",
      "title": "MDM e golden record com escrita",
      "why": "Detetamos duplicados e propomos a consolidação, mas não mantemos um registo-mestre nem escrevemos a versão «vencedora» nas fontes. Complementamos a ferramenta de MDM que já tenha.",
      "evidence": [
        {
          "label": "O que não fazemos, e porquê",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#o-que-não-fazemos-e-porquê"
        },
        {
          "label": "Matching e deduplicação",
          "url": "https://beryxtech.lbostuff.tech/docs/capacidades#matching-e-deduplicação"
        }
      ]
    },
    {
      "id": "multimodal_images",
      "title": "Análise multimodal de imagens",
      "why": "Lemos os documentos pela camada de texto. Imagens não são processadas, e um PDF digitalizado sem texto é assinalado como a precisar de OCR em vez de ser enviado a um modelo de visão.",
      "evidence": [
        {
          "label": "O que não fazemos, e porquê",
          "url": "https://beryxtech.lbostuff.tech/docs/seguranca#o-que-não-fazemos-e-porquê"
        }
      ]
    }
  ]
}
