{"openapi":"3.1.0","info":{"title":"BeryX API","version":"1.78.0","description":"API REST do BeryX — só de leitura, exceto o gate RAG (`POST /rag-gate`). Autentica com um token de API `dvk_*` no header `Authorization: Bearer`. Guia, exemplos, changelog e política de estabilidade em /datavault/developers.\n\nEstabilidade: este documento é o contrato. Uma versão minor só acrescenta (ignora campos e valores de enum que não conheças); quebras só numa major. Uma operação depreciada responde com os headers `Deprecation`, `Sunset` e `Link` (`rel=\"deprecation\"`) e é anunciada no changelog pelo menos 180 dias antes de deixar de responder.\n\nRate limiting: cada token tem um limite próprio (além do limite por IP); as respostas trazem `X-RateLimit-Limit`, `X-RateLimit-Remaining` e `X-RateLimit-Reset`, e acima do limite a API responde `429` com `Retry-After` (segundos).\n\nErros: o corpo dos `4xx` é `{\"detail\", \"code\", \"request_id\"}` (schema `ErrorResponse`). `detail` é o motivo legível (na validação, `422`, a lista dos campos); `code` é estável quando existe (`auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`), senão `null` — decide por ele, não pelo texto. `401`: token em falta, inválido, expirado ou revogado. `402`: limite do plano, com `plan` e `limit`. `403`: escrita com um token só de leitura, workspace suspenso ou acesso negado. `404`: o recurso não existe ou é de outro workspace. Todas as respostas trazem o header `X-Request-ID` — o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID — e os erros repetem-no em `request_id`: cita-o ao suporte."},"servers":[{"url":"https://api.praxis.lbostuff.tech","description":"Produção"}],"tags":[{"name":"health","description":"Estado do serviço — sem autenticação."},{"name":"datasets","description":"Tabelas monitorizadas: score, contrato, linhagem, veredito de CI."},{"name":"contracts","description":"Contratos ODCS acordados com o produtor da fonte: versões numeradas, diff entre versões e propostas em revisão."},{"name":"catalog","description":"Vista agregada do catálogo."},{"name":"scans","description":"Execuções de profiling e regras."},{"name":"issues","description":"Problemas de qualidade detetados."},{"name":"incidents","description":"Issues relacionadas agrupadas via linhagem."},{"name":"tickets","description":"Tickets externos (Jira, Linear e outros) ligados a issues, incidentes, sugestões, propostas de contrato e classificações de colunas."},{"name":"signals","description":"Sinais de anomalia por confirmar."},{"name":"suggestions","description":"Sugestões de melhoria (heurísticas e IA)."},{"name":"rules","description":"Regras de qualidade ativas."},{"name":"rule-packs","description":"Packs de regras curados por indústria: pré-visualizar e propor ao dataset."},{"name":"duplicates","description":"Clusters de registos duplicados."},{"name":"lineage","description":"Linhagem entre datasets e o fluxo de qualidade por camada (Sankey)."},{"name":"synthetic","description":"Pack de dados sintéticos com várias tabelas e FKs coerentes, gerado a partir dos perfis guardados, para dev/test e fixtures de CI (permitido a tokens; nenhuma linha real)."},{"name":"knowledge","description":"Base de conhecimento: relatórios, RCAs e decisões."},{"name":"reports","description":"Relatórios IA gerados (Markdown e HTML) e o percurso de cada geração."},{"name":"routines","description":"Catálogo dos passos do pipeline de relatórios: o que entra, o que sai, o que se configura."},{"name":"dashboard","description":"Métricas por persona."},{"name":"governance","description":"Eficácia do programa de governação: KPIs de cobertura, resolução, SLA, adoção, scores por dimensão, incidentes e uso, com metas, semáforo e tendência mensal."},{"name":"bi","description":"Feeds tabulares estáveis para Excel e Power BI: scores, issues, SLO, custos e atividade em JSON ou CSV, paginados, com ETag. Guia do Power Query em POWER_BI.md."},{"name":"compliance","description":"Dossiê do AI Act (plano Business) e dossiê regulatório dos elementos de dados críticos (BCBS 239, Solvência II): controlos, resultados, lacunas e linhagem."},{"name":"connections","description":"Fontes ligadas (sem credenciais)."},{"name":"reconcile","description":"Reconciliação de contagens de linhas entre dois datasets (origem ↔ destino), a partir dos perfis."},{"name":"rag-gate","description":"Gate de qualidade para pipelines RAG: veredito por documento antes de indexar (escrita permitida a tokens)."},{"name":"record-validation","description":"Validação síncrona de registos contra as regras do dataset: veredito por registo e do lote, sem guardar nada (permitida a tokens)."},{"name":"consumers","description":"Agentes e aplicações que registam o que consomem e a decisão de confiança que viram (registo permitido a tokens; só ids e rótulos)."},{"name":"ide","description":"Qualidade inline no editor (extensão VS Code): resumo por tabela referenciada num ficheiro SQL/dbt e perfil por coluna — só metadados."},{"name":"orchestrators","description":"Runs de orquestradores (Airflow, dbt Cloud) guardados como contexto do diagnóstico de causa-raiz; o pacote beryx-airflow reporta-os com um token."}],"paths":{"/api/v1/health":{"get":{"tags":["health"],"summary":"Health Check","operationId":"health_check_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}}},"security":[],"description":"Liveness — responde sem autenticação."}},"/api/v1/version":{"get":{"tags":["health"],"summary":"Get Version","description":"Versão do produto, commit a servir (`build_sha`, 7 hex) e versão desta API — responde sem autenticação.","operationId":"get_version_api_v1_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[]}},"/api/v1/health/ready":{"get":{"tags":["health"],"summary":"Readiness","description":"Readiness: BD obrigatória; mensageria só reportada — a API continua\nutilizável sem broker (os endpoints assíncronos devolvem 503 próprios).","operationId":"readiness_api_v1_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Readiness Api V1 Health Ready Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}}},"security":[]}},"/api/v1/connections":{"get":{"tags":["connections"],"summary":"List Connections","operationId":"list_connections_api_v1_connections_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionOut"},"title":"Response List Connections Api V1 Connections Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Fontes ligadas ao workspace. Nunca inclui credenciais."}},"/api/v1/connections/presets":{"get":{"tags":["connections"],"summary":"List Public Presets","description":"Galeria de fontes públicas de exemplo — reais, vivas, sem conta.","operationId":"list_public_presets_api_v1_connections_presets_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Public Presets Api V1 Connections Presets Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/connections/types":{"get":{"tags":["connections"],"summary":"List Connector Types","description":"Tipos do registo com metadados e o estado do driver (find_spec — nada é importado).\n\nO wizard desativa os tipos sem driver em vez de deixar criar e falhar no teste.","operationId":"list_connector_types_api_v1_connections_types_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectorTypeOut"},"title":"Response List Connector Types Api V1 Connections Types Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/connections/demo/packs":{"get":{"tags":["connections"],"summary":"List Demo Packs","description":"Seed packs por indústria: ERP, e-commerce, fintech PT, saúde.\n\nCada pack traz os problemas plantados e a história de cada um — o guião da\ndemo comercial — e o pack de regras da galeria com que emparelha.","operationId":"list_demo_packs_api_v1_connections_demo_packs_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DemoPackOut"},"title":"Response List Demo Packs Api V1 Connections Demo Packs Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/connections/{connection_id}":{"get":{"tags":["connections"],"summary":"Get Connection","operationId":"get_connection_api_v1_connections__connection_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Detalhe de uma fonte, sem credenciais."}},"/api/v1/connections/{connection_id}/query-log":{"get":{"tags":["connections"],"summary":"List Source Query Log","description":"«O que o DataVault executou na tua base»: statements normalizados (sem\nvalores), com execuções, duração, linhas e endpoint (primário/réplica).","operationId":"list_source_query_log_api_v1_connections__connection_id__query_log_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},{"name":"operation","in":"query","required":false,"schema":{"anyOf":[{"enum":["scan","discover","test"],"type":"string"},{"type":"null"}],"title":"Operation"}},{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":366,"minimum":1},{"type":"null"}],"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":100,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SourceQueryLogOut"},"title":"Response List Source Query Log Api V1 Connections  Connection Id  Query Log Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/connections/{connection_id}/query-log/export":{"get":{"tags":["connections"],"summary":"Export Source Query Log","description":"O mesmo relatório para entregar ao DBA, em CSV ou JSON (download).","operationId":"export_source_query_log_api_v1_connections__connection_id__query_log_export_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"format","in":"query","required":false,"schema":{"enum":["csv","json"],"type":"string","default":"csv","title":"Format"}},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},{"name":"operation","in":"query","required":false,"schema":{"anyOf":[{"enum":["scan","discover","test"],"type":"string"},{"type":"null"}],"title":"Operation"}},{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":366,"minimum":1},{"type":"null"}],"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/connections/{connection_id}/engineering":{"get":{"tags":["connections"],"summary":"Get Engineering","description":"Estado da varredura de engenharia: opt-in, última varredura e issues abertos.","operationId":"get_engineering_api_v1_connections__connection_id__engineering_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Engineering Api V1 Connections  Connection Id  Engineering Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets":{"get":{"tags":["datasets"],"summary":"List Datasets","description":"Catálogo de datasets com o score mais recente. Pesquisa com `q`, pagina com `limit`/`offset`; o total vem no header `X-Total-Count`.","operationId":"list_datasets_api_v1_datasets_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Pesquisa em schema/tabela/nome","title":"Q"},"description":"Pesquisa em schema/tabela/nome"},{"name":"sort","in":"query","required":false,"schema":{"enum":["name","usage"],"type":"string","description":"name (schema/tabela) ou usage (queries/dia, mais usados primeiro)","default":"name","title":"Sort"},"description":"name (schema/tabela) ou usage (queries/dia, mais usados primeiro)"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Extras separados por vírgula: `trust` (trust score da página)","title":"Include"},"description":"Extras separados por vírgula: `trust` (trust score da página)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":500,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DatasetOut"},"title":"Response List Datasets Api V1 Datasets Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/find":{"get":{"tags":["datasets"],"summary":"Find Datasets Route","description":"Pesquisa composta no catálogo: todos os filtros dados em conjunto (camada medallion,\ndomínio, PII, score mínimo, classe de uso). Até 40 datasets, só nomes de colunas PII.\nÉ a tool `find_datasets` do assistente e do MCP.","operationId":"find_datasets_route_api_v1_datasets_find_get","security":[{"ApiToken":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"texto em schema/tabela/termo","title":"Query"},"description":"texto em schema/tabela/termo"},{"name":"layer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"bronze | silver | gold","title":"Layer"},"description":"bronze | silver | gold"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"id ou nome do domínio","title":"Domain"},"description":"id ou nome do domínio"},{"name":"has_pii","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"só com (true) ou sem (false) PII","title":"Has Pii"},"description":"só com (true) ou sem (false) PII"},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"title":"Min Score"}},{"name":"usage_class","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"hot | active | cold | dead","title":"Usage Class"},"description":"hot | active | cold | dead"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphFindOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}":{"get":{"tags":["datasets"],"summary":"Get Dataset","operationId":"get_dataset_api_v1_datasets__dataset_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetDetailOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Detalhe do dataset: colunas, último profiling por coluna, histórico de score, issues abertos e sugestões."}},"/api/v1/datasets/{dataset_id}/auto-monitors":{"get":{"tags":["datasets"],"summary":"Get Dataset Auto Monitors","description":"Estado dos monitores automáticos (freshness/volume/schema) do dataset.","operationId":"get_dataset_auto_monitors_api_v1_datasets__dataset_id__auto_monitors_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoMonitorsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/incremental-profiling":{"get":{"tags":["datasets"],"summary":"Get Dataset Incremental Profiling","description":"Perfil incremental: flag, coluna temporal e como correu o último perfil.","operationId":"get_dataset_incremental_profiling_api_v1_datasets__dataset_id__incremental_profiling_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncrementalProfilingOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/tuning":{"get":{"tags":["datasets"],"summary":"Get Dataset Tuning","description":"Cartão #157: limiares das anomalias afinados pelo feedback (degrau, contagens,\no que o próximo «ignorar» faz) e reajustes de regras à espera de aprovação.","operationId":"get_dataset_tuning_api_v1_datasets__dataset_id__tuning_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetTuningOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/freshness":{"get":{"tags":["datasets"],"summary":"Get Dataset Freshness","description":"Coluna que mede a frescura (fixada ou escolhida em cada scan), o timestamp\nmais recente do último perfil em UTC, o fuso assumido e a regra que a mede.","operationId":"get_dataset_freshness_api_v1_datasets__dataset_id__freshness_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/data-country":{"get":{"tags":["datasets"],"summary":"Get Dataset Data Country","description":"País dos dados do dataset (cartão #513): o próprio, o efetivo (dataset →\nconexão → workspace) e de onde vem.","operationId":"get_dataset_data_country_api_v1_datasets__dataset_id__data_country_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataCountryOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/label-quality":{"get":{"tags":["datasets"],"summary":"Get Dataset Label Quality","description":"Qualidade de rótulos: extra disponível?, configuração, porta PII e último resultado.","operationId":"get_dataset_label_quality_api_v1_datasets__dataset_id__label_quality_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelQualityOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/parsing":{"get":{"tags":["datasets"],"summary":"Get Dataset Parsing","description":"Campos compostos do último perfil (cartão #386): tipo, locale, componentes,\ncobertura e máscaras do que não se decompõe. Só leitura; a proposta de\nnormalização é a sugestão `parse_standardize:<coluna>` do scan.","operationId":"get_dataset_parsing_api_v1_datasets__dataset_id__parsing_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetParsingOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/sensitivity":{"get":{"tags":["datasets"],"summary":"Get Dataset Sensitivity","description":"Classificação de sensibilidade coluna a coluna (public/internal/confidential/pii),\ncom a origem (auto/manual), autor+data, sugestões herdadas por linhagem e rasto.","operationId":"get_dataset_sensitivity_api_v1_datasets__dataset_id__sensitivity_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetSensitivityOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract":{"get":{"tags":["datasets"],"summary":"Get Dataset Contract","description":"Contrato de dados ODCS do estado atual do dataset.\n\nVersiona-o no repositório e valida-o em CI com scripts/validate_contract.py.\n`source=active` devolve o contrato ACEITE pelo produtor dos dados — 404\nenquanto nenhuma proposta foi aceite.","operationId":"get_dataset_contract_api_v1_datasets__dataset_id__contract_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"source","in":"query","required":false,"schema":{"enum":["observed","active"],"type":"string","default":"observed","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract.dbt.yml":{"get":{"tags":["datasets"],"summary":"Get Dataset Dbt Contract","description":"Contrato como `schema.yml` de dbt com `contract: {enforced: true}`.\n\nO ODCS é a fonte de verdade; este ficheiro é um artefacto gerado — mantém\numa só definição e evita que os dois esquemas divirjam.","operationId":"get_dataset_dbt_contract_api_v1_datasets__dataset_id__contract_dbt_yml_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/lineage":{"get":{"tags":["datasets"],"summary":"Get Dataset Lineage","description":"Linhagem direta do dataset: upstream (fontes) e downstream (impacto).\n\n`exposures` (cartão #107): consumidores dbt (dashboards/apps) — nós-folha\nque dependem deste dataset, diretamente (`direct`) ou via datasets a jusante.\n\nADR 0011 §2.4: um vizinho invisível para quem pede é «Dataset restrito»\n(`restricted: true`), sem nome, id, coluna de ligação nem mapa de colunas.","operationId":"get_dataset_lineage_api_v1_datasets__dataset_id__lineage_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetLineageOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/lineage/traverse":{"get":{"tags":["datasets"],"summary":"Traverse Dataset Lineage","description":"Linhagem até `hops` saltos: datasets upstream/downstream com o caminho no sentido\ndo fluxo («A → B → C»), arestas com a origem e o mapa de colunas, e os exposures a\njusante (só nomes). Até 40 datasets e 60 arestas (`truncated`). Um dataset invisível\npara quem pede é «Dataset restrito». É a tool `get_lineage` do assistente e do MCP.","operationId":"traverse_dataset_lineage_api_v1_datasets__dataset_id__lineage_traverse_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"direction","in":"query","required":false,"schema":{"enum":["upstream","downstream","both"],"type":"string","default":"both","title":"Direction"}},{"name":"hops","in":"query","required":false,"schema":{"type":"integer","maximum":3,"minimum":1,"description":"saltos a partir do dataset","default":1,"title":"Hops"},"description":"saltos a partir do dataset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageTraverseOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/lineage/impact":{"get":{"tags":["datasets"],"summary":"Dataset Lineage Impact","description":"O que parte se o dataset (ou a `column`) mudar: datasets a jusante, exposures,\ndestinos fora do warehouse e, com a coluna, as colunas a jusante que derivam dela.\nA mesma análise do impacto de um issue. É a tool `impact_of` do assistente e do MCP.","operationId":"dataset_lineage_impact_api_v1_datasets__dataset_id__lineage_impact_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"column","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"coluna (opcional)","title":"Column"},"description":"coluna (opcional)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageImpactOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/lineage/path":{"get":{"tags":["datasets"],"summary":"Dataset Lineage Path","description":"Caminho mais curto (até 6 saltos) do dataset até `target_id`, no sentido do fluxo;\nsem caminho nesse sentido, procura no inverso (`direction`). Um destino invisível\npara quem pede responde 404. É a tool `path_between` do assistente e do MCP.","operationId":"dataset_lineage_path_api_v1_datasets__dataset_id__lineage_path_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"target_id","in":"query","required":true,"schema":{"type":"string","maxLength":64,"description":"id do dataset de destino","title":"Target Id"},"description":"id do dataset de destino"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineagePathOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/schema-changes":{"get":{"tags":["datasets"],"summary":"Get Dataset Schema Changes","description":"Timeline de schema do dataset: add/drop/tipo por scan, com\nrenomeações sugeridas, impacto a jusante e efeito no contrato ODCS. O\nimpacto a jusante invisível para quem pede é «Dataset restrito» (ADR 0011).","operationId":"get_dataset_schema_changes_api_v1_datasets__dataset_id__schema_changes_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SchemaChangeOut"},"title":"Response Get Dataset Schema Changes Api V1 Datasets  Dataset Id  Schema Changes Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/pipeline-health":{"get":{"tags":["datasets"],"summary":"Get Dataset Pipeline Health","description":"Saúde dos pipelines Fivetran/Airbyte que escrevem este dataset (cartão\n#268): último sync, falhado/atrasado, latência origem→destino,\nreconciliação de contagens e syncs recentes. Sem integração → `status:\nnot_monitored`. A origem invisível para quem pede é «Dataset restrito».","operationId":"get_dataset_pipeline_health_api_v1_datasets__dataset_id__pipeline_health_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetPipelineHealthOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/ai-readiness":{"get":{"tags":["datasets"],"summary":"Get Dataset Ai Readiness","description":"Prontidão do dataset para IA: score global, prontidão por caso de\nuso (RAG/treino/agente/BI) com bloqueadores, PII e recomendações.","operationId":"get_dataset_ai_readiness_api_v1_datasets__dataset_id__ai_readiness_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetAiReadinessOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/trust":{"get":{"tags":["datasets"],"summary":"Get Dataset Trust","description":"Trust score composto e explicável (cartão #142): score 0–100, grade A–E,\ncomponentes com evidência e ação para subir, bloqueadores. Zero LLM.","operationId":"get_dataset_trust_api_v1_datasets__dataset_id__trust_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrustOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/trust-decision":{"get":{"tags":["datasets"],"summary":"Get Dataset Trust Decision","description":"Decisão de confiança para consumir o dataset numa finalidade (cartão #150):\ntrusted | caution | untrusted | unknown, com razões, `required_actions`, sinais,\n`ttl_seconds` (também em `Cache-Control: max-age`) e `valid_until`. Zero LLM.\nVia token dvk_ fica no trilho de auditoria (#151). Ver docs/TRUST_API.md.","operationId":"get_dataset_trust_decision_api_v1_datasets__dataset_id__trust_decision_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"purpose","in":"query","required":false,"schema":{"type":"string","description":"agente | rag | treino | bi (ml = treino)","default":"agente","title":"Purpose"},"description":"agente | rag | treino | bi (ml = treino)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrustDecisionOut"},"example":{"dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","purpose":"rag","decision":"untrusted","reasons":[{"code":"readiness_blocker","severity":"critical","message_pt":"Bloqueador de AI-readiness para «rag»: Dados pessoais prováveis (nome, email, nif) seriam indexados e devolvidos nas respostas. Anonimiza ou exclui estas colunas antes de indexar."},{"code":"critical_incident","severity":"critical","message_pt":"1 incidente(s) crítico(s) aberto(s) que envolvem este dataset."},{"code":"verdict_warn","severity":"warning","message_pt":"O veredito de qualidade é «warn»: há avisos no último scan."}],"verdict":"warn","readiness":{"score":76.5,"blockers":["Dados pessoais prováveis (nome, email, nif) seriam indexados e devolvidos nas respostas. Anonimiza ou exclui estas colunas antes de indexar."]},"freshness":{"observed_age_hours":null,"sla_hours":null,"sla_source":null,"met":null},"open_incidents":{"critical":1,"warning":0},"pii":{"columns":["email","nif","nome"],"unmasked":[]},"contract":{"active":false,"valid":true},"last_scan_at":"2026-10-11T05:54:47.414669+00:00","as_of":"2026-10-11T05:55:37.186083+00:00","ttl_seconds":21600,"recommended_action_pt":"Não consumir. Resolve o bloqueador de AI-readiness para esta finalidade.","required_actions":["Resolve o bloqueador de AI-readiness para esta finalidade.","Espera pela resolução do incidente crítico aberto.","Revê os avisos do último scan antes de decisões automáticas."],"valid_until":"2026-10-11T11:55:37.186083+00:00"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/trust-facts":{"get":{"tags":["datasets"],"summary":"Get Dataset Trust Facts","description":"Factos de confiança do dataset num só envelope estável (cartão #153):\nveredito com política, score e tendência 7d, contrato, política, sensibilidade,\nAI-readiness por caso de uso, freshness vs alvo, ownership, linhagem, issues e\nlinks. Só metadados; `minimal` nunca traz nomes de colunas. `ETag` = hash dos\nfactos (sem `as_of`); `If-None-Match` → 304. Só leitura, zero LLM, tokens\n`dvk_*` incluídos. Ver docs/TRUST_API.md.","operationId":"get_dataset_trust_facts_api_v1_datasets__dataset_id__trust_facts_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"detail","in":"query","required":false,"schema":{"type":"string","description":"minimal (só contagens) | full (com nomes)","default":"minimal","title":"Detail"},"description":"minimal (só contagens) | full (com nomes)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetTrustFactsOut"},"example":{"schema_version":1,"dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","dataset_name":"clientes","detail":"minimal","as_of":"2026-10-11T05:55:37.274789+00:00","verdict":{"value":"warn","with_policy":true,"decision":"untrusted","purpose":"agente","reason_codes":["critical_incident","verdict_warn"]},"score":{"quality":78,"quality_7d_ago":null,"trend_7d":null,"trend_direction":null,"trust":31,"trust_grade":"E","trust_blocked":true},"contract":{"status":"ok","active_version":null,"activated_at":null,"problem_count":0},"policy":{"status":"off","rules_active":0,"violations":[]},"sensitivity":{"levels":{"public":0,"internal":0,"confidential":0,"pii":3},"columns_total":6,"columns_classified":3,"pii_unmasked_gold":0},"ai_readiness":{"score":80,"verdict":"com_reservas","use_cases":{"agente":{"score":90,"verdict":"pronto"},"bi":{"score":87.9,"verdict":"pronto"},"ml":{"score":66.8,"verdict":"nao_pronto"},"rag":{"score":76.5,"verdict":"nao_pronto"}}},"freshness":{"observed_age_hours":null,"target_hours":null,"target_source":null,"met":null,"attainment_30d_pct":null},"ownership":{"domains":[],"owner":null,"owners":[]},"lineage":{"upstream":0,"downstream":1},"last_scan_at":"2026-10-11T05:54:47.414669+00:00","open_issues":{"critical":1,"warning":2,"info":0,"total":3},"links":{"dataset":"/datasets/109b178e-8f65-41fa-b0b5-a922d8e7055b","contract":"/datasets/109b178e-8f65-41fa-b0b5-a922d8e7055b?tab=contrato","issues":"/problemas?dataset_id=109b178e-8f65-41fa-b0b5-a922d8e7055b","lineage":"/conhecimento?tab=grafo&dataset=109b178e-8f65-41fa-b0b5-a922d8e7055b","trust_decision":"/api/v1/datasets/109b178e-8f65-41fa-b0b5-a922d8e7055b/trust-decision?purpose=agente","trust_facts":"/api/v1/datasets/109b178e-8f65-41fa-b0b5-a922d8e7055b/trust-facts"}}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"304":{"description":"Nada mudou desde o `ETag` enviado em `If-None-Match`.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/context":{"get":{"tags":["datasets"],"summary":"Get Dataset Context","description":"Contexto unificado do dataset (cartão #146): identidade, schema+sensibilidade,\nqualidade+verdict, contrato, lineage, AI-readiness, trust, KB+README, uso e\nfrescura numa só leitura. Sem LLM, sem amostras, owners/exposures só por nome.","operationId":"get_dataset_context_api_v1_datasets__dataset_id__context_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"sections","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Secções separadas por vírgulas (identity, schema, quality, contract, lineage, readiness, trust, knowledge, usage, freshness).","title":"Sections"},"description":"Secções separadas por vírgulas (identity, schema, quality, contract, lineage, readiness, trust, knowledge, usage, freshness)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetContextOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/calendar":{"get":{"tags":["datasets"],"summary":"Get Dataset Calendar","description":"Heatmap-calendário do dataset: score médio, issues abertas e scans\nfalhados por dia (cache 1h).","operationId":"get_dataset_calendar_api_v1_datasets__dataset_id__calendar_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":366,"minimum":7,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityCalendarOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/dimensions":{"get":{"tags":["datasets"],"summary":"Get Dataset Dimensions","description":"Scorecard por dimensão de qualidade (DAMA/ISO 8000) do último scan: score\n0–100 por dimensão (percentagem de checks aprovados), n.º de checks e issues\nabertos. Uma dimensão sem checks vem `measured=false` e `score=null` («não\nmedido»), nunca 100. Inclui o histórico por scan (últimos 30).","operationId":"get_dataset_dimensions_api_v1_datasets__dataset_id__dimensions_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetDimensionsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/score/explain":{"get":{"tags":["datasets"],"summary":"Explain Dataset Score","description":"«Porque mudou o score?» (cartão #318): Δscore entre dois scans decomposto\npor dimensão (peso·Δdimensão) e, dentro de cada uma, pelos drivers — colunas\ncujos nulos mudaram, regras que passaram a falhar ou voltaram a passar, drift,\nfrescura, duplicados. Σ drivers + `unexplained_points` = `delta`. Por omissão\ncompara os dois últimos scans concluídos; 422 sem dois scans com score.","operationId":"explain_dataset_score_api_v1_datasets__dataset_id__score_explain_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreExplanationOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/synthetic":{"get":{"tags":["datasets"],"summary":"Export Synthetic Rows","description":"Dados sintéticos gerados a partir do último perfil (SYNTH v1).\n\n«Gémeo estatístico sem cópia»: só o perfil persistido (quantis,\nhistogramas, segmentos, regras, sensibilidade) — nenhuma linha da fonte.\nDeterminístico por (perfil, rows, seed). CSV em streaming até\n`synthetic_max_rows`; `json` devolve `{manifest, rows}` até\n`synthetic_json_max_rows`, com o scorecard em `manifest.evaluation`.\nAntes de enviar, as linhas passam pela avaliação utilidade × privacidade:\ncom `privacy_verdict = fail` (uma amostra, um extremo sensível ou PII real\nno output) a resposta é 409 com o motivo e nenhuma linha sai. Fica\nregistado um evento de auditoria (também na recusa).","operationId":"export_synthetic_rows_api_v1_datasets__dataset_id__synthetic_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"rows","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1000,"title":"Rows"}},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":42,"title":"Seed"}},{"name":"format","in":"query","required":false,"schema":{"enum":["csv","json"],"type":"string","default":"csv","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/synthetic/evaluation":{"get":{"tags":["datasets"],"summary":"Get Synthetic Evaluation","description":"Scorecard utilidade × privacidade dos dados sintéticos de (rows, seed).\n\nAvalia as mesmas linhas que `GET /synthetic` com o mesmo par enviaria.\nUtilidade (0–100) contra o perfil: nulos, quantis p05–p95 normalizados\npelo IQR, distância de variação total aos histogramas e às quotas\ncategóricas, correlações dos pares. Privacidade contra as amostras do\nperfil, os extremos min/max e as linhas de exemplo dos clusters de\nduplicados: `sample_leak`, `extreme_leak`, `pii_leak` e o `k_min` do\noutput sobre os quase-identificadores. Veredito `fail` com qualquer leak\n(o export recusa-o com 409), `warn` com `k_min` < 5, senão `pass`. Só\ntaxas, deltas e nomes de colunas — nunca valores. Não fica registado\nnenhum evento (não exporta nada).","operationId":"get_synthetic_evaluation_api_v1_datasets__dataset_id__synthetic_evaluation_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"rows","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1000,"title":"Rows"}},{"name":"seed","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":42,"title":"Seed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticEvaluationOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/remediation.sql":{"get":{"tags":["datasets"],"summary":"Get Dataset Remediation","description":"Script consolidado das sugestões aceites.\n\nO DataVault nunca executa escrita nas fontes: o script é para o cliente\nrever e aplicar (staging primeiro). `include_proposed=true` junta também\nas sugestões ainda não aceites; `language=pyspark` exporta a versão\nPySpark (pipelines Spark/Databricks) em vez de SQL.","operationId":"get_dataset_remediation_api_v1_datasets__dataset_id__remediation_sql_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"include_proposed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Proposed"}},{"name":"language","in":"query","required":false,"schema":{"type":"string","default":"sql","title":"Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/rules.dbt.yml":{"get":{"tags":["datasets"],"summary":"Export Rules As Dbt","description":"Regras do dataset como testes dbt (schema.yml) — «propõe, tu aplicas no teu repo».\n\nO mesmo ficheiro de `GET /datasets/{id}/rules/export?format=dbt`. Uma regra\n`referential` (cartão #164) sai como `relationships` com `to: ref('<tabela>')`;\na tabela vem do catálogo de quem exporta — um dataset de referência invisível\n(ADR 0011) não dá nome, e a regra fica em nota.","operationId":"export_rules_as_dbt_api_v1_datasets__dataset_id__rules_dbt_yml_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/rules.dbt-tests.zip":{"get":{"tags":["datasets"],"summary":"Export Sql Rules As Dbt Tests","description":"Regras `expression`/`custom_sql` ativas como testes singulares do dbt (cartão #265).\n\nZIP com `tests/*.sql` (SELECT das linhas violadoras no dialeto da fonte, com\n`ref()` no lugar da tabela) e um README com o que ficou de fora e porquê. O\ntexto das regras vai em blocos Jinja `raw`: o dbt não executa Jinja escrito\nnuma regra.","operationId":"export_sql_rules_as_dbt_tests_api_v1_datasets__dataset_id__rules_dbt_tests_zip_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/verdict":{"get":{"tags":["datasets"],"summary":"Dataset Verdict","description":"Veredito compacto para o gate de CI: pass | warn | fail.\n\nfail = alguma regra CRÍTICA falhou no último scan OU o contrato ODCS ficou\ninválido (campo removido por uma mudança de schema por resolver); warn =\nsó warnings, tipo lógico divergente ou mudança que quebra a montante;\npass = tudo verde. Sem scan ainda: verdict \"unknown\" (o gate decide).","operationId":"dataset_verdict_api_v1_datasets__dataset_id__verdict_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetVerdictOut"},"example":{"verdict":"warn","score":78,"failed":[{"rule_type":"pattern","column":"email","severity":"warning","observed":"3.6364","threshold":"0.0","engine":"datavault"},{"rule_type":"not_null","column":"nif","severity":"warning","observed":"13.18","threshold":"5.0","engine":"datavault"}],"scan_id":"4569088f-7057-46dd-a5b2-15c744b4a33f","contract":{"status":"ok","problems":[],"findings":[],"issue_ids":[],"upstream_changes":[],"active_version":null},"policy":{"status":"off","rules":[],"violations":[]}}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/diff/{other_id}":{"post":{"tags":["datasets"],"summary":"Dataset Diff","description":"Data-diff por chave (RECON v2): base `dataset_id` ↔ candidato `other_id`.\n\nRead-only nas duas fontes e nada persistido. Guardas de custo: linhas por\nlado (`diff_max_rows`, amostragem determinística acima disso), colunas\ncomparadas, tempo total (504) e runs por workspace (429). Devolve\ncontagens, % só-base/só-candidato/alteradas, divergência e checksum por\ncoluna e o veredito pass | warn | fail para o gate de CI.","operationId":"dataset_diff_api_v1_datasets__dataset_id__diff__other_id__post","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"other_id","in":"path","required":true,"schema":{"type":"string","title":"Other Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataDiffIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataDiffOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/trust-decisions":{"post":{"tags":["datasets"],"summary":"Post Trust Decisions","description":"Decisões de confiança de até 50 datasets numa finalidade (cartão #150).\n\nUm id fora do workspace — ou invisível para quem pede (ADR 0011) — dá 404\nao pedido inteiro. `decision` é a pior do lote e `ttl_seconds` o menor. Só\nleitura; via token dvk_ regista UM evento de auditoria agregado (#151).","operationId":"post_trust_decisions_api_v1_trust_decisions_post","security":[{"ApiToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrustDecisionBatchIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrustDecisionBatchOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/readme":{"get":{"tags":["datasets"],"summary":"Get Dataset Readme","operationId":"get_dataset_readme_api_v1_datasets__dataset_id__readme_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetReadmeOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/readme.md":{"get":{"tags":["datasets"],"summary":"Export Dataset Readme","description":"Export `.md` da versão publicada (com rotulagem e carimbo de aprovação).","operationId":"export_dataset_readme_api_v1_datasets__dataset_id__readme_md_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/synthetic-packs":{"post":{"tags":["synthetic"],"summary":"Create Synthetic Pack","description":"Pack de dados sintéticos com várias tabelas coerentes, para dev/test e fixtures de CI.\n\nSeleciona exatamente um de `connection_id`, `domain_id` ou `dataset_ids`\n(até `max_tables`, no máximo 20). Cada tabela é gerada a partir do último\nperfil, como em `GET /datasets/{dataset_id}/synthetic`, e as colunas ligadas\npela linhagem (`cliente_id` → `clientes`) só levam chaves que existem na\ntabela de origem, com a mesma taxa de nulos. Nenhuma linha da fonte é lida.\n\n`format=zip` devolve um CSV por tabela, `schema.sql` (tabelas, chaves e FKs) e\n`manifest.json` (estratégias por coluna, FKs, avisos, seed e o aviso «dados\nsintéticos — não contém dados reais»); `format=sqlite` devolve um ficheiro\nSQLite com as mesmas tabelas e o manifesto na tabela `_datavault_manifest`.\nO mesmo pedido sobre os mesmos perfis dá os mesmos bytes. Antes de escrever o\nficheiro, as linhas de cada tabela passam pela avaliação utilidade × privacidade de\n`GET /datasets/{dataset_id}/synthetic`, com o scorecard de cada tabela no\n`evaluation` do manifesto. Com `privacy_verdict = fail` numa tabela a resposta é\n409 (`code = synthetic_privacy_fail`, com a `key` e os `params` de cada tabela\nrecusada em `tables`) e não sai nenhum ficheiro. Síncrono e com orçamento de\ntempo: excedido, responde 422 sem ficheiro. Cada workspace tem um limite de\npedidos por janela (429 com `Retry-After`). Fica registado um evento de\nauditoria (também na recusa).","operationId":"create_synthetic_pack_api_v1_synthetic_packs_post","security":[{"ApiToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticPackIn"}}}},"responses":{"200":{"description":"O pack: ZIP (CSVs + schema.sql + manifest.json) ou ficheiro SQLite.","content":{"application/zip":{},"application/vnd.sqlite3":{}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/trust/consumptions":{"post":{"tags":["consumers"],"summary":"Registar o que um agente consumiu e a decisão de confiança que viu","description":"Regista o consumidor (agente, aplicação, pipeline ou notebook — criado no 1.º\nregisto, identificado pelo nome e tipo) e um consumo por dataset, com a\nfinalidade e a decisão de confiança vista (`decision_seen`; omitida = a decisão\natual da Trust API). Com `consumer.run_ref`, repetir o registo do mesmo run não\ncria consumos novos (`replayed`). Só ids e rótulos: campos desconhecidos dão 422.\n\nO nome do consumidor só aceita letras, algarismos, espaços e `_ . : / -`.\n\nUm consumo em `untrusted` gera o evento `consumer_untrusted_read` e um aviso aos\ncanais de notificação, sem abrir problema. Os canais recebem no máximo um aviso\npor hora por consumidor e dataset, e 20 avisos por hora no workspace inteiro; o\nsino recebe todos os eventos. Autentica com o token de API `dvk_*`.","operationId":"post_consumptions_api_v1_trust_consumptions_post","security":[{"ApiToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumptionBatchIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumptionBatchOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Um `dataset_id` não pertence ao workspace (o pedido inteiro falha).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"detail":"Dataset não encontrado.","code":null,"request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"description":"Rate limit do registo atingido (header `Retry-After`).","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}}}}},"/api/v1/consumers":{"get":{"tags":["consumers"],"summary":"List Consumers","description":"Consumidores do workspace (agentes, aplicações, pipelines, notebooks) com os\nconsumos a 7 e 30 dias, os consumos dos últimos 7 dias por decisão e o último\nconsumo — mais recentes primeiro. Só contam consumos de datasets que quem pede\nvê; um consumidor só de datasets restritos não aparece. `X-Total-Count` = total.","operationId":"list_consumers_api_v1_consumers_get","security":[{"ApiToken":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":100,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConsumerUsageOut"},"title":"Response List Consumers Api V1 Consumers Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/consumers":{"get":{"tags":["consumers"],"summary":"Get Dataset Consumers","description":"Consumidores registados que leram este dataset nos últimos 30 dias, com os\nconsumos a 7 e 30 dias e a última decisão de confiança vista neste dataset.","operationId":"get_dataset_consumers_api_v1_datasets__dataset_id__consumers_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatasetConsumersOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract/versions":{"get":{"tags":["contracts"],"summary":"List Contract Versions","operationId":"list_contract_versions_api_v1_datasets__dataset_id__contract_versions_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContractVersionSummaryOut"},"title":"Response List Contract Versions Api V1 Datasets  Dataset Id  Contract Versions Get"},"example":[{"id":"5acffafe-5e9f-49f1-b36b-52a23e19ef67","number":1,"status":"proposed","origin":"observed","note":null,"proposal_id":"3146e238-ed15-4c49-a746-a0e4e3ac1016","created_at":"2026-10-11T05:56:13.136684","activated_at":null,"accepted_by_label":null}]}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract/versions/{number}":{"get":{"tags":["contracts"],"summary":"Get Contract Version","operationId":"get_contract_version_api_v1_datasets__dataset_id__contract_versions__number__get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"number","in":"path","required":true,"schema":{"type":"integer","title":"Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractVersionDetailOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract/diff":{"get":{"tags":["contracts"],"summary":"Diff Contract Versions","description":"Diff secção a secção entre duas versões (`from` omitido => nenhuma).","operationId":"diff_contract_versions_api_v1_datasets__dataset_id__contract_diff_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"to","in":"query","required":true,"schema":{"type":"integer","title":"To"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractVersionDiffOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract/proposals":{"get":{"tags":["contracts"],"summary":"List Contract Proposals","operationId":"list_contract_proposals_api_v1_datasets__dataset_id__contract_proposals_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContractProposalSummaryOut"},"title":"Response List Contract Proposals Api V1 Datasets  Dataset Id  Contract Proposals Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/contract/proposals/{proposal_id}":{"get":{"tags":["contracts"],"summary":"Get Contract Proposal","description":"Proposta com secções, estado, fios e diff face ao contrato ativo; o link\nde revisão só vem para administradores.","operationId":"get_contract_proposal_api_v1_datasets__dataset_id__contract_proposals__proposal_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractProposalOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/catalog/treemap":{"get":{"tags":["catalog"],"summary":"Get Catalog Treemap","description":"Hierarquia conexão → schema → dataset com área = métrica e cor = score.","operationId":"get_catalog_treemap_api_v1_catalog_treemap_get","security":[{"ApiToken":[]}],"parameters":[{"name":"metric","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TreemapMetric","description":"Área: volume|cost|columns","default":"volume"},"description":"Área: volume|cost|columns"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogTreemapOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/catalog/metadata-quality":{"get":{"tags":["catalog"],"summary":"Get Metadata Quality","description":"Qualidade do catálogo e dos metadados do workspace (cartão #270): % de\nchecks cumpridos (owner, descrição, classificação, domínio, contrato, regras,\ndescrição atualizada, owner ativo, datasets sem uso com owner, docs das\ncolunas coerentes) — os não aplicáveis ficam fora do denominador —, por\ndimensão, por check e por domínio; problemas com sugestões (README gerado,\nimport do catálogo externo), meta, tendência diária e cobertura do catálogo\nexterno. Os 50 piores datasets vêm em `datasets`; o CSV leva todos. Só\nleitura, zero LLM, número fixo de queries.","operationId":"get_metadata_quality_api_v1_catalog_metadata_quality_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataQualityOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/catalog/metadata-quality.csv":{"get":{"tags":["catalog"],"summary":"Get Metadata Quality Csv","description":"Export CSV para um pack de governação/procurement do cliente: por dataset\n(estado de cada check e códigos dos problemas) ou o resumo com meta e\ncobertura por check. Só metadados — nomes, contagens e códigos.","operationId":"get_metadata_quality_csv_api_v1_catalog_metadata_quality_csv_get","security":[{"ApiToken":[]}],"parameters":[{"name":"level","in":"query","required":false,"schema":{"enum":["datasets","summary"],"type":"string","description":"datasets (uma linha por dataset) | summary (workspace e domínios)","default":"datasets","title":"Level"},"description":"datasets (uma linha por dataset) | summary (workspace e domínios)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/suggestions":{"get":{"tags":["catalog"],"summary":"List Domain Suggestions","description":"Domínio sugerido para os datasets sem domínio, pela maioria das ligações de\nlinhagem (de qualquer tipo, uma por par de datasets) a datasets já curados: um\ndomínio com pelo menos metade das ligações e sem empate. Os empates vêm em\n`ambiguous`, com os candidatos. Cada sugestão traz os votos, o total de\nligações, até 3 colunas `via`, os tipos de aresta, `inferred_only` e a\n`signature` da evidência. Admins veem todas; quem gere domínios só as desses\ndomínios; os outros levam 403. Um vizinho invisível conta no total e vem como\n«Dataset restrito». Só leitura, zero LLM.","operationId":"list_domain_suggestions_api_v1_domains_suggestions_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSuggestionsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains":{"get":{"tags":["catalog"],"summary":"List Domains","operationId":"list_domains_api_v1_domains_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainOut"},"title":"Response List Domains Api V1 Domains Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}":{"get":{"tags":["catalog"],"summary":"Get Domain","operationId":"get_domain_api_v1_domains__domain_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainDetailOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/slo":{"get":{"tags":["catalog"],"summary":"Get Domain Slo","description":"SLO do data product: a forma de `/dashboard/slo` restrita aos datasets do\ndomínio e avaliada contra o SLA declarado, com o `breakdown` por subtipo.","operationId":"get_domain_slo_api_v1_domains__domain_id__slo_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":6,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSloReportOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/slo.csv":{"get":{"tags":["catalog"],"summary":"Get Domain Slo Csv","description":"Export CSV do SLO do domínio: uma linha por dataset-dia, com os motivos.","operationId":"get_domain_slo_csv_api_v1_domains__domain_id__slo_csv_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":6,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/readiness":{"get":{"tags":["catalog"],"summary":"Get Domain Readiness","description":"Readiness do data product para um caso de uso (cartão #152): `ready |\nready_with_warnings | not_ready`, bloqueadores e avisos com `code` estável,\ndetalhe por dataset e `valid_until` (próximo scan agendado). Zero LLM, só\nleitura (tokens `dvk_*` incluídos). Ver docs/CI_QUALITY_GATE.md.","operationId":"get_domain_readiness_api_v1_domains__domain_id__readiness_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"use_case","in":"query","required":false,"schema":{"type":"string","description":"rag | ml | agente | bi (treino = ml)","default":"bi","title":"Use Case"},"description":"rag | ml | agente | bi (treino = ml)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainReadinessOut"},"example":{"domain_id":"31fecbe9-8534-49fd-b9de-9e139edf4ff3","domain_name":"Vendas","use_case":"rag","status":"not_ready","blockers":[{"code":"ai_readiness_blocked","dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","dataset_name":"clientes","message":"O dataset «clientes» tem um bloqueador de AI-readiness para «rag»."},{"code":"open_critical_issues","dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","dataset_name":"clientes","message":"O dataset «clientes» tem 1 issue(s) crítico(s) em aberto."}],"warnings":[{"code":"verdict_warn","dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","dataset_name":"clientes","message":"O veredito de qualidade de «clientes» é «warn»: há avisos no último scan."}],"checked_at":"2026-10-11T05:56:13.183225+00:00","valid_until":null,"sla":null,"datasets":[{"dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","dataset_name":"clientes","status":"not_ready","last_scan_at":"2026-10-11T05:54:47.414669+00:00","verdict":"warn","contract":{"active":false,"valid":true},"ai_readiness":{"score":76.5,"blocked":true},"open_critical_issues":1,"open_slo_breaches":null,"next_scan_at":null,"blockers":["ai_readiness_blocked","open_critical_issues"],"warnings":["verdict_warn"]}],"consumers":{"total":0,"by_kind":{"user":0,"ai_system":0,"dbt_exposure":0,"external":0}}}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/verdict":{"get":{"tags":["catalog"],"summary":"Get Domain Verdict","description":"Veredito do data product para o gate de CI (cartão #148): pass | warn |\nfail | unknown, agregado dos vereditos dos seus datasets — `fail` se algum\nfalha, `warn` se algum avisa, `unknown` se nenhum tem veredito (sem datasets\nou sem scans), `pass` caso contrário. Traz as contagens por veredito e o\nveredito de cada dataset (o mesmo de `GET /datasets/{dataset_id}/verdict`),\npor nome. `with_policy=false` deixa de fora a política de dados. Só leitura\n(tokens `dvk_*` incluídos). Ver docs/CI_QUALITY_GATE.md.","operationId":"get_domain_verdict_api_v1_domains__domain_id__verdict_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"with_policy","in":"query","required":false,"schema":{"type":"boolean","description":"conta as violações da política de dados (como o gate de CI)","default":true,"title":"With Policy"},"description":"conta as violações da política de dados (como o gate de CI)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVerdictOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/contract":{"get":{"tags":["catalog"],"summary":"Get Domain Contract","description":"Contratos ODCS do data product (cartão #148): um bundle YAML com um documento\npor dataset do domínio, separados por `---` e ordenados pelo nome do dataset.\nCada contrato leva `domain` e `dataProduct` (o nome do domínio), `tenant` (o\nworkspace) e `team` com o owner do domínio, só pelo nome. Sem datasets, o\nbundle vem vazio. Só leitura (tokens `dvk_*` incluídos).","operationId":"get_domain_contract_api_v1_domains__domain_id__contract_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/conformance":{"get":{"tags":["catalog"],"summary":"Get Domain Conformance","description":"Conformidade do data product (cartão #154): por dataset, se tem owner,\ncontrato aceite, README aprovado, classificação revista, regra de freshness,\nalvo e cumprimento de SLO, AI-readiness e política sem violações. Checks não\naplicáveis não penalizam; `conformance_pct` é None sem datasets. Gaps por\nimpacto e até 5 próximas ações. Só leitura, zero LLM, número fixo de queries.","operationId":"get_domain_conformance_api_v1_domains__domain_id__conformance_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainConformanceOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/metadata-quality":{"get":{"tags":["catalog"],"summary":"Get Domain Metadata Quality","description":"Qualidade dos metadados do domínio (cartão #270): os checks de completude,\natualidade e coerência de cada dataset do domínio, problemas com sugestões,\nmeta do domínio e tendência diária. Só leitura, zero LLM, número fixo de queries.","operationId":"get_domain_metadata_quality_api_v1_domains__domain_id__metadata_quality_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataQualityOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/trust-facts":{"get":{"tags":["catalog"],"summary":"Get Domain Trust Facts","description":"Factos de confiança do data product (cartão #153): agregado (decisões,\nvereditos, médias, issues, sensibilidade) e os factos de cada dataset. `ETag`\n+ `If-None-Match` → 304. Só leitura, tokens `dvk_*` incluídos.","operationId":"get_domain_trust_facts_api_v1_domains__domain_id__trust_facts_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"detail","in":"query","required":false,"schema":{"type":"string","description":"minimal (só contagens) | full (com nomes)","default":"minimal","title":"Detail"},"description":"minimal (só contagens) | full (com nomes)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainTrustFactsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"304":{"description":"Nada mudou desde o `ETag` enviado em `If-None-Match`.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/data-policy":{"get":{"tags":["catalog"],"summary":"Get Domain Data Policy","description":"Política de dados do domínio (parcial) e a efetiva que os datasets herdam.","operationId":"get_domain_data_policy_api_v1_domains__domain_id__data_policy_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainDataPolicyOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/versions":{"get":{"tags":["catalog"],"summary":"List Domain Versions","description":"Versões publicadas do data product, a mais recente primeiro: versão\n(`MAJOR.MINOR`), bump (`major` quebra o consumidor, `minor` é compatível),\nresumo legível e contagens. Vazia até à 1.ª publicação. Só leitura.","operationId":"list_domain_versions_api_v1_domains__domain_id__versions_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainVersionOut"},"title":"Response List Domain Versions Api V1 Domains  Domain Id  Versions Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/versions/{from_version}/diff/{to_version}":{"get":{"tags":["catalog"],"summary":"Diff Domain Versions","description":"Mudanças entre duas versões do data product, com o bump que implicam.\n`from_version` aceita uma versão ou `latest` (a última publicada; sem nenhuma,\ncompara com nada); `to_version` aceita uma versão ou `current` (o estado atual\ntal como seria publicado). Só a última versão (`latest` ou pelo nome) até\n`current` pré-visualiza a publicação e traz `next_version`; de uma versão\nmais antiga, `next_version` é `null`. Cada mudança tem `impact`\n(`major` | `minor`). 404 para uma versão que não existe; 422 para `latest`\nno destino ou `current` na origem. Só leitura.","operationId":"diff_domain_versions_api_v1_domains__domain_id__versions__from_version__diff__to_version__get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"from_version","in":"path","required":true,"schema":{"type":"string","title":"From Version"}},{"name":"to_version","in":"path","required":true,"schema":{"type":"string","title":"To Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVersionDiffOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/consumers":{"get":{"tags":["catalog"],"summary":"List Domain Consumers","description":"Quem depende do data product: utilizadores e consumidores externos registados\n(`source=manual`) e os sistemas de IA e exposures dbt que usam os seus datasets\n(`source=derived`). `by_kind` conta os quatro tipos (`user`, `ai_system`,\n`dbt_exposure`, `external`) e `summary` é a frase de impacto («3 sistemas de IA e\n2 dashboards dependem deste produto»), `null` sem consumidores. Um consumidor com\n`channel_id` recebe o aviso de uma violação crítica do SLA. Só leitura.","operationId":"list_domain_consumers_api_v1_domains__domain_id__consumers_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainConsumersOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/domains/{domain_id}/grants":{"get":{"tags":["catalog"],"summary":"List Domain Grants","description":"As equipas com acesso ao domínio — visível a todo o workspace (§2.4:\né o que permite pedir acesso a quem não o tem).","operationId":"list_domain_grants_api_v1_domains__domain_id__grants_get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainGrantOut"},"title":"Response List Domain Grants Api V1 Domains  Domain Id  Grants Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/scans":{"post":{"tags":["scans"],"summary":"Create Scan","operationId":"create_scan_api_v1_scans_post","security":[{"ApiToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanCreate"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"get":{"tags":["scans"],"summary":"List Scans","description":"Scans mais recentes, opcionalmente filtrados por conexão.","operationId":"list_scans_api_v1_scans_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScanOut"},"title":"Response List Scans Api V1 Scans Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/scans/{scan_id}":{"get":{"tags":["scans"],"summary":"Get Scan","operationId":"get_scan_api_v1_scans__scan_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Estado e resultado de um scan."}},"/api/v1/scans/{scan_id}/live":{"get":{"tags":["scans"],"summary":"Get Scan Live","description":"Fotografia do teatro do scan — fallback por polling quando o\nSSE `/events/scans/{id}/stream` não está disponível. Mesmo formato.","operationId":"get_scan_live_api_v1_scans__scan_id__live_get","security":[{"ApiToken":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanLiveOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/signals":{"get":{"tags":["signals"],"summary":"List Signals","description":"Sinais de anomalia (monitores automáticos) por confirmar ou descartados.","operationId":"list_signals_api_v1_signals_get","security":[{"ApiToken":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":100,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SignalOut"},"title":"Response List Signals Api V1 Signals Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/knowledge":{"get":{"tags":["knowledge"],"summary":"List Knowledge","description":"Pesquisa na base de conhecimento (relatórios, RCAs, notas e decisões) com filtros por tipo, dataset ou issue.","operationId":"list_knowledge_api_v1_knowledge_get","security":[{"ApiToken":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"pesquisa de texto (FTS)","title":"Q"},"description":"pesquisa de texto (FTS)"},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/KnowledgeKind"},{"type":"null"}],"title":"Kind"}},{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"issue_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"}},{"name":"include_outdated","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Outdated"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KnowledgeEntryOut"},"title":"Response List Knowledge Api V1 Knowledge Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/knowledge/graph":{"get":{"tags":["knowledge"],"summary":"Knowledge Graph View","description":"Grafo do património do workspace: {nodes, edges, stats}.\n\nNós: fontes, domínios, datasets, exposures, métricas, regras, termos do\nglossário, problemas, sinais e entradas de conhecimento. Arestas: linhagem\n(`feeds`, com `lineage_kind`), pertença a domínio, consumo por exposures,\nmétricas, termos (`means`, com as colunas) e as relações de qualidade.\nSem `focus`, o grafo completo com teto de 1500 nós; com `focus=dataset:<id>`,\na vizinhança a `hops` saltos (1 a 3) com teto de 400 nós. `kinds` limita os\ntipos de nó. `stats.by_kind` e `stats.by_edge_kind` contam o que veio.","operationId":"knowledge_graph_view_api_v1_knowledge_graph_get","security":[{"ApiToken":[]}],"parameters":[{"name":"focus","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"vizinhança de um dataset: `dataset:<id>`","title":"Focus"},"description":"vizinhança de um dataset: `dataset:<id>`"},{"name":"hops","in":"query","required":false,"schema":{"type":"integer","maximum":3,"minimum":1,"description":"saltos a partir do foco (só com `focus`)","default":2,"title":"Hops"},"description":"saltos a partir do foco (só com `focus`)"},{"name":"kinds","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"tipos de nó separados por vírgulas (ex.: `dataset,domain`)","title":"Kinds"},"description":"tipos de nó separados por vírgulas (ex.: `dataset,domain`)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Knowledge Graph View Api V1 Knowledge Graph Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/knowledge/{entry_id}":{"get":{"tags":["knowledge"],"summary":"Get Knowledge Entry","operationId":"get_knowledge_entry_api_v1_knowledge__entry_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"entry_id","in":"path","required":true,"schema":{"type":"string","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeEntryOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Uma entrada da base de conhecimento."}},"/api/v1/rules":{"get":{"tags":["rules"],"summary":"List Rules","description":"Regras de qualidade, opcionalmente de um dataset. Pagina com `limit`/`offset`; o total filtrado vem no header `X-Total-Count`.","operationId":"list_rules_api_v1_rules_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RuleOut"},"title":"Response List Rules Api V1 Rules Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/rules/{rule_id}/failing-rows.sql":{"get":{"tags":["rules"],"summary":"Get Failing Rows Sql","description":"Query que lista as linhas que falham a regra, para correres no teu warehouse.\n\nSó texto: o DataVault não a executa nem guarda linhas. Os nomes de tabela e\nde coluna saem citados no dialeto e o limite é o `LIMIT` (ou `TOP`) dele. Os\navisos (aproximações, `LIKE` em vez de regex) vão em comentários no topo.\n\nSem tradução por linha a resposta é 204, com o motivo em `X-DataVault-Reason`:\n`not_row_level` (contagem de linhas), `stream_rule`, `no_dataset`,\n`no_sql_source` (a fonte não tem SQL: indica `dialect`), `no_column`,\n`no_timestamp_column`, `regex_untranslatable`, `reference_too_large` (lista\nacima de 500 valores), `registry_reference`, `referential_other_connection`,\n`invalid_params`, `sql_untranslatable` ou `external_source` (a regra `accuracy`\nconfirma cada valor numa fonte autoritativa). Com um token `dvk_`, o pedido fica no\ntrilho de auditoria como leitura (`failing_rows_sql_read`).","operationId":"get_failing_rows_sql_api_v1_rules__rule_id__failing_rows_sql_get","security":[{"ApiToken":[]}],"parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"dialect","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"description":"postgres | mysql | mssql | bigquery | snowflake | databricks | sqlite. Por omissão, o da fonte do dataset.","title":"Dialect"},"description":"postgres | mysql | mssql | bigquery | snowflake | databricks | sqlite. Por omissão, o da fonte do dataset."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Máximo de linhas que a query devolve.","default":100,"title":"Limit"},"description":"Máximo de linhas que a query devolve."}],"responses":{"200":{"description":"A query, em texto, no dialeto de `X-DataVault-Dialect`.","content":{"text/plain":{"schema":{"type":"string"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"204":{"description":"A regra não tem tradução por linha: o motivo vem no cabeçalho `X-DataVault-Reason`.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/datasets/{dataset_id}/rules/export":{"get":{"tags":["rules"],"summary":"Export Dataset Rules","description":"Regras ativas do dataset como ficheiro do formato pedido — «são os teus testes».\n\nNo SodaCL e no GX só sai o que o `POST /rules/import` lê de volta como a\nmesma regra (mesma tabela, coluna, tipo e parâmetros; uma tolerância a zero é\na regra sem tolerância); o resto fica em `unsupported`, com o motivo, no\ncabeçalho do ficheiro e nos headers `X-Rules-*`. A severidade não segue no\nSodaCL nem no GX: o import aplica a do pedido. `format=dbt` é o mesmo\nficheiro de `GET /datasets/{id}/rules.dbt.yml`. Sem LLM e sem tocar na fonte.","operationId":"export_dataset_rules_api_v1_datasets__dataset_id__rules_export_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}},{"name":"format","in":"query","required":false,"schema":{"enum":["dbt","sodacl","gx"],"type":"string","description":"dbt (schema.yml) | sodacl (checks YAML) | gx (suite JSON do Great Expectations 1.x)","default":"dbt","title":"Format"},"description":"dbt (schema.yml) | sodacl (checks YAML) | gx (suite JSON do Great Expectations 1.x)"}],"responses":{"200":{"description":"O ficheiro, como anexo.","content":{"text/yaml":{"schema":{"type":"string","description":"dbt schema.yml ou checks SodaCL."}},"application/json":{"schema":{"type":"object","description":"Suite do Great Expectations 1.x (format=gx).","properties":{"name":{"type":"string"},"expectations":{"type":"array","items":{"type":"object"}},"meta":{"type":"object"}}}}},"headers":{"X-Rules-Exported":{"description":"Regras ativas que entraram no ficheiro.","schema":{"type":"integer"}},"X-Rules-Unsupported":{"description":"Regras ativas que ficaram de fora; o motivo de cada uma vai no cabeçalho do ficheiro (`meta.beryx.unsupported` no GX).","schema":{"type":"integer"}},"X-Rules-Unsupported-Types":{"description":"Tipos das regras que ficaram de fora, separados por vírgulas.","schema":{"type":"string"}},"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/rules/export":{"get":{"tags":["rules"],"summary":"Export Workspace Rules","description":"Regras ativas dos datasets que quem pede vê, num só ficheiro SodaCL.\n\nUma secção `checks for <tabela>` por dataset (`schema.tabela` quando duas\ntabelas têm o mesmo nome). O que não volta igual pelo `POST /rules/import`\nfica em `unsupported`, no cabeçalho do ficheiro e nos headers `X-Rules-*`.","operationId":"export_workspace_rules_api_v1_rules_export_get","security":[{"ApiToken":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"const":"sodacl","type":"string","description":"Só sodacl: as suites GX e os schema.yml do dbt são por dataset.","default":"sodacl","title":"Format"},"description":"Só sodacl: as suites GX e os schema.yml do dbt são por dataset."}],"responses":{"200":{"description":"O ficheiro, como anexo.","content":{"text/yaml":{"schema":{"type":"string","description":"dbt schema.yml ou checks SodaCL."}}},"headers":{"X-Rules-Exported":{"description":"Regras ativas que entraram no ficheiro.","schema":{"type":"integer"}},"X-Rules-Unsupported":{"description":"Regras ativas que ficaram de fora; o motivo de cada uma vai no cabeçalho do ficheiro (`meta.beryx.unsupported` no GX).","schema":{"type":"integer"}},"X-Rules-Unsupported-Types":{"description":"Tipos das regras que ficaram de fora, separados por vírgulas.","schema":{"type":"string"}},"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/rule-packs":{"get":{"tags":["rule-packs"],"summary":"List Rule Packs","operationId":"list_rule_packs_api_v1_rule_packs_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RulePackSummary"},"title":"Response List Rule Packs Api V1 Rule Packs Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/rule-packs/{pack_id}":{"get":{"tags":["rule-packs"],"summary":"Get Rule Pack","operationId":"get_rule_pack_api_v1_rule_packs__pack_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"string","title":"Pack Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RulePackOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/rule-packs/{pack_id}/preview":{"get":{"tags":["rule-packs"],"summary":"Preview Rule Pack","description":"O que aplicar o pack criaria neste dataset — sem escrever nada.","operationId":"preview_rule_pack_api_v1_rule_packs__pack_id__preview_get","security":[{"ApiToken":[]}],"parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"string","title":"Pack Id"}},{"name":"dataset_id","in":"query","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RulePackPreview"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/issues":{"get":{"tags":["issues"],"summary":"List Issues","description":"Issues com filtros por severidade, tipo, estado, dataset e responsável.","operationId":"list_issues_api_v1_issues_get","security":[{"ApiToken":[]}],"parameters":[{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/Severity"},{"type":"null"}],"title":"Severity"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IssueType"},{"type":"null"}],"title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IssueStatus"},{"type":"null"}],"title":"Status"}},{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"domain_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"id de domínio ou 'mine' (domínios de que sou owner/membro)","title":"Domain Id"},"description":"id de domínio ou 'mine' (domínios de que sou owner/membro)"},{"name":"assignee","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"id de utilizador, 'me' ou 'none' (sem dono)","title":"Assignee"},"description":"id de utilizador, 'me' ou 'none' (sem dono)"},{"name":"assignee_team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"id de equipa, 'mine' (das minhas equipas) ou 'none' (sem equipa)","title":"Assignee Team"},"description":"id de equipa, 'mine' (das minhas equipas) ou 'none' (sem equipa)"},{"name":"include_snoozed","in":"query","required":false,"schema":{"type":"boolean","description":"incluir issues adiados (snoozed_until no futuro)","default":false,"title":"Include Snoozed"},"description":"incluir issues adiados (snoozed_until no futuro)"},{"name":"open_on","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"só issues abertos nesse dia (YYYY-MM-DD, UTC) — calendário","title":"Open On"},"description":"só issues abertos nesse dia (YYYY-MM-DD, UTC) — calendário"},{"name":"issue_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"um issue concreto (links «ver problema», cartão #114)","title":"Issue Id"},"description":"um issue concreto (links «ver problema», cartão #114)"},{"name":"dimension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"dimensão de qualidade (ex.: completeness, validity) — pelo mapa tipo/subtipo → dimensão","title":"Dimension"},"description":"dimensão de qualidade (ex.: completeness, validity) — pelo mapa tipo/subtipo → dimensão"},{"name":"sla","in":"query","required":false,"schema":{"anyOf":[{"const":"breached","type":"string"},{"type":"null"}],"description":"'breached' = só os que passaram o alvo do SLA de resolução (sla_breached_at)","title":"Sla"},"description":"'breached' = só os que passaram o alvo do SLA de resolução (sla_breached_at)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IssueOut"},"title":"Response List Issues Api V1 Issues Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/issues/board":{"get":{"tags":["issues"],"summary":"Issues Board","description":"Contadores estado × responsável e estado × equipa para o board de\natividades, só sobre os datasets visíveis (ADR 0011 §2.4).","operationId":"issues_board_api_v1_issues_board_get","security":[{"ApiToken":[]}],"parameters":[{"name":"include_snoozed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Snoozed"}},{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"domain_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Id"}},{"name":"assignee_team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"id de equipa, 'mine' (das minhas equipas) ou 'none' (sem equipa)","title":"Assignee Team"},"description":"id de equipa, 'mine' (das minhas equipas) ou 'none' (sem equipa)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueBoardOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/issues/sla-report":{"get":{"tags":["issues"],"summary":"Issues Sla Report","description":"Relatório mensal de stewardship: abertos, fechados e fora do SLA de\nresolução, MTTA/MTTR (mediana e p90, em horas de relógio do SLA: por\nresolver e sem os adiamentos) e ageing das abertas, por domínio, equipa ou\nseveridade. Só sobre os datasets visíveis para quem pede.","operationId":"issues_sla_report_api_v1_issues_sla_report_get","security":[{"ApiToken":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}$"},{"type":"null"}],"description":"mês AAAA-MM (UTC), ex.: 2026-09; omissão = o mês atual","title":"Period"},"description":"mês AAAA-MM (UTC), ex.: 2026-09; omissão = o mês atual"},{"name":"group_by","in":"query","required":false,"schema":{"enum":["domain","team","severity"],"type":"string","default":"domain","title":"Group By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlaReportOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/issues/{issue_id}/events":{"get":{"tags":["issues"],"summary":"List Issue Events","description":"Rasto do issue (quem mudou estado/responsável/prazo, quando, de→para).","operationId":"list_issue_events_api_v1_issues__issue_id__events_get","security":[{"ApiToken":[]}],"parameters":[{"name":"issue_id","in":"path","required":true,"schema":{"type":"string","title":"Issue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IssueEventOut"},"title":"Response List Issue Events Api V1 Issues  Issue Id  Events Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/issues/{issue_id}/explanation":{"get":{"tags":["issues"],"summary":"Explain Anomaly","description":"Cartão de explicação de uma anomalia: métrica com a janela marcada,\ndimensão culpada (drill-down), upstream do lineage e diagnóstico IA. Um\nupstream invisível para quem pede é «Dataset restrito» (ADR 0011 §2.4).","operationId":"explain_anomaly_api_v1_issues__issue_id__explanation_get","security":[{"ApiToken":[]}],"parameters":[{"name":"issue_id","in":"path","required":true,"schema":{"type":"string","title":"Issue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyExplanationOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/issues/{issue_id}/impact":{"get":{"tags":["issues"],"summary":"Get Issue Impact","description":"Impacto da issue (cartão #107): datasets a jusante pela linhagem e os\nconsumidores dbt (exposures) que parte — «este nulo parte o dashboard de Receita».\nOs datasets a jusante invisíveis para quem pede são «Dataset restrito»,\nsem nome nem id (ADR 0011 §2.4): o impacto continua honesto.","operationId":"get_issue_impact_api_v1_issues__issue_id__impact_get","security":[{"ApiToken":[]}],"parameters":[{"name":"issue_id","in":"path","required":true,"schema":{"type":"string","title":"Issue Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueImpactOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/incidents":{"get":{"tags":["incidents"],"summary":"List Incidents","description":"Incidentes ativos, do mais recente para o mais antigo — só os cuja raiz\né visível para quem pede (ADR 0011 §2.4).","operationId":"list_incidents_api_v1_incidents_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IncidentOut"},"title":"Response List Incidents Api V1 Incidents Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/incidents/{incident_id}":{"get":{"tags":["incidents"],"summary":"Get Incident","operationId":"get_incident_api_v1_incidents__incident_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Incidente com as issues agrupadas e o dataset raiz."}},"/api/v1/tickets":{"get":{"tags":["tickets"],"summary":"List Tickets","description":"Tickets externos ligados a uma entidade — issue, incidente (`inc-…`), sugestão,\nproposta de contrato ou classificação de coluna —, do mais antigo para o mais\nrecente. O estado não é sincronizado com a ferramenta de tickets: um ticket\ncriado pelo DataVault nasce `open`; um ligado à mão fica `unknown`.","operationId":"list_tickets_api_v1_tickets_get","security":[{"ApiToken":[]}],"parameters":[{"name":"entity_type","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TicketEntityType"}},{"name":"entity_id","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExternalTicketOut"},"title":"Response List Tickets Api V1 Tickets Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tickets/integrations/{integration_id}/targets":{"get":{"tags":["tickets"],"summary":"List Integration Targets","description":"Projetos e tipos de issue (Jira) ou equipas (Linear) onde a integração pode\ncriar tickets, lidos agora do fornecedor — para escolher o destino no cartão do\nassistente. Só leitura (GET no Jira; query GraphQL no Linear), pelo caminho\nanti-SSRF. 404 integração de outro workspace, 402 plano, 502 o fornecedor falhou.","operationId":"list_integration_targets_api_v1_tickets_integrations__integration_id__targets_get","security":[{"ApiToken":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketTargetsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/duplicates":{"get":{"tags":["duplicates"],"summary":"List Duplicate Clusters","description":"Clusters de registos duplicados detetados nos scans, com filtros por dataset e estado. Pagina com `limit`/`offset`; o total filtrado vem no header `X-Total-Count`.","operationId":"list_duplicate_clusters_api_v1_duplicates_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DuplicateClusterOut"},"title":"Response List Duplicate Clusters Api V1 Duplicates Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/rag-gate":{"post":{"tags":["rag-gate"],"summary":"Avaliar um lote de documentos antes de os indexar (gate RAG)","description":"Veredito por documento — `aceitar`, `rever` ou `rejeitar` — com as flags que o\njustificam (dados pessoais por tipo, duplicado exato/aproximado do corpus ou do\nlote, idioma inesperado, boilerplate, texto curto, codificação partida,\ndocumento desatualizado) e um score 0–100.\n\nO conteúdo nunca é guardado: só o hash SHA-256 e um sketch de hashes dos\ndocumentos aceites (fora de dry-run, com `dataset_id`), para que o próximo\nlote detete o que já foi indexado. Autentica com o token de API `dvk_*`.","operationId":"evaluate_rag_batch_api_v1_rag_gate_post","security":[{"ApiToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RagGateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RagGateResponse"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Quota mensal de documentos do gate esgotada (`limit`: `rag_gate_documents_per_month`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"`dataset_id` não pertence ao workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"detail":"Dataset não encontrado.","code":null,"request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"413":{"description":"O lote excede 2 000 000 caracteres.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"description":"Rate limit do gate atingido (header `Retry-After`).","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}}}}},"/api/v1/datasets/{dataset_id}/validate":{"post":{"tags":["record-validation"],"summary":"Validar registos contra as regras do dataset (nada é guardado)","description":"Aplica as regras ativas do dataset a cada registo e devolve, por registo, se\npassou e que regras falharam (com o código do motivo); por regra, quantos\nregistos passaram, falharam ou não se aplicam; e o veredito do lote.\n\nAo nível do registo: `not_null`, `pattern`, `range`, `required_fields`,\n`valid_identifier` (dígito de controlo de NIF, NISS, IBAN…) e\n`in_reference_set`. As regras do dataset inteiro (`unique`, `freshness`,\n`row_count_min`…), as de SQL na fonte e as entre datasets ficam\n`not_applicable`. Os registos não são guardados nem enviados a um LLM, e a\nfonte do dataset não é lida. Autentica com o token de API `dvk_*`.","operationId":"validate_dataset_records_endpoint_api_v1_datasets__dataset_id__validate_post","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordValidationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordValidationResponse"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"O dataset não existe ou não é do workspace do token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"detail":"Dataset não encontrado.","code":null,"request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"413":{"description":"Mais de 5000 registos ou corpo acima de 2 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"description":"Rate limit da validação atingido (header `Retry-After`).","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}}}}},"/api/v1/reconcile":{"get":{"tags":["reconcile"],"summary":"Reconcile","description":"Contagem A (origem), contagem B (destino), delta absoluto e % e estado\nok | warn | fail. 404 se algum dataset não for deste workspace (ou não for\nvisível para quem pede — ADR 0011); 422 se algum ainda não tiver contagem\nnum perfil.","operationId":"reconcile_api_v1_reconcile_get","security":[{"ApiToken":[]}],"parameters":[{"name":"source","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"description":"Dataset de origem","title":"Source"},"description":"Dataset de origem"},{"name":"target","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":36,"description":"Dataset de destino","title":"Target"},"description":"Dataset de destino"},{"name":"tolerance_pct","in":"query","required":false,"schema":{"type":"number","maximum":100,"minimum":0,"description":"|delta %| até aqui → ok","default":0,"title":"Tolerance Pct"},"description":"|delta %| até aqui → ok"},{"name":"fail_pct","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"description":"|delta %| acima disto → fail (omissão: 2 × tolerância)","title":"Fail Pct"},"description":"|delta %| acima disto → fail (omissão: 2 × tolerância)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reconcile Api V1 Reconcile Get"},"example":{"source":{"dataset_id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","name":"clientes","connection_id":"c61c71df-1d14-449f-b4f1-044d4c5c9de7","connector_type":"sqlite","row_count":220,"profiled_at":"2026-10-11T05:54:47.364887","scan_id":"4569088f-7057-46dd-a5b2-15c744b4a33f"},"target":{"dataset_id":"a7e11a06-0950-4a0c-8bff-83e0586ff6fc","name":"faturas","connection_id":"c61c71df-1d14-449f-b4f1-044d4c5c9de7","connector_type":"sqlite","row_count":400,"profiled_at":"2026-10-11T05:54:47.711230","scan_id":"4569088f-7057-46dd-a5b2-15c744b4a33f"},"source_count":220,"target_count":400,"delta":180,"delta_pct":81.8182,"tolerance_pct":0,"fail_pct":0,"status":"fail","method":"profile_row_count"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/reports":{"get":{"tags":["reports"],"summary":"List Reports","description":"Relatórios IA do workspace, mais recentes primeiro. Pagina com `limit`/`offset`; o total vem no header `X-Total-Count`.","operationId":"list_reports_api_v1_reports_get","security":[{"ApiToken":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportOut"},"title":"Response List Reports Api V1 Reports Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/reports/{report_id}/export.pdf":{"get":{"tags":["reports"],"summary":"Export Report Pdf","description":"PDF do mesmo documento do export HTML — render server-side via\nweasyprint (extra `pdf`). Sem o extra: 501 com a dica de instalação.","operationId":"export_report_pdf_api_v1_reports__report_id__export_pdf_get","security":[{"ApiToken":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/reports/{report_id}/export":{"get":{"tags":["reports"],"summary":"Export Report","description":"HTML autónomo (download) — para partilhar por email ou imprimir.","operationId":"export_report_api_v1_reports__report_id__export_get","security":[{"ApiToken":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/reports/{report_id}/trace":{"get":{"tags":["reports"],"summary":"Get Report Trace","description":"Percurso de uma geração como grafo (nós e arestas): o que correu em cada passo, quanto tempo levou e se houve alternativa (ex.: modelo de texto sem IA). `lang=pt|en`.","operationId":"get_report_trace_api_v1_reports__report_id__trace_get","security":[{"ApiToken":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(pt|en)$","default":"pt","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportTraceOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/reports/{report_id}":{"get":{"tags":["reports"],"summary":"Get Report","operationId":"get_report_api_v1_reports__report_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Estado e conteúdo Markdown de um relatório IA."}},"/api/v1/reports/{report_id}/public-share":{"get":{"tags":["reports"],"summary":"Get Report Public Share","description":"Estado do link público (qualquer membro — o link é para ser enviado).","operationId":"get_report_public_share_api_v1_reports__report_id__public_share_get","security":[{"ApiToken":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Report Public Share Api V1 Reports  Report Id  Public Share Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/routines/blocks":{"get":{"tags":["routines"],"summary":"List Routine Blocks","operationId":"list_routine_blocks_api_v1_routines_blocks_get","security":[{"ApiToken":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","pattern":"^(pt|en)$","default":"pt","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutineCatalogOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Catálogo versionado dos passos do pipeline de relatórios, com o que é configurável hoje e os selos de cada passo. `lang=pt|en`."}},"/api/v1/suggestions":{"get":{"tags":["suggestions"],"summary":"List Suggestions","description":"Sugestões de melhoria com filtros por dataset, estado e categoria. Pagina com `limit`/`offset`; o total filtrado vem no header `X-Total-Count`.","operationId":"list_suggestions_api_v1_suggestions_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SuggestionStatus"},{"type":"null"}],"title":"Status"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SuggestionCategory"},{"type":"null"}],"title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SuggestionOut"},"title":"Response List Suggestions Api V1 Suggestions Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/suggestions/{suggestion_id}/events":{"get":{"tags":["suggestions"],"summary":"List Suggestion Events","description":"Trilho de auditoria da sugestão: quem mudou o quê, quando e porquê.","operationId":"list_suggestion_events_api_v1_suggestions__suggestion_id__events_get","security":[{"ApiToken":[]}],"parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","title":"Suggestion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Suggestion Events Api V1 Suggestions  Suggestion Id  Events Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/suggestions/{suggestion_id}/pull-requests":{"get":{"tags":["suggestions"],"summary":"List Suggestion Pull Requests","operationId":"list_suggestion_pull_requests_api_v1_suggestions__suggestion_id__pull_requests_get","security":[{"ApiToken":[]}],"parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","title":"Suggestion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Suggestion Pull Requests Api V1 Suggestions  Suggestion Id  Pull Requests Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/integrations/dbt/run-results":{"post":{"tags":["orchestrators","orchestrators"],"summary":"Push Dbt Run Results","description":"Resultados de um `dbt test`/`dbt build` corrido no pipeline do cliente.\n\nCorpo: `{\"run_results\": <target/run_results.json>, \"manifest\": <target/manifest.json>}`\n(e `connection_id` opcional). Cada teste casa com o dataset (schema + alias) e\ncom a regra — pelo `rule_id` em `config.meta.beryx` do export\n`rules.dbt.yml` (ou em `config.meta.datavault`, até 2027-05-31), senão pela\ncoluna e tipo de teste. Com regra, o resultado conta\npara `GET /datasets/{dataset_id}/verdict`; sem regra equivalente (testes\nsingulares, `relationships`) abre ou resolve um issue `rule_violation` com\n`subtype` `dbt_test`. Reenviar o mesmo `invocation_id` não grava nada outra vez\n(`status` `duplicate`). Só metadados de execução: schema fechado (chaves\ndesconhecidas, campos com linhas como `failed_rows` ou `failures` que não seja\numa contagem → 422). Só casa com os datasets em que quem envia pode escrever\n(domínios restritos): os outros ficam como `no_dataset`, iguais a um dataset\nque não existe. Aceita tokens de API.","operationId":"push_dbt_run_results_api_v1_integrations_dbt_run_results_post","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DbtRunResultsProcessedOut"},{"$ref":"#/components/schemas/DbtRunResultsDuplicateOut"}],"discriminator":{"propertyName":"status","mapping":{"processed":"#/components/schemas/DbtRunResultsProcessedOut","duplicate":"#/components/schemas/DbtRunResultsDuplicateOut"}},"title":"Response Push Dbt Run Results Api V1 Integrations Dbt Run Results Post"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["run_results","manifest"],"properties":{"run_results":{"type":"object","description":"O `target/run_results.json` tal e qual (schema v4–v6)."},"manifest":{"type":"object","description":"O `target/manifest.json` do mesmo projeto (v7+)."},"connection_id":{"type":"string","description":"Casar só com os datasets desta conexão."}}}}}}}},"/api/v1/orchestrator-runs":{"get":{"tags":["orchestrators"],"summary":"List Orchestrator Runs","description":"Runs de orquestradores (dbt Cloud, Airflow) mais recentes primeiro — o mesmo\ncontexto que o diagnóstico de causa-raiz usa. Só metadados do run.","operationId":"list_orchestrator_runs_api_v1_orchestrator_runs_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OrchestratorSource"},{"type":"null"}],"title":"Source"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/OrchestratorRunStatus"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":50,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrchestratorRunOut"},"title":"Response List Orchestrator Runs Api V1 Orchestrator Runs Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"tags":["orchestrators"],"summary":"Report Orchestrator Run","description":"Regista (ou atualiza, pelo `external_run_id`) o run de uma DAG/task Airflow.\nAceita tokens de API — é o que os callbacks do beryx-airflow chamam.","operationId":"report_orchestrator_run_api_v1_orchestrator_runs_post","security":[{"ApiToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestratorRunIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestratorRunOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/lineage/sankey":{"get":{"tags":["lineage"],"summary":"Get Lineage Sankey","description":"Sankey de qualidade: nós por camada medallion (score + volume) e ligações\nda linhagem com largura = volume estimado e cor = faixa do score de origem.","operationId":"get_lineage_sankey_api_v1_lineage_sankey_get","security":[{"ApiToken":[]}],"parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Limitar a uma conexão","title":"Connection Id"},"description":"Limitar a uma conexão"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageSankeyOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/lineage/dbt-metrics/drift":{"get":{"tags":["lineage"],"summary":"Get Metric Drift","description":"Métricas dbt definidas 2× (ou mais) com fórmulas, filtros, janelas ou\nmodelos diferentes entre projetos/pastas, com as variantes e as diferenças.","operationId":"get_metric_drift_api_v1_lineage_dbt_metrics_drift_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Metric Drift Api V1 Lineage Dbt Metrics Drift Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/ide/resolve":{"get":{"tags":["ide"],"summary":"Resolve","description":"Resumo de qualidade por tabela referenciada: score, issues abertos, versão do\ncontrato ativo, colunas PII e violações da política de dados. Só metadados.","operationId":"resolve_api_v1_ide_resolve_get","security":[{"ApiToken":[]}],"parameters":[{"name":"ref","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"maxItems":50,"description":"Tabelas referenciadas (`schema.tabela` ou `tabela`)","title":"Ref"},"description":"Tabelas referenciadas (`schema.tabela` ou `tabela`)"},{"name":"default_schema","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Schema a preferir quando a referência não o indica","title":"Default Schema"},"description":"Schema a preferir quando a referência não o indica"},{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restringe a uma conexão","title":"Connection Id"},"description":"Restringe a uma conexão"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeResolveOut"},"example":{"results":[{"ref":"clientes","dataset":{"id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","name":"clientes","schema_name":null,"table_name":"clientes","connection_name":"ERP Demo","layer":null,"score":78,"trust_score":37,"trust_grade":"E","open_issues":3,"open_issues_by_severity":{"critical":1,"warning":2},"contract_version":null,"has_pii":true,"pii_columns":["email","nif","nome"],"policy_status":"off","policy_violations":[]},"ambiguous":false,"candidates":["clientes"]},{"ref":"vendas.encomendas","dataset":null,"ambiguous":false,"candidates":[]}]}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/ide/datasets/{dataset_id}/columns":{"get":{"tags":["ide"],"summary":"Dataset Columns","description":"Perfil por coluna para o hover: tipo, nulos %, distintos e classificação.","operationId":"dataset_columns_api_v1_ide_datasets__dataset_id__columns_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"path","required":true,"schema":{"type":"string","title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeDatasetColumnsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/ide/agent-config":{"get":{"tags":["ide"],"summary":"Agent Config","description":"Config MCP pronta a colar por agente de código (Claude Code, Claude Desktop,\nCursor, VS Code, Codex) e snippets de regras. Nunca contém o token: traz o\nplaceholder `token_placeholder`, que a UI substitui no browser.","operationId":"agent_config_api_v1_ide_agent_config_get","security":[{"ApiToken":[]}],"parameters":[{"name":"tool","in":"query","required":false,"schema":{"anyOf":[{"enum":["claude-code","claude-desktop","cursor","vscode","codex"],"type":"string"},{"type":"null"}],"description":"Ferramenta; omitido => todas","title":"Tool"},"description":"Ferramenta; omitido => todas"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Config Api V1 Ide Agent Config Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/workspace/data-policy":{"get":{"tags":["compliance"],"summary":"Read Data Policy","description":"Política do workspace; com `dataset_id`, a EFETIVA desse dataset (fundida\ncom a dos seus domínios, cartão #147) e a origem de cada regra/campo.","operationId":"read_data_policy_api_v1_workspace_data_policy_get","security":[{"ApiToken":[]}],"parameters":[{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataPolicyStatusOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/engineering":{"get":{"tags":["dashboard"],"summary":"Dashboard Engineering","operationId":"dashboard_engineering_api_v1_dashboard_engineering_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngineeringDashboardOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Métricas para engenharia de dados: scans, falhas, tendência."}},"/api/v1/dashboard/management":{"get":{"tags":["dashboard"],"summary":"Dashboard Management","operationId":"dashboard_management_api_v1_dashboard_management_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementDashboardOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Métricas para gestão: issues abertas/resolvidas, adoção."}},"/api/v1/dashboard/executive":{"get":{"tags":["dashboard"],"summary":"Dashboard Executive","operationId":"dashboard_executive_api_v1_dashboard_executive_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutiveDashboardOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Score global, risco e exposição estimada em €/mês."}},"/api/v1/dashboard/calendar":{"get":{"tags":["dashboard"],"summary":"Dashboard Calendar","description":"Heatmap-calendário do workspace: score médio, issues abertas e scans\nfalhados por dia (cache 1h).","operationId":"dashboard_calendar_api_v1_dashboard_calendar_get","security":[{"ApiToken":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":366,"minimum":7,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityCalendarOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/slo":{"get":{"tags":["dashboard"],"summary":"Dashboard Slo","description":"SLO de dados: attainment mensal e por dataset das `slaProperties` de\nlatência do contrato ODCS face à idade observada nos perfis, e violações\ncom os issues de freshness desse dia.","operationId":"dashboard_slo_api_v1_dashboard_slo_get","security":[{"ApiToken":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":6,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SloReportOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/slo.csv":{"get":{"tags":["dashboard"],"summary":"Dashboard Slo Csv","description":"Export CSV do SLO: uma linha por dataset-dia medido.","operationId":"dashboard_slo_csv_api_v1_dashboard_slo_csv_get","security":[{"ApiToken":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":6,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/dimensions":{"get":{"tags":["dashboard"],"summary":"Dashboard Dimensions","description":"Scorecard por dimensão de qualidade (DAMA/ISO 8000) do workspace e de cada\ndomínio: média do último score de cada dataset, só com os datasets medidos\nnessa dimensão (`datasets_measured` de `datasets_total`), checks e issues\nabertos. `score=null` = nenhum dataset medido, nunca 100.","operationId":"dashboard_dimensions_api_v1_dashboard_dimensions_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardDimensionsOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/dimensions.csv":{"get":{"tags":["dashboard"],"summary":"Dashboard Dimensions Csv","description":"Export CSV do scorecard: uma linha por dataset × dimensão (último scan). Só\nmetadados — nomes, scores e contagens; nunca amostras nem valores observados.","operationId":"dashboard_dimensions_csv_api_v1_dashboard_dimensions_csv_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/pii":{"get":{"tags":["dashboard"],"summary":"Dashboard Pii","description":"Mapa de PII do workspace: datasets × tipos de dado pessoal, origem da\ndeteção (amostras do perfil, nome da coluna ou AI-readiness) e cobertura\npor regras ativas. Só metadados — nunca os valores das amostras.","operationId":"dashboard_pii_api_v1_dashboard_pii_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PiiMapOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/pii.csv":{"get":{"tags":["dashboard"],"summary":"Dashboard Pii Csv","description":"Export CSV do mapa de PII para o DPO: uma linha por coluna com PII.","operationId":"dashboard_pii_csv_api_v1_dashboard_pii_csv_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/dashboard/finops":{"get":{"tags":["dashboard"],"summary":"Dashboard Finops","description":"Visão FinOps: custos estimados por dataset + recomendações.","operationId":"dashboard_finops_api_v1_dashboard_finops_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinopsOverviewOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/governance":{"get":{"tags":["governance"],"summary":"Get Governance","description":"Eficácia do programa de governação do workspace: cobertura (owner,\ndocumentação, classificação, contratos, regras), cycle time e MTTR dos\ncríticos, cumprimento do SLO/SLA e dos prazos, adoção de sugestões e de\nregras «nunca mais», score por dimensão, incidentes críticos e uso — cada\nKPI com meta (workspace → organização → omissão), semáforo, variação e\ntendência mensal; a matriz por domínio e as metas. Só leitura, zero LLM.","operationId":"get_governance_api_v1_governance_get","security":[{"ApiToken":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora.","default":6,"title":"Months"},"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GovernanceOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/governance/scorecard.csv":{"get":{"tags":["governance"],"summary":"Get Governance Scorecard Csv","description":"Scorecard executivo em CSV: uma linha por KPI (valor, meta e origem,\nestado, folga, variação e um valor por mês) e uma por domínio × KPI. Só\ncódigos, números e nomes de domínios; células protegidas contra fórmulas.","operationId":"get_governance_scorecard_csv_api_v1_governance_scorecard_csv_get","security":[{"ApiToken":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora.","default":6,"title":"Months"},"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/governance/evidence.md":{"get":{"tags":["governance"],"summary":"Get Governance Evidence","description":"Evidência do programa de governação em Markdown, para o pack de\nprocurement ou due diligence do cliente: resumo do semáforo, KPIs com meta\ne tendência, domínios e o método. Só agregados — sem nomes de datasets,\ncolunas, amostras nem pessoas.","operationId":"get_governance_evidence_api_v1_governance_evidence_md_get","security":[{"ApiToken":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora.","default":6,"title":"Months"},"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/governance/domains/{domain_id}":{"get":{"tags":["governance"],"summary":"Get Domain Governance","description":"Drill-down de um domínio: os mesmos KPIs sobre os datasets do domínio\n(sem os utilizadores ativos, que são do workspace), com o SLA declarado como\nmeta do SLO e a tendência mensal do domínio.","operationId":"get_domain_governance_api_v1_governance_domains__domain_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora.","default":6,"title":"Months"},"description":"Meses de calendário (UTC) na tendência; o corrente conta até agora."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GovernanceOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/bi":{"get":{"tags":["bi"],"summary":"List Feeds","description":"Catálogo dos feeds: nome, colunas (nome e tipo), janela por omissão e\no código Power Query pronto a colar.\n\nO Power Query pode ler isto para validar o esquema antes de atualizar.","operationId":"list_feeds_api_v1_bi_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Feeds Api V1 Bi Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/bi/{feed}":{"get":{"tags":["bi"],"summary":"Get Feed","description":"Uma página de um feed tabular com colunas fixas e versionadas.\n\nJSON: `{feed, schema_version, columns, total, limit, offset, next_offset,\nrows}`. CSV: cabeçalho + linhas, separador `,`, decimais com ponto; o total\ne a próxima página vêm em `X-Total-Count` e `X-Next-Offset`. Ordem estável\n— paginar com `offset` nunca repete nem salta linhas. Só metadados e\nmétricas; nunca amostras de dados.","operationId":"get_feed_api_v1_bi__feed__get","security":[{"ApiToken":[]}],"parameters":[{"name":"feed","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BiFeed"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Primeiro dia incluído (YYYY-MM-DD, UTC). Omissão: 90 dias em scores/slo/activity.","title":"Since"},"description":"Primeiro dia incluído (YYYY-MM-DD, UTC). Omissão: 90 dias em scores/slo/activity."},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Último dia incluído (YYYY-MM-DD, UTC).","title":"Until"},"description":"Último dia incluído (YYYY-MM-DD, UTC)."},{"name":"domain_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Só datasets deste domínio.","title":"Domain Id"},"description":"Só datasets deste domínio."},{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Só este dataset.","title":"Dataset Id"},"description":"Só este dataset."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IssueStatus"},{"type":"null"}],"description":"Só no feed issues.","title":"Status"},"description":"Só no feed issues."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":5000,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"format","in":"query","required":false,"schema":{"enum":["json","csv"],"type":"string","default":"json","title":"Format"}},{"name":"bom","in":"query","required":false,"schema":{"type":"boolean","description":"CSV com BOM UTF-8 (acentos no Excel).","default":false,"title":"Bom"},"description":"CSV com BOM UTF-8 (acentos no Excel)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/compliance/clauses":{"get":{"tags":["compliance"],"summary":"List Clauses","description":"Alíneas do art. 10.º com o texto da obrigação — base dos formulários.","operationId":"list_clauses_api_v1_compliance_clauses_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"title":"Response List Clauses Api V1 Compliance Clauses Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/compliance/ai-systems":{"get":{"tags":["compliance"],"summary":"List Ai Systems","operationId":"list_ai_systems_api_v1_compliance_ai_systems_get","security":[{"ApiToken":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AiSystemListItemOut"},"title":"Response List Ai Systems Api V1 Compliance Ai Systems Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Sistemas de IA registados para o dossiê do AI Act."}},"/api/v1/compliance/ai-systems/{system_id}":{"get":{"tags":["compliance"],"summary":"Get Ai System","operationId":"get_ai_system_api_v1_compliance_ai_systems__system_id__get","security":[{"ApiToken":[]}],"parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiSystemDetailOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Detalhe de um sistema de IA registado."}},"/api/v1/compliance/ai-systems/{system_id}/art10":{"get":{"tags":["compliance"],"summary":"Get Art10 Pack","description":"Dossiê de evidência do art. 10.º: alínea a alínea, com lacunas explícitas.","operationId":"get_art10_pack_api_v1_compliance_ai_systems__system_id__art10_get","security":[{"ApiToken":[]}],"parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Art10PackOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/compliance/ai-systems/{system_id}/art10.md":{"get":{"tags":["compliance"],"summary":"Get Art10 Markdown","operationId":"get_art10_markdown_api_v1_compliance_ai_systems__system_id__art10_md_get","security":[{"ApiToken":[]}],"parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}},"description":"Dossiê do art. 10.º em Markdown, pronto a anexar."}},"/api/v1/cde":{"get":{"tags":["compliance"],"summary":"List Cdes","description":"Elementos de dados críticos do workspace, por regulação e dataset.\nSó de datasets que quem pede vê; o total vem no header X-Total-Count.","operationId":"list_cdes_api_v1_cde_get","security":[{"ApiToken":[]}],"parameters":[{"name":"regulation","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CdeRegulation"},{"type":"null"}],"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações.","title":"Regulation"},"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações."},{"name":"dataset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Dataset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"itens por página (1–500)","default":100,"title":"Limit"},"description":"itens por página (1–500)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"itens a saltar; o total vem em X-Total-Count","default":0,"title":"Offset"},"description":"itens a saltar; o total vem em X-Total-Count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CdeOut"},"title":"Response List Cdes Api V1 Cde Get"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/cde/dossier":{"get":{"tags":["compliance"],"summary":"Get Dossier","description":"Dossiê regulatório calculado na hora: por regulação e requisito (princípio\ndo BCBS 239, número do art. 19.º do Reg. Delegado 2015/35), cada elemento\ncrítico com os controlos por dimensão, o último resultado, os problemas\nabertos, o SLA, a linhagem a um salto, o owner e o contrato ODCS, e as\nlacunas. Determinístico, sem LLM; nenhum estado afirma conformidade.","operationId":"get_dossier_api_v1_cde_dossier_get","security":[{"ApiToken":[]}],"parameters":[{"name":"regulation","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CdeRegulation"},{"type":"null"}],"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações.","title":"Regulation"},"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações."},{"name":"domain_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"description":"Só os elementos de datasets deste domínio.","title":"Domain Id"},"description":"Só os elementos de datasets deste domínio."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierOut"}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/cde/dossier.md":{"get":{"tags":["compliance"],"summary":"Get Dossier Markdown","description":"O dossiê em Markdown (o mesmo texto do relatório gravado por POST /cde/dossier).","operationId":"get_dossier_markdown_api_v1_cde_dossier_md_get","security":[{"ApiToken":[]}],"parameters":[{"name":"regulation","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CdeRegulation"},{"type":"null"}],"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações.","title":"Regulation"},"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações."},{"name":"domain_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"description":"Só os elementos de datasets deste domínio.","title":"Domain Id"},"description":"Só os elementos de datasets deste domínio."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/cde/dossier.csv":{"get":{"tags":["compliance"],"summary":"Get Dossier Csv","description":"O dossiê em CSV: uma linha por elemento × requisito × dimensão, com o estado,\nas regras, o último resultado, os problemas abertos e as lacunas. Células\nprotegidas contra fórmulas.","operationId":"get_dossier_csv_api_v1_cde_dossier_csv_get","security":[{"ApiToken":[]}],"parameters":[{"name":"regulation","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CdeRegulation"},{"type":"null"}],"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações.","title":"Regulation"},"description":"bcbs239 | solvency2 | custom; omitida = todas as regulações."},{"name":"domain_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"description":"Só os elementos de datasets deste domínio.","title":"Domain Id"},"description":"Só os elementos de datasets deste domínio."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"schemas":{"AiReadinessComponentsOut":{"properties":{"qualidade":{"type":"number","title":"Qualidade"},"estabilidade":{"type":"number","title":"Estabilidade"},"privacidade":{"type":"number","title":"Privacidade"},"atualidade":{"type":"number","title":"Atualidade"}},"type":"object","required":["qualidade","estabilidade","privacidade","atualidade"],"title":"AiReadinessComponentsOut","description":"Pontuação 0–100 de cada componente do score global."},"AiReadinessDimensionsOut":{"properties":{"qualidade":{"type":"number","title":"Qualidade"},"estabilidade":{"type":"number","title":"Estabilidade"},"privacidade":{"type":"number","title":"Privacidade"},"atualidade":{"type":"number","title":"Atualidade"},"volume":{"type":"number","title":"Volume"},"rotulos":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rotulos"}},"type":"object","required":["qualidade","estabilidade","privacidade","atualidade","volume"],"title":"AiReadinessDimensionsOut","description":"As componentes, o volume e, com a qualidade dos rótulos medida, `rotulos`."},"AiReadinessLabelQualityOut":{"properties":{"pct_suspect":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Pct Suspect"},"n_sample":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Sample"},"n_suspect":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N Suspect"},"computed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Computed At"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"pct_suspect_ci95":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"number"}]},"type":"array"},{"type":"null"}],"title":"Pct Suspect Ci95"}},"type":"object","required":["pct_suspect","n_sample","n_suspect","computed_at","scan_id","pct_suspect_ci95"],"title":"AiReadinessLabelQualityOut","description":"Último resultado válido da qualidade dos rótulos (só contagens)."},"AiReadinessPiiColumnOut":{"properties":{"column":{"type":"string","title":"Column"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["column","reason"],"title":"AiReadinessPiiColumnOut"},"AiReadinessQuasiIdentifierOut":{"properties":{"column":{"type":"string","title":"Column"},"kind":{"type":"string","title":"Kind"},"label":{"type":"string","title":"Label"}},"type":"object","required":["column","kind","label"],"title":"AiReadinessQuasiIdentifierOut"},"AiReadinessUseCaseOut":{"properties":{"use_case":{"type":"string","enum":["rag","ml","agente","bi"],"title":"Use Case"},"label":{"type":"string","title":"Label"},"descricao":{"type":"string","title":"Descricao"},"score":{"type":"number","title":"Score"},"verdict":{"type":"string","enum":["pronto","com_reservas","nao_pronto"],"title":"Verdict"},"blocker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocker"},"weights":{"additionalProperties":{"type":"number"},"type":"object","title":"Weights"}},"type":"object","required":["use_case","label","descricao","score","verdict","blocker","weights"],"title":"AiReadinessUseCaseOut","description":"Prontidão para um caso de uso; um `blocker` chumba o veredito."},"AiSystemDatasetLinkOut":{"properties":{"link_id":{"type":"string","title":"Link Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"}},"type":"object","required":["link_id","dataset_id","name","role","note","row_count"],"title":"AiSystemDatasetLinkOut","description":"Conjunto de dados afeto ao sistema, com o papel."},"AiSystemDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"intended_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intended Purpose"},"risk_class":{"type":"string","title":"Risk Class"},"annex_iii_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annex Iii Area"},"actor_role":{"type":"string","title":"Actor Role"},"deployment_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deployment Context"},"declarations":{"additionalProperties":{"type":"string"},"type":"object","title":"Declarations","description":"Declaração por alínea do art. 10.º."},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"datasets":{"items":{"$ref":"#/components/schemas/AiSystemDatasetLinkOut"},"type":"array","title":"Datasets"}},"type":"object","required":["id","name","intended_purpose","risk_class","annex_iii_area","actor_role","deployment_context","declarations","owner","created_at","updated_at","datasets"],"title":"AiSystemDetailOut"},"AiSystemListItemOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"intended_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intended Purpose"},"risk_class":{"type":"string","title":"Risk Class"},"annex_iii_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annex Iii Area"},"actor_role":{"type":"string","title":"Actor Role"},"deployment_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deployment Context"},"declarations":{"additionalProperties":{"type":"string"},"type":"object","title":"Declarations","description":"Declaração por alínea do art. 10.º."},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"dataset_count":{"type":"integer","title":"Dataset Count","description":"Conjuntos de dados afetos ao sistema."}},"type":"object","required":["id","name","intended_purpose","risk_class","annex_iii_area","actor_role","deployment_context","declarations","owner","created_at","updated_at","dataset_count"],"title":"AiSystemListItemOut"},"AnomalyBandOut":{"properties":{"low":{"type":"number","title":"Low"},"high":{"type":"number","title":"High"}},"type":"object","required":["low","high"],"title":"AnomalyBandOut"},"AnomalyBaselineOut":{"properties":{"kind":{"type":"string","title":"Kind"},"weekday":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekday"},"weekday_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weekday Label"},"points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Points"}},"type":"object","required":["kind"],"title":"AnomalyBaselineOut","description":"Baseline que o detetor usou (ANOMTEMP v1): global ou o mesmo dia da semana."},"AnomalyDiagnosisRef":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","status"],"title":"AnomalyDiagnosisRef"},"AnomalyDrilldownOut":{"properties":{"metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"dimension":{"type":"string","title":"Dimension"},"segment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Segment"},"share":{"type":"number","title":"Share"},"dominant":{"type":"boolean","title":"Dominant"},"total_delta":{"type":"number","title":"Total Delta"},"dimensions_analyzed":{"items":{"type":"string"},"type":"array","title":"Dimensions Analyzed"},"baseline_points":{"type":"integer","title":"Baseline Points","default":0},"segments":{"items":{"$ref":"#/components/schemas/AnomalySegmentOut"},"type":"array","title":"Segments"}},"type":"object","required":["dimension","share","dominant","total_delta"],"title":"AnomalyDrilldownOut"},"AnomalyExplanationOut":{"properties":{"issue_id":{"type":"string","title":"Issue Id"},"metric":{"type":"string","title":"Metric"},"metric_label":{"type":"string","title":"Metric Label"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"unit":{"type":"string","title":"Unit","default":""},"observed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Observed"},"observed_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed Display"},"expected":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expected"},"expected_display":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Display"},"z_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Z Score"},"z_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Z Threshold"},"tuned_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tuned Threshold"},"tuned_threshold_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tuned Threshold Label"},"p_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P Value"},"confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence"},"baseline":{"anyOf":[{"$ref":"#/components/schemas/AnomalyBaselineOut"},{"type":"null"}]},"band":{"anyOf":[{"$ref":"#/components/schemas/AnomalyBandOut"},{"type":"null"}]},"points":{"items":{"$ref":"#/components/schemas/AnomalyPointOut"},"type":"array","title":"Points"},"window":{"anyOf":[{"$ref":"#/components/schemas/AnomalyWindowOut"},{"type":"null"}]},"chart_svg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chart Svg"},"drilldown":{"anyOf":[{"$ref":"#/components/schemas/AnomalyDrilldownOut"},{"type":"null"}]},"upstream":{"items":{"$ref":"#/components/schemas/AnomalyUpstreamOut"},"type":"array","title":"Upstream"},"external_upstream":{"items":{"$ref":"#/components/schemas/ExternalLineageNodeOut"},"type":"array","title":"External Upstream"},"diagnosis":{"anyOf":[{"$ref":"#/components/schemas/AnomalyDiagnosisRef"},{"type":"null"}]}},"type":"object","required":["issue_id","metric","metric_label"],"title":"AnomalyExplanationOut","description":"Cartão de explicação de uma anomalia (cartão #111)."},"AnomalyPointOut":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At"},"value":{"type":"number","title":"Value"},"in_window":{"type":"boolean","title":"In Window","default":false}},"type":"object","required":["scan_id","value"],"title":"AnomalyPointOut"},"AnomalySegmentOut":{"properties":{"segment":{"type":"string","title":"Segment"},"label":{"type":"string","title":"Label"},"observed":{"type":"number","title":"Observed"},"expected":{"type":"number","title":"Expected"},"delta":{"type":"number","title":"Delta"},"share":{"type":"number","title":"Share"}},"type":"object","required":["segment","label","observed","expected","delta","share"],"title":"AnomalySegmentOut"},"AnomalyTuningEntryOut":{"properties":{"subtype":{"type":"string","title":"Subtype"},"level":{"type":"integer","title":"Level"},"threshold":{"type":"number","title":"Threshold"},"silenced":{"type":"boolean","title":"Silenced"},"ignored_count":{"type":"integer","title":"Ignored Count"},"resolved_count":{"type":"integer","title":"Resolved Count"},"last_changed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Changed At"},"legacy":{"type":"boolean","title":"Legacy","default":false},"next_on_ignore":{"additionalProperties":true,"type":"object","title":"Next On Ignore"}},"type":"object","required":["subtype","level","threshold","silenced","ignored_count","resolved_count","next_on_ignore"],"title":"AnomalyTuningEntryOut","description":"Degrau de uma métrica×coluna afinado pelo feedback (cartão #157)."},"AnomalyUpstreamOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"via_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via Column"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"last_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scan At"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"last_schema_change_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Schema Change At"},"last_schema_change_severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Schema Change Severity"},"last_data_change_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Data Change At"},"last_change_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Change At"},"open_issues":{"type":"integer","title":"Open Issues","default":0},"suspect":{"type":"boolean","title":"Suspect","default":false},"restricted":{"type":"boolean","title":"Restricted","default":false}},"type":"object","required":["dataset_id","name"],"title":"AnomalyUpstreamOut"},"AnomalyWindowOut":{"properties":{"start_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start At"},"end_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End At"},"scans":{"type":"integer","title":"Scans"}},"type":"object","required":["scans"],"title":"AnomalyWindowOut"},"Art10BiasSignalOut":{"properties":{"dataset":{"type":"string","title":"Dataset"},"column":{"type":"string","title":"Column"},"dimension":{"type":"string","title":"Dimension"},"finding":{"type":"string","title":"Finding"},"severity":{"type":"string","title":"Severity","description":"info | atencao"}},"type":"object","required":["dataset","column","dimension","finding","severity"],"title":"Art10BiasSignalOut","description":"Dimensão onde o exame de enviesamento é obrigatório."},"Art10ClauseOut":{"properties":{"ref":{"type":"string","title":"Ref"},"title":{"type":"string","title":"Title"},"requirement":{"type":"string","title":"Requirement"},"source":{"type":"string","title":"Source","description":"observado | declarado | misto"},"status":{"type":"string","title":"Status","description":"coberto | parcial | em_falta | nao_aplicavel"},"evidence":{"items":{"type":"string"},"type":"array","title":"Evidence"},"gaps":{"items":{"type":"string"},"type":"array","title":"Gaps"},"declaration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Declaration"}},"type":"object","required":["ref","title","requirement","source","status","evidence","gaps","declaration"],"title":"Art10ClauseOut","description":"Avaliação de uma alínea do art. 10.º."},"Art10DatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"column_count":{"type":"integer","title":"Column Count"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"dimensions":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"number"}]},"type":"object"},{"type":"null"}],"title":"Dimensions"},"last_profiled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Profiled At"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Tipo de conector da fonte."},"connection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"pii_columns":{"items":{"type":"string"},"type":"array","title":"Pii Columns"}},"type":"object","required":["dataset_id","name","role","row_count","column_count","score","dimensions","last_profiled_at","source","connection","layer","pii_columns"],"title":"Art10DatasetOut","description":"Factos observados de um conjunto afeto ao sistema."},"Art10PackOut":{"properties":{"ai_system":{"$ref":"#/components/schemas/Art10SystemOut"},"applicable":{"type":"boolean","title":"Applicable"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"datasets":{"items":{"$ref":"#/components/schemas/Art10DatasetOut"},"type":"array","title":"Datasets"},"bias_signals":{"items":{"$ref":"#/components/schemas/Art10BiasSignalOut"},"type":"array","title":"Bias Signals"},"summary":{"$ref":"#/components/schemas/Art10SummaryOut"},"clauses":{"items":{"$ref":"#/components/schemas/Art10ClauseOut"},"type":"array","title":"Clauses"},"disclaimer":{"type":"string","title":"Disclaimer"}},"type":"object","required":["ai_system","applicable","generated_at","datasets","bias_signals","summary","clauses","disclaimer"],"title":"Art10PackOut","description":"Dossiê de evidência do art. 10.º de um sistema de IA."},"Art10SummaryOut":{"properties":{"datasets":{"type":"integer","title":"Datasets"},"roles":{"additionalProperties":{"type":"integer"},"type":"object","title":"Roles"},"avg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Score"},"open_issues":{"type":"integer","title":"Open Issues"},"critical_issues":{"type":"integer","title":"Critical Issues"},"active_rules":{"type":"integer","title":"Active Rules"},"prepared_operations":{"type":"integer","title":"Prepared Operations"},"pii_datasets":{"type":"integer","title":"Pii Datasets"},"coverage_pct":{"type":"integer","title":"Coverage Pct"},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts","description":"Alíneas por estado."}},"type":"object","required":["datasets","roles","avg_score","open_issues","critical_issues","active_rules","prepared_operations","pii_datasets","coverage_pct","counts"],"title":"Art10SummaryOut"},"Art10SystemOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"intended_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intended Purpose"},"risk_class":{"type":"string","title":"Risk Class"},"annex_iii_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Annex Iii Area"},"actor_role":{"type":"string","title":"Actor Role"},"deployment_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deployment Context"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"}},"type":"object","required":["id","name","intended_purpose","risk_class","annex_iii_area","actor_role","deployment_context","owner"],"title":"Art10SystemOut"},"AutoMonitorOut":{"properties":{"monitor":{"type":"string","title":"Monitor"},"label":{"type":"string","title":"Label"},"state":{"type":"string","title":"State"},"detail":{"type":"string","title":"Detail"},"threshold":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Threshold"}},"type":"object","required":["monitor","label","state","detail"],"title":"AutoMonitorOut","description":"Estado de um monitor automático: active | learning | unavailable."},"AutoMonitorsOut":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"dataset_enabled":{"type":"boolean","title":"Dataset Enabled"},"connection_enabled":{"type":"boolean","title":"Connection Enabled"},"snapshots":{"type":"integer","title":"Snapshots","default":0},"last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked At"},"monitors":{"items":{"$ref":"#/components/schemas/AutoMonitorOut"},"type":"array","title":"Monitors"}},"type":"object","required":["enabled","dataset_enabled","connection_enabled"],"title":"AutoMonitorsOut","description":"Monitores automáticos do dataset. `enabled` = conexão E dataset."},"BiFeed":{"type":"string","enum":["scores","issues","slo","finops","activity","datasets","chargeback"],"title":"BiFeed"},"CalendarDayOut":{"properties":{"date":{"type":"string","title":"Date"},"weekday":{"type":"integer","title":"Weekday"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"scans":{"type":"integer","title":"Scans","default":0},"failed_scans":{"type":"integer","title":"Failed Scans","default":0},"open_issues":{"type":"integer","title":"Open Issues","default":0},"new_issues":{"type":"integer","title":"New Issues","default":0},"level":{"type":"integer","title":"Level","default":0}},"type":"object","required":["date","weekday"],"title":"CalendarDayOut"},"CalendarSummaryOut":{"properties":{"days_with_score":{"type":"integer","title":"Days With Score","default":0},"avg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Score"},"failed_scans":{"type":"integer","title":"Failed Scans","default":0},"max_open_issues":{"type":"integer","title":"Max Open Issues","default":0},"weekday_avg_score":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array","title":"Weekday Avg Score"}},"type":"object","title":"CalendarSummaryOut"},"CatalogTreemapOut":{"properties":{"metric":{"type":"string","title":"Metric"},"metrics_available":{"$ref":"#/components/schemas/TreemapMetricsAvailableOut"},"total_datasets":{"type":"integer","title":"Total Datasets"},"root":{"$ref":"#/components/schemas/TreemapNodeOut"}},"type":"object","required":["metric","metrics_available","total_datasets","root"],"title":"CatalogTreemapOut"},"CdeOut":{"properties":{"id":{"type":"string","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"column_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column Name"},"regulation":{"type":"string","title":"Regulation"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"owner_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner User Id"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","dataset_id","dataset_name","regulation","created_at"],"title":"CdeOut"},"CdeRegulation":{"type":"string","enum":["bcbs239","solvency2","custom"],"title":"CdeRegulation","description":"Regulação de um elemento de dados crítico (cartão #392).\n\nO mapa regulação → dimensões vive em `domain/compliance/regulatory_dossier.py`.\nSem DORA nem IFRS 17: o pack DORA (#233) é sobre o DataVault como terceiro TIC\ne não define dimensões de qualidade; o resto cabe em `custom` + `reference`."},"ClassificationReviewRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"},"max_age_days":{"type":"integer","maximum":3650,"minimum":1,"title":"Max Age Days","default":30}},"additionalProperties":false,"type":"object","title":"ClassificationReviewRule"},"ColumnFormatsOut":{"properties":{"format_masks":{"items":{"$ref":"#/components/schemas/FormatMaskOut"},"type":"array","title":"Format Masks"},"mixed_formats":{"type":"boolean","title":"Mixed Formats","default":false}},"type":"object","title":"ColumnFormatsOut","description":"Máscaras de formato da amostra (`semantic_types.column_formats`, cartão #137)."},"ColumnOut":{"properties":{"name":{"type":"string","title":"Name"},"data_type":{"type":"string","title":"Data Type","default":"desconhecido"},"nullable":{"type":"boolean","title":"Nullable","default":true},"primary_key":{"type":"boolean","title":"Primary Key","default":false},"partition":{"type":"boolean","title":"Partition","default":false},"clustering":{"type":"boolean","title":"Clustering","default":false}},"type":"object","required":["name"],"title":"ColumnOut","description":"Coluna do dataset (a partir de `columns_json`)."},"ColumnProfileOut":{"properties":{"column_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column Name"},"metrics":{"additionalProperties":true,"type":"object","title":"Metrics"},"semantic":{"anyOf":[{"$ref":"#/components/schemas/SemanticTypeOut"},{"type":"null"}]},"formats":{"anyOf":[{"$ref":"#/components/schemas/ColumnFormatsOut"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","title":"ColumnProfileOut","description":"Último ProfileResult de uma coluna (`column_name=None` => nível tabela)."},"ColumnSensitivityOut":{"properties":{"column":{"type":"string","title":"Column"},"data_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Type"},"in_schema":{"type":"boolean","title":"In Schema","default":true},"level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"pii_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pii Type"},"pii_type_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pii Type Label"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Name"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"suggestion":{"anyOf":[{"$ref":"#/components/schemas/SensitivitySuggestionOut"},{"type":"null"}]}},"type":"object","required":["column"],"title":"ColumnSensitivityOut"},"ConfidentialOwnerRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"min_level":{"$ref":"#/components/schemas/SensitivityLevel","default":"confidential"}},"additionalProperties":false,"type":"object","title":"ConfidentialOwnerRule"},"ConformanceCheckCountOut":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"not_applicable":{"type":"integer","title":"Not Applicable"}},"type":"object","required":["code","label","passed","failed","not_applicable"],"title":"ConformanceCheckCountOut"},"ConformanceCheckOut":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"status":{"type":"string","enum":["passed","failed","not_applicable"],"title":"Status"},"applicable":{"type":"boolean","title":"Applicable"},"passed":{"type":"boolean","title":"Passed"},"severity":{"type":"string","title":"Severity"},"detail":{"type":"string","title":"Detail"},"link":{"type":"string","title":"Link"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["code","label","status","applicable","passed","severity","detail","link","endpoint"],"title":"ConformanceCheckOut"},"ConformanceGapOut":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"severity":{"type":"string","title":"Severity"},"failed":{"type":"integer","title":"Failed"},"datasets":{"items":{"type":"string"},"type":"array","title":"Datasets"},"action":{"type":"string","title":"Action"},"link":{"type":"string","title":"Link"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["code","label","severity","failed","datasets","action","link","endpoint"],"title":"ConformanceGapOut"},"ConnectionOut":{"properties":{"id":{"type":"string","title":"Id"},"workspace_id":{"type":"string","title":"Workspace Id"},"name":{"type":"string","title":"Name"},"connector_type":{"type":"string","title":"Connector Type"},"status":{"type":"string","title":"Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked At"},"scan_frequency":{"type":"string","title":"Scan Frequency","default":"manual"},"scan_hour":{"type":"integer","title":"Scan Hour","default":6},"scan_timezone":{"type":"string","title":"Scan Timezone","default":"UTC"},"scan_weekday":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scan Weekday"},"scan_day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scan Day Of Month"},"next_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Scan At"},"auto_monitors_enabled":{"type":"boolean","title":"Auto Monitors Enabled","default":true},"blackout_timezone":{"type":"string","title":"Blackout Timezone","default":"UTC"},"blackout_windows":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Blackout Windows"},"max_concurrent_queries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Concurrent Queries"},"max_sample_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Sample Rows"},"source_timezone":{"type":"string","title":"Source Timezone","default":"UTC"},"environment":{"type":"string","title":"Environment","default":"unknown"},"data_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Country","description":"País dos dados desta fonte (ISO 3166-1 alfa-2, cartão #513); null = o do workspace. Decide como se leem telefones sem indicativo e códigos postais."},"blackout_active":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Blackout Active"},"blackout_upcoming":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Blackout Upcoming"},"tls_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Mode"},"tls_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tls Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","workspace_id","name","connector_type","status","created_at"],"title":"ConnectionOut","description":"Conexão sem credenciais — `config`/`config_encrypted` nunca são expostos."},"ConnectorTypeOut":{"properties":{"type":{"type":"string","title":"Type"},"label":{"type":"string","title":"Label"},"group":{"type":"string","enum":["database","warehouse","files","business_apps","streaming","documents","collaboration"],"title":"Group"},"docs_anchor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Anchor"},"available":{"type":"boolean","title":"Available"},"missing_extra":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Missing Extra"},"stub":{"type":"boolean","title":"Stub","default":false},"unavailable_modes":{"additionalProperties":{"type":"string"},"type":"object","title":"Unavailable Modes","default":{}}},"type":"object","required":["type","label","group","available"],"title":"ConnectorTypeOut","description":"Um tipo do registo: metadados de catálogo e disponibilidade NESTA instalação.\n\nA Ajuda e o wizard leem daqui a lista de conectores (cartão #321) — nunca de\numa lista escrita à mão que diverge do ``CONNECTOR_REGISTRY``."},"ConsumerKindCountsOut":{"properties":{"user":{"type":"integer","title":"User"},"ai_system":{"type":"integer","title":"Ai System"},"dbt_exposure":{"type":"integer","title":"Dbt Exposure"},"external":{"type":"integer","title":"External"}},"type":"object","required":["user","ai_system","dbt_exposure","external"],"title":"ConsumerKindCountsOut"},"ConsumerUsageOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","enum":["agent","application","pipeline","notebook"],"title":"Kind"},"kind_label":{"type":"string","title":"Kind Label"},"framework":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"first_seen_at":{"type":"string","format":"date-time","title":"First Seen At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"consumptions_7d":{"type":"integer","title":"Consumptions 7D"},"consumptions_30d":{"type":"integer","title":"Consumptions 30D"},"datasets_30d":{"type":"integer","title":"Datasets 30D"},"decisions_7d":{"additionalProperties":{"type":"integer"},"type":"object","title":"Decisions 7D","description":"Consumos dos últimos 7 dias por decisão (trusted, caution, untrusted, unknown)."},"last_decision":{"anyOf":[{"type":"string","enum":["trusted","caution","untrusted","unknown"]},{"type":"null"}],"title":"Last Decision"},"last_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Purpose"},"last_consumed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Consumed At"}},"type":"object","required":["id","name","kind","kind_label","first_seen_at","last_seen_at","consumptions_7d","consumptions_30d","datasets_30d","decisions_7d"],"title":"ConsumerUsageOut","description":"Consumidor com os consumos a 7 e 30 dias e o último (decisão incluída)."},"ConsumptionBatchIn":{"properties":{"consumer":{"$ref":"#/components/schemas/DataConsumerIn"},"dataset_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Dataset Ids"},"purpose":{"type":"string","maxLength":20,"title":"Purpose","description":"agente | rag | treino | bi (ml = treino).","default":"agente"},"decision_seen":{"anyOf":[{"type":"string","enum":["trusted","caution","untrusted","unknown"]},{"type":"null"}],"title":"Decision Seen","description":"Decisão de confiança que o consumidor viu. Omitida: a da Trust API no momento do registo."},"trust_as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trust As Of","description":"`as_of` da decisão vista (com `decision_seen`)."}},"additionalProperties":false,"type":"object","required":["consumer","dataset_ids"],"title":"ConsumptionBatchIn","description":"Body de `POST /trust/consumptions` (cartão #166): só ids e rótulos — campos\ndesconhecidos (conteúdo, queries, parâmetros) são recusados com 422.","examples":[{"consumer":{"name":"faturas-copilot","kind":"agent","framework":"langchain","run_ref":"run-2026-10-08T10:15:00Z-7f3a"},"dataset_ids":["3f1c7a52-9d0e-4b1f-8a57-2c1e0b9d4f11"],"purpose":"agente","decision_seen":"caution"}]},"ConsumptionBatchOut":{"properties":{"consumer":{"$ref":"#/components/schemas/DataConsumerOut"},"recorded":{"type":"integer","title":"Recorded","description":"Consumos novos gravados neste pedido."},"replayed":{"type":"integer","title":"Replayed","description":"Consumos que já existiam para o mesmo run_ref."},"consumptions":{"items":{"$ref":"#/components/schemas/ConsumptionOut"},"type":"array","title":"Consumptions"}},"type":"object","required":["consumer","recorded","replayed","consumptions"],"title":"ConsumptionBatchOut"},"ConsumptionOut":{"properties":{"id":{"type":"string","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"purpose":{"type":"string","title":"Purpose"},"decision":{"type":"string","enum":["trusted","caution","untrusted","unknown"],"title":"Decision"},"trust_as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trust As Of"},"run_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Ref"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"replayed":{"type":"boolean","title":"Replayed","description":"Já existia (mesmo run_ref): nada foi gravado de novo."}},"type":"object","required":["id","dataset_id","purpose","decision","created_at","replayed"],"title":"ConsumptionOut"},"ContextColumnOut":{"properties":{"name":{"type":"string","title":"Name"},"data_type":{"type":"string","title":"Data Type"},"nullable":{"type":"boolean","title":"Nullable"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sensitivity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sensitivity"},"pii_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pii Type"}},"type":"object","required":["name","data_type","nullable","description","sensitivity","pii_type"],"title":"ContextColumnOut","description":"Coluna com a sua sensibilidade."},"ContextComplianceOut":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"problems":{"items":{"type":"string"},"type":"array","title":"Problems"},"problem_count":{"type":"integer","title":"Problem Count"}},"type":"object","required":["status","problems","problem_count"],"title":"ContextComplianceOut","description":"Conformidade com o contrato."},"ContextContractOut":{"properties":{"available":{"type":"boolean","title":"Available"},"has_active":{"type":"boolean","title":"Has Active"},"observed_only":{"type":"boolean","title":"Observed Only"},"active_version":{"anyOf":[{"$ref":"#/components/schemas/ContextContractVersionOut"},{"type":"null"}]},"compliance":{"$ref":"#/components/schemas/ContextComplianceOut"}},"type":"object","required":["available","has_active","observed_only","active_version","compliance"],"title":"ContextContractOut","description":"Contrato de dados do dataset."},"ContextContractVersionOut":{"properties":{"number":{"type":"integer","title":"Number"},"status":{"type":"string","title":"Status"},"activated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activated At"}},"type":"object","required":["number","status","activated_at"],"title":"ContextContractVersionOut","description":"Versão ativa do contrato."},"ContextExposureOut":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"maturity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maturity"}},"type":"object","required":["name","type","maturity"],"title":"ContextExposureOut","description":"Consumidor a jusante, só por nome."},"ContextFailedRuleOut":{"properties":{"rule_type":{"type":"string","title":"Rule Type"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"severity":{"type":"string","title":"Severity"}},"type":"object","required":["rule_type","column","severity"],"title":"ContextFailedRuleOut","description":"Regra que falhou no último scan."},"ContextFreshnessOut":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"last_modified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Modified At"},"last_profiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Profiled At"}},"type":"object","required":["available"],"title":"ContextFreshnessOut","description":"Frescura. Sem metadados nem perfil: `available` false e `reason`."},"ContextIdentityOut":{"properties":{"available":{"type":"boolean","title":"Available"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema"},"table":{"type":"string","title":"Table"},"connector_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connector Type"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"domain":{"anyOf":[{"$ref":"#/components/schemas/GraphDomainOut"},{"type":"null"}]},"other_domains":{"items":{"type":"string"},"type":"array","title":"Other Domains"},"owners":{"items":{"type":"string"},"type":"array","title":"Owners","description":"Nomes dos owners (nunca o email)."}},"type":"object","required":["available","id","name","schema","table","connector_type","layer","description","row_count","domain","other_domains","owners"],"title":"ContextIdentityOut","description":"Identidade do dataset."},"ContextKnowledgeEntryOut":{"properties":{"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"body":{"type":"string","title":"Body"},"recorded_at":{"type":"string","title":"Recorded At"},"ai_generated":{"type":"boolean","title":"Ai Generated"}},"type":"object","required":["kind","title","body","recorded_at","ai_generated"],"title":"ContextKnowledgeEntryOut","description":"Entrada da base de conhecimento."},"ContextKnowledgeOut":{"properties":{"available":{"type":"boolean","title":"Available"},"entries":{"items":{"$ref":"#/components/schemas/ContextKnowledgeEntryOut"},"type":"array","title":"Entries"},"readme":{"anyOf":[{"$ref":"#/components/schemas/ContextReadmeOut"},{"type":"null"}]}},"type":"object","required":["available","entries","readme"],"title":"ContextKnowledgeOut","description":"Base de conhecimento e README."},"ContextLineageNodeOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"restricted":{"type":"boolean","title":"Restricted","description":"Só presente (true) num dataset a que quem pede não tem acesso.","default":false}},"type":"object","required":["dataset_id","name","kind"],"title":"ContextLineageNodeOut","description":"Vizinho direto na linhagem."},"ContextLineageOut":{"properties":{"available":{"type":"boolean","title":"Available"},"upstream":{"items":{"$ref":"#/components/schemas/ContextLineageNodeOut"},"type":"array","title":"Upstream"},"downstream":{"items":{"$ref":"#/components/schemas/ContextLineageNodeOut"},"type":"array","title":"Downstream"},"upstream_count":{"type":"integer","title":"Upstream Count"},"downstream_count":{"type":"integer","title":"Downstream Count"},"external_upstream_count":{"type":"integer","title":"External Upstream Count"},"external_downstream_count":{"type":"integer","title":"External Downstream Count"},"has_column_lineage":{"type":"boolean","title":"Has Column Lineage"},"exposures":{"items":{"$ref":"#/components/schemas/ContextExposureOut"},"type":"array","title":"Exposures"}},"type":"object","required":["available","upstream","downstream","upstream_count","downstream_count","external_upstream_count","external_downstream_count","has_column_lineage","exposures"],"title":"ContextLineageOut","description":"Linhagem resumida."},"ContextOpenIssuesOut":{"properties":{"total":{"type":"integer","title":"Total"},"by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Severity"},"by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Type"}},"type":"object","required":["total","by_severity","by_type"],"title":"ContextOpenIssuesOut","description":"Issues abertos por severidade e por tipo."},"ContextQualityOut":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"dimensions":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"number"}]},"type":"object","title":"Dimensions"},"scored_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scored At"},"trend":{"items":{"$ref":"#/components/schemas/ContextScorePointOut"},"type":"array","title":"Trend"},"open_issues":{"anyOf":[{"$ref":"#/components/schemas/ContextOpenIssuesOut"},{"type":"null"}]},"verdict":{"type":"string","title":"Verdict"},"failed_rules":{"items":{"$ref":"#/components/schemas/ContextFailedRuleOut"},"type":"array","title":"Failed Rules"},"policy_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Status"}},"type":"object","required":["available","verdict"],"title":"ContextQualityOut","description":"Qualidade e veredicto. Sem scan: `available` false, `reason` e `verdict`."},"ContextReadinessOut":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"overall":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"use_cases":{"items":{"$ref":"#/components/schemas/ContextUseCaseOut"},"type":"array","title":"Use Cases"},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers"},"pii_columns":{"items":{"type":"string"},"type":"array","title":"Pii Columns"}},"type":"object","required":["available"],"title":"ContextReadinessOut","description":"Prontidão para IA. Sem scan: `available` false e `reason`."},"ContextReadmeOut":{"properties":{"published_version":{"type":"integer","title":"Published Version"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"ai_generated":{"type":"boolean","title":"Ai Generated"},"excerpt":{"type":"string","title":"Excerpt"}},"type":"object","required":["published_version","published_at","ai_generated","excerpt"],"title":"ContextReadmeOut","description":"README publicado (excerto)."},"ContextSchemaOut":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"column_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Column Count"},"pii_columns":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pii Columns"},"columns":{"items":{"$ref":"#/components/schemas/ContextColumnOut"},"type":"array","title":"Columns"}},"type":"object","required":["available"],"title":"ContextSchemaOut","description":"Schema e sensibilidade. Sem schema recolhido: `available` false e `reason`."},"ContextScorePointOut":{"properties":{"score":{"type":"number","title":"Score"},"at":{"type":"string","title":"At"}},"type":"object","required":["score","at"],"title":"ContextScorePointOut","description":"Ponto da série de scores."},"ContextTrustComponentOut":{"properties":{"key":{"type":"string","title":"Key"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"evidence":{"type":"string","title":"Evidence"}},"type":"object","required":["key","value","evidence"],"title":"ContextTrustComponentOut","description":"Componente do trust score."},"ContextTrustOut":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score"},"grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grade"},"blocked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Blocked"},"components":{"items":{"$ref":"#/components/schemas/ContextTrustComponentOut"},"type":"array","title":"Components"},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers"}},"type":"object","required":["available"],"title":"ContextTrustOut","description":"Trust score. Sem score: `available` false e `reason`."},"ContextUsageOut":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Class","description":"hot, active, cold ou dead."},"queries_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queries 30D"},"last_query_day":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Query Day"}},"type":"object","required":["available"],"title":"ContextUsageOut","description":"Uso pelas queries da fonte. Sem query logs: `available` false e `reason`."},"ContextUseCaseOut":{"properties":{"use_case":{"type":"string","title":"Use Case"},"label":{"type":"string","title":"Label"},"score":{"type":"number","title":"Score"},"verdict":{"type":"string","title":"Verdict"},"blocker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocker"}},"type":"object","required":["use_case","label","score","verdict","blocker"],"title":"ContextUseCaseOut","description":"Prontidão para um caso de uso de IA."},"ContractActiveVersionOut":{"properties":{"number":{"type":"integer","title":"Number"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"accepted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted By"}},"type":"object","required":["number","activated_at","accepted_by"],"title":"ContractActiveVersionOut"},"ContractChangeOut":{"properties":{"section":{"type":"string","title":"Section"},"kind":{"type":"string","enum":["column","table_quality","sla"],"title":"Kind"},"title":{"type":"string","title":"Title"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"change":{"type":"string","enum":["added","changed","removed"],"title":"Change"},"fields":{"items":{"$ref":"#/components/schemas/ContractFieldChangeOut"},"type":"array","title":"Fields"}},"type":"object","required":["section","kind","title","column","change","fields"],"title":"ContractChangeOut","description":"Uma secção acrescentada, alterada ou retirada entre duas versões."},"ContractFieldChangeOut":{"properties":{"field":{"type":"string","title":"Field"},"before":{"title":"Before"},"after":{"title":"After"}},"type":"object","required":["field","before","after"],"title":"ContractFieldChangeOut","description":"Um campo que mudou dentro de uma secção."},"ContractProposalDatasetOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id","name"],"title":"ContractProposalDatasetOut"},"ContractProposalOut":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status","description":"open | accepted | withdrawn | expired"},"producer_label":{"type":"string","title":"Producer Label"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"withdrawn_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Withdrawn At"},"last_producer_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Producer Activity At"},"dataset":{"$ref":"#/components/schemas/ContractProposalDatasetOut"},"version":{"$ref":"#/components/schemas/ContractVersionSummaryOut"},"versions":{"items":{"type":"integer"},"type":"array","title":"Versions"},"active_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version"},"baseline_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Baseline Version"},"sections":{"items":{"$ref":"#/components/schemas/ContractProposalSectionOut"},"type":"array","title":"Sections"},"removed_sections":{"items":{"$ref":"#/components/schemas/ContractChangeOut"},"type":"array","title":"Removed Sections"},"pending_sections":{"type":"integer","title":"Pending Sections"},"can_accept":{"type":"boolean","title":"Can Accept"},"yaml":{"type":"string","title":"Yaml"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Link de revisão do produtor: só para administradores e com a proposta aberta."}},"type":"object","required":["id","status","producer_label","message","created_at","expires_at","accepted_at","withdrawn_at","last_producer_activity_at","dataset","version","versions","active_version","baseline_version","sections","removed_sections","pending_sections","can_accept","yaml","url"],"title":"ContractProposalOut","description":"Proposta de contrato com secções, fios e diff face ao contrato ativo."},"ContractProposalSectionOut":{"properties":{"key":{"type":"string","title":"Key","description":"`schema.<coluna>`, `quality` ou `sla`."},"kind":{"type":"string","enum":["column","table_quality","sla"],"title":"Kind"},"title":{"type":"string","title":"Title"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"content":{"title":"Content","description":"O excerto ODCS da secção (objeto da coluna ou lista)."},"hash":{"type":"string","title":"Hash","description":"SHA-256 do conteúdo da secção."},"state":{"type":"string","enum":["pending","accepted","changes_requested"],"title":"State"},"change":{"type":"string","enum":["added","changed","removed","unchanged"],"title":"Change"},"change_fields":{"items":{"$ref":"#/components/schemas/ContractFieldChangeOut"},"type":"array","title":"Change Fields"},"entries":{"items":{"$ref":"#/components/schemas/ContractReviewEntryOut"},"type":"array","title":"Entries"}},"type":"object","required":["key","kind","title","column","content","hash","state","change","change_fields","entries"],"title":"ContractProposalSectionOut","description":"Secção da versão em revisão, com o estado, a mudança e o fio."},"ContractProposalSummaryOut":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status","description":"open | accepted | withdrawn | expired"},"producer_label":{"type":"string","title":"Producer Label"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"withdrawn_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Withdrawn At"},"last_producer_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Producer Activity At"}},"type":"object","required":["id","status","producer_label","created_at","expires_at","accepted_at","withdrawn_at","last_producer_activity_at"],"title":"ContractProposalSummaryOut","description":"Proposta de contrato na lista do dataset: estado e datas, sem secções nem link."},"ContractReviewEntryOut":{"properties":{"id":{"type":"string","title":"Id"},"author_kind":{"type":"string","title":"Author Kind","description":"producer | member"},"author_label":{"type":"string","title":"Author Label"},"decision":{"type":"string","title":"Decision","description":"comment | accept | request_changes"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version","description":"Número da versão em que foi escrito."},"applies_to_current":{"type":"boolean","title":"Applies To Current","description":"Se foi escrito sobre o conteúdo atual da secção."}},"type":"object","required":["id","author_kind","author_label","decision","body","created_at","version","applies_to_current"],"title":"ContractReviewEntryOut","description":"Comentário ou decisão num fio de secção."},"ContractSectionOut":{"properties":{"key":{"type":"string","title":"Key","description":"`schema.<coluna>`, `quality` ou `sla`."},"kind":{"type":"string","enum":["column","table_quality","sla"],"title":"Kind"},"title":{"type":"string","title":"Title"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"content":{"title":"Content","description":"O excerto ODCS da secção (objeto da coluna ou lista)."},"hash":{"type":"string","title":"Hash","description":"SHA-256 do conteúdo da secção."}},"type":"object","required":["key","kind","title","column","content","hash"],"title":"ContractSectionOut","description":"Secção revisível do contrato: uma por coluna, a qualidade da tabela e os SLA."},"ContractStatusFindingOut":{"properties":{"code":{"type":"string","title":"Code"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"rename_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rename To"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before"},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"},"rule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"},"check":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"dataset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset"}},"additionalProperties":true,"type":"object","required":["code"],"title":"ContractStatusFindingOut","description":"Problema do contrato em forma estruturada, por `code`: `field_removed`,\n`type_diverged`, `upstream_changed`, `active_column_missing`,\n`active_type_diverged`, `active_required_nullable`, `active_column_extra`,\n`active_check_unenforced`. Cada código traz só as chaves que lhe dizem respeito."},"ContractUpstreamChangeOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"issue_id":{"type":"string","title":"Issue Id"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"}},"type":"object","required":["dataset_id","name","issue_id","summary"],"title":"ContractUpstreamChangeOut","description":"Mudança de schema que quebra num dataset diretamente a montante."},"ContractVersionDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"number":{"type":"integer","title":"Number"},"status":{"type":"string","title":"Status","description":"proposed | active | superseded"},"origin":{"type":"string","title":"Origin","description":"observed (gerada do observado) | revision (editada pela equipa)"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"proposal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"accepted_by_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted By Label","description":"Nome de quem aceitou, do lado do produtor."},"content":{"additionalProperties":true,"type":"object","title":"Content","description":"O documento ODCS desta versão."},"yaml":{"type":"string","title":"Yaml"},"sections":{"items":{"$ref":"#/components/schemas/ContractSectionOut"},"type":"array","title":"Sections"}},"type":"object","required":["id","number","status","origin","note","proposal_id","created_at","activated_at","accepted_by_label","content","yaml","sections"],"title":"ContractVersionDetailOut","description":"A versão com o documento ODCS, o YAML e as secções."},"ContractVersionDiffOut":{"properties":{"from":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From","description":"Versão de partida; nula = nenhuma."},"to":{"type":"integer","title":"To"},"changes":{"items":{"$ref":"#/components/schemas/ContractChangeOut"},"type":"array","title":"Changes"}},"type":"object","required":["from","to","changes"],"title":"ContractVersionDiffOut","description":"Diff secção a secção entre duas versões do contrato."},"ContractVersionSummaryOut":{"properties":{"id":{"type":"string","title":"Id"},"number":{"type":"integer","title":"Number"},"status":{"type":"string","title":"Status","description":"proposed | active | superseded"},"origin":{"type":"string","title":"Origin","description":"observed (gerada do observado) | revision (editada pela equipa)"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"proposal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"accepted_by_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accepted By Label","description":"Nome de quem aceitou, do lado do produtor."}},"type":"object","required":["id","number","status","origin","note","proposal_id","created_at","activated_at","accepted_by_label"],"title":"ContractVersionSummaryOut","description":"Uma versão do contrato ODCS do dataset, sem o documento."},"CriticalAlertItem":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"},"severity":{"type":"string","title":"Severity"},"impact_eur_month":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Impact Eur Month"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","title","severity","created_at"],"title":"CriticalAlertItem"},"DashboardDimensionsOut":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"datasets_total":{"type":"integer","title":"Datasets Total"},"datasets_scored":{"type":"integer","title":"Datasets Scored"},"dimensions":{"items":{"$ref":"#/components/schemas/WorkspaceDimensionOut"},"type":"array","title":"Dimensions"},"other_dimensions":{"items":{"$ref":"#/components/schemas/OtherDimensionOut"},"type":"array","title":"Other Dimensions"},"domains":{"items":{"$ref":"#/components/schemas/DomainDimensionsOut"},"type":"array","title":"Domains"},"history_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"History Started At"}},"type":"object","required":["generated_at","datasets_total","datasets_scored","dimensions","other_dimensions","domains"],"title":"DashboardDimensionsOut"},"DataConsumerIn":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name","description":"Nome do consumidor (ex.: `faturas-copilot`). Com o `kind`, identifica-o no workspace. Só letras (de qualquer língua), algarismos, espaços e `_ . : / -`: o nome aparece nas mensagens de Slack e Teams, por isso marcação (`<`, `>`, `|`, `[`, `]`, `(`, `)`, `*`, `~`, `@`, `&`, a crase) dá 422."},"kind":{"type":"string","enum":["agent","application","pipeline","notebook"],"title":"Kind"},"framework":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Framework","description":"Framework do agente (ex.: `langchain`)."},"owner":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Owner","description":"Equipa ou pessoa responsável (rótulo livre)."},"run_ref":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Run Ref","description":"Referência do run/pedido do agente. Com ela, o registo é idempotente por (consumidor, dataset, run_ref): repetir não cria consumos novos."}},"additionalProperties":false,"type":"object","required":["name","kind"],"title":"DataConsumerIn","description":"Quem consome: o nome identifica-o no workspace, com o tipo (cartão #166)."},"DataConsumerOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","enum":["agent","application","pipeline","notebook"],"title":"Kind"},"kind_label":{"type":"string","title":"Kind Label"},"framework":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"first_seen_at":{"type":"string","format":"date-time","title":"First Seen At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"}},"type":"object","required":["id","name","kind","kind_label","first_seen_at","last_seen_at"],"title":"DataConsumerOut"},"DataCountryOut":{"properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"O do dataset (ISO 3166-1 alfa-2); null = herdado."},"effective":{"type":"string","title":"Effective","description":"O que os scans usam: dataset → conexão → workspace."},"source":{"type":"string","enum":["dataset","connection","workspace"],"title":"Source"}},"type":"object","required":["country","effective","source"],"title":"DataCountryOut","description":"País dos dados de um dataset (cartão #513): o próprio, o efetivo e de onde vem."},"DataDiffChecksumOut":{"properties":{"method":{"type":"string","enum":["pushdown","sample"],"title":"Method"},"left":{"type":"integer","title":"Left"},"right":{"type":"integer","title":"Right"},"match":{"type":"boolean","title":"Match"}},"type":"object","required":["method","left","right","match"],"title":"DataDiffChecksumOut","description":"Checksum de uma coluna nos dois lados."},"DataDiffColumnOut":{"properties":{"column":{"type":"string","title":"Column"},"mismatches":{"type":"integer","title":"Mismatches"},"mismatch_pct":{"type":"number","title":"Mismatch Pct"},"checksum":{"$ref":"#/components/schemas/DataDiffChecksumOut"},"diverged":{"type":"boolean","title":"Diverged"},"diverged_outside_sample":{"type":"boolean","title":"Diverged Outside Sample"}},"type":"object","required":["column","mismatches","mismatch_pct","checksum","diverged","diverged_outside_sample"],"title":"DataDiffColumnOut","description":"Divergência de uma coluna comparada."},"DataDiffCountsOut":{"properties":{"left":{"type":"integer","title":"Left"},"right":{"type":"integer","title":"Right"},"delta":{"type":"integer","title":"Delta"},"delta_pct":{"type":"number","title":"Delta Pct"}},"type":"object","required":["left","right","delta","delta_pct"],"title":"DataDiffCountsOut","description":"Contagens de linhas da base e do candidato."},"DataDiffExamplesOut":{"properties":{"only_left":{"items":{"items":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"}]},"type":"array"},"type":"array","title":"Only Left"},"only_right":{"items":{"items":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"}]},"type":"array"},"type":"array","title":"Only Right"},"changed":{"items":{"items":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"}]},"type":"array"},"type":"array","title":"Changed"}},"type":"object","required":["only_left","only_right","changed"],"title":"DataDiffExamplesOut","description":"Exemplos de chaves (só a chave, nunca valores de outras colunas)."},"DataDiffGuardsOut":{"properties":{"max_rows":{"type":"integer","title":"Max Rows"},"max_columns":{"type":"integer","title":"Max Columns"}},"type":"object","required":["max_rows","max_columns"],"title":"DataDiffGuardsOut","description":"Limites de custo aplicados."},"DataDiffIn":{"properties":{"key_columns":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":8,"minItems":1},{"type":"null"}],"title":"Key Columns","description":"Chave de junção. Sem ela, a chave primária declarada na fonte da base, se o candidato tiver as mesmas colunas (cartão #347); `key_source` no relatório diz qual."},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":200},{"type":"null"}],"title":"Columns"},"warn_pct":{"type":"number","maximum":100,"minimum":0,"title":"Warn Pct","default":1},"fail_pct":{"type":"number","maximum":100,"minimum":0,"title":"Fail Pct","default":5},"column_threshold_pct":{"type":"number","maximum":100,"minimum":0,"title":"Column Threshold Pct","default":0},"max_rows":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Max Rows"},"checksums":{"type":"boolean","title":"Checksums","default":true}},"type":"object","title":"DataDiffIn","description":"Body de `POST /datasets/{id}/diff/{other}` (RECON v2). Percentagens em 0–100."},"DataDiffOut":{"properties":{"verdict":{"type":"string","enum":["pass","warn","fail"],"title":"Verdict"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"},"summary":{"type":"string","title":"Summary"},"key_columns":{"items":{"type":"string"},"type":"array","title":"Key Columns"},"sampling":{"$ref":"#/components/schemas/DataDiffSamplingOut"},"counts":{"$ref":"#/components/schemas/DataDiffCountsOut"},"rows":{"$ref":"#/components/schemas/DataDiffRowsOut"},"columns":{"items":{"$ref":"#/components/schemas/DataDiffColumnOut"},"type":"array","title":"Columns"},"diverged_columns":{"items":{"type":"string"},"type":"array","title":"Diverged Columns"},"schema":{"$ref":"#/components/schemas/DataDiffSchemaOut"},"examples":{"$ref":"#/components/schemas/DataDiffExamplesOut"},"thresholds":{"$ref":"#/components/schemas/DataDiffThresholdsOut"},"left":{"$ref":"#/components/schemas/DataDiffSideOut"},"right":{"$ref":"#/components/schemas/DataDiffSideOut"},"columns_skipped":{"items":{"type":"string"},"type":"array","title":"Columns Skipped"},"key_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Type"},"key_source":{"type":"string","enum":["request","primary_key"],"title":"Key Source"},"guards":{"$ref":"#/components/schemas/DataDiffGuardsOut"}},"type":"object","required":["verdict","reasons","summary","key_columns","sampling","counts","rows","columns","diverged_columns","schema","examples","thresholds","left","right","columns_skipped","key_type","key_source","guards"],"title":"DataDiffOut","description":"Relatório do data-diff entre a base e o candidato."},"DataDiffRowsOut":{"properties":{"only_left":{"type":"integer","title":"Only Left"},"only_right":{"type":"integer","title":"Only Right"},"matched":{"type":"integer","title":"Matched"},"changed":{"type":"integer","title":"Changed"},"only_left_pct":{"type":"number","title":"Only Left Pct"},"only_right_pct":{"type":"number","title":"Only Right Pct"},"changed_pct":{"type":"number","title":"Changed Pct"},"rows_changed_pct":{"type":"number","title":"Rows Changed Pct"},"duplicate_keys_left":{"type":"integer","title":"Duplicate Keys Left"},"duplicate_keys_right":{"type":"integer","title":"Duplicate Keys Right"},"null_keys_left":{"type":"integer","title":"Null Keys Left"},"null_keys_right":{"type":"integer","title":"Null Keys Right"}},"type":"object","required":["only_left","only_right","matched","changed","only_left_pct","only_right_pct","changed_pct","rows_changed_pct","duplicate_keys_left","duplicate_keys_right","null_keys_left","null_keys_right"],"title":"DataDiffRowsOut","description":"Linhas só de um lado, alteradas e chaves duplicadas ou nulas."},"DataDiffRowsReadOut":{"properties":{"left":{"type":"integer","title":"Left"},"right":{"type":"integer","title":"Right"}},"type":"object","required":["left","right"],"title":"DataDiffRowsReadOut","description":"Linhas lidas de cada lado."},"DataDiffSamplingOut":{"properties":{"method":{"type":"string","enum":["exact","sample_modulus","key_range"],"title":"Method"},"modulus":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Modulus"},"estimated":{"type":"boolean","title":"Estimated"},"compared_rows":{"type":"integer","title":"Compared Rows"},"window_upper_key":{"anyOf":[{"items":{"anyOf":[{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Window Upper Key"},"rows_read":{"anyOf":[{"$ref":"#/components/schemas/DataDiffRowsReadOut"},{"type":"null"}],"description":"Ausente com method=exact."}},"type":"object","required":["method","modulus","estimated","compared_rows","window_upper_key"],"title":"DataDiffSamplingOut","description":"Amostragem usada para caber nos limites de linhas."},"DataDiffSchemaOut":{"properties":{"only_left":{"items":{"type":"string"},"type":"array","title":"Only Left"},"only_right":{"items":{"type":"string"},"type":"array","title":"Only Right"}},"type":"object","required":["only_left","only_right"],"title":"DataDiffSchemaOut","description":"Colunas que só existem num dos lados."},"DataDiffSideOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["dataset_id","name"],"title":"DataDiffSideOut","description":"Um dos datasets comparados."},"DataDiffThresholdsOut":{"properties":{"warn_pct":{"type":"number","title":"Warn Pct"},"fail_pct":{"type":"number","title":"Fail Pct"},"column_threshold_pct":{"type":"number","title":"Column Threshold Pct"}},"type":"object","required":["warn_pct","fail_pct","column_threshold_pct"],"title":"DataDiffThresholdsOut","description":"Limiares aplicados, em percentagem."},"DataPolicy":{"properties":{"pii_gold_requires_mask":{"$ref":"#/components/schemas/PiiGoldRule"},"confidential_requires_owner":{"$ref":"#/components/schemas/ConfidentialOwnerRule"},"export_blocked_with_pii":{"$ref":"#/components/schemas/ExportPiiRule"},"require_owner":{"$ref":"#/components/schemas/RequireOwnerRule"},"require_active_contract":{"$ref":"#/components/schemas/RequireActiveContractRule"},"require_readme":{"$ref":"#/components/schemas/RequireReadmeRule"},"require_freshness_rule":{"$ref":"#/components/schemas/RequireFreshnessRule"},"require_classification_review":{"$ref":"#/components/schemas/ClassificationReviewRule"},"min_score":{"$ref":"#/components/schemas/MinScoreRule"},"min_ai_readiness":{"$ref":"#/components/schemas/MinAiReadinessRule"},"no_real_pii_outside_prod":{"$ref":"#/components/schemas/RealPiiOutsideProdRule"},"allow_domain_relax":{"type":"boolean","title":"Allow Domain Relax","default":false}},"additionalProperties":false,"type":"object","title":"DataPolicy","description":"O JSON da política. Regras ausentes = desligadas (valores por omissão).\n\nOs campos seguem a ordem de `RULE_KEYS` (o export GitOps é byte-a-byte\nestável); regras novas entram no fim."},"DataPolicyRuleStatusOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"enabled":{"type":"boolean","title":"Enabled"},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity"},"layers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Layers","description":"Camadas medallion; nulo = todas."},"help":{"type":"string","title":"Help"},"params_schema":{"additionalProperties":true,"type":"object","title":"Params Schema","description":"JSON Schema dos parâmetros da regra."},"source":{"type":"string","title":"Source","description":"Quem impôs a regra: `workspace` ou `domain:<nome>`."},"sources":{"additionalProperties":{"type":"string"},"type":"object","title":"Sources","description":"Origem de cada campo da regra."}},"type":"object","required":["key","label","enabled","severity","layers","help","params_schema","source","sources"],"title":"DataPolicyRuleStatusOut","description":"Uma regra da política, com o rótulo, a ajuda e a origem de cada campo."},"DataPolicyStatusOut":{"properties":{"policy":{"$ref":"#/components/schemas/DataPolicy"},"rules":{"items":{"$ref":"#/components/schemas/DataPolicyRuleStatusOut"},"type":"array","title":"Rules"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"default_mask_patterns":{"items":{"type":"string"},"type":"array","title":"Default Mask Patterns"}},"type":"object","required":["policy","rules","domains","default_mask_patterns"],"title":"DataPolicyStatusOut","description":"A política (do workspace ou a efetiva de um dataset) e o catálogo de regras."},"DatasetAiReadinessOut":{"properties":{"overall":{"type":"number","title":"Overall"},"verdict":{"type":"string","enum":["pronto","com_reservas","nao_pronto","sem_dados"],"title":"Verdict"},"components":{"$ref":"#/components/schemas/AiReadinessComponentsOut"},"dimensions":{"$ref":"#/components/schemas/AiReadinessDimensionsOut"},"label_quality":{"anyOf":[{"$ref":"#/components/schemas/AiReadinessLabelQualityOut"},{"type":"null"}]},"weights":{"additionalProperties":{"type":"number"},"type":"object","title":"Weights"},"pii_columns":{"items":{"$ref":"#/components/schemas/AiReadinessPiiColumnOut"},"type":"array","title":"Pii Columns"},"quasi_identifiers":{"items":{"$ref":"#/components/schemas/AiReadinessQuasiIdentifierOut"},"type":"array","title":"Quasi Identifiers"},"recommendations":{"items":{"type":"string"},"type":"array","title":"Recommendations"},"use_cases":{"items":{"$ref":"#/components/schemas/AiReadinessUseCaseOut"},"type":"array","title":"Use Cases"}},"type":"object","required":["overall","verdict","components","dimensions","label_quality","weights","pii_columns","quasi_identifiers","recommendations","use_cases"],"title":"DatasetAiReadinessOut","description":"Prontidão do dataset para IA: score global, componentes, PII provável,\nquase-identificadores, recomendações e prontidão por caso de uso."},"DatasetConformanceOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"conformance_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Conformance Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"},"checks":{"items":{"$ref":"#/components/schemas/ConformanceCheckOut"},"type":"array","title":"Checks"}},"type":"object","required":["dataset_id","dataset_name","met","applicable","checks"],"title":"DatasetConformanceOut"},"DatasetConsumersOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"consumers":{"items":{"$ref":"#/components/schemas/ConsumerUsageOut"},"type":"array","title":"Consumers"}},"type":"object","required":["dataset_id","consumers"],"title":"DatasetConsumersOut"},"DatasetContextOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"generated_at":{"type":"string","title":"Generated At"},"sections":{"items":{"type":"string"},"type":"array","title":"Sections"},"identity":{"anyOf":[{"$ref":"#/components/schemas/ContextIdentityOut"},{"type":"null"}]},"schema":{"anyOf":[{"$ref":"#/components/schemas/ContextSchemaOut"},{"type":"null"}]},"quality":{"anyOf":[{"$ref":"#/components/schemas/ContextQualityOut"},{"type":"null"}]},"contract":{"anyOf":[{"$ref":"#/components/schemas/ContextContractOut"},{"type":"null"}]},"lineage":{"anyOf":[{"$ref":"#/components/schemas/ContextLineageOut"},{"type":"null"}]},"readiness":{"anyOf":[{"$ref":"#/components/schemas/ContextReadinessOut"},{"type":"null"}]},"trust":{"anyOf":[{"$ref":"#/components/schemas/ContextTrustOut"},{"type":"null"}]},"knowledge":{"anyOf":[{"$ref":"#/components/schemas/ContextKnowledgeOut"},{"type":"null"}]},"usage":{"anyOf":[{"$ref":"#/components/schemas/ContextUsageOut"},{"type":"null"}]},"freshness":{"anyOf":[{"$ref":"#/components/schemas/ContextFreshnessOut"},{"type":"null"}]}},"type":"object","required":["dataset_id","name","generated_at","sections"],"title":"DatasetContextOut","description":"Contexto unificado do dataset. Cada secção só aparece quando pedida em `sections`."},"DatasetContractStatusOut":{"properties":{"status":{"type":"string","enum":["ok","warn","fail"],"title":"Status"},"problems":{"items":{"type":"string"},"type":"array","title":"Problems"},"findings":{"items":{"$ref":"#/components/schemas/ContractStatusFindingOut"},"type":"array","title":"Findings"},"issue_ids":{"items":{"type":"string"},"type":"array","title":"Issue Ids"},"upstream_changes":{"items":{"$ref":"#/components/schemas/ContractUpstreamChangeOut"},"type":"array","title":"Upstream Changes"},"active_version":{"anyOf":[{"$ref":"#/components/schemas/ContractActiveVersionOut"},{"type":"null"}]}},"type":"object","required":["status","problems","findings","issue_ids","upstream_changes","active_version"],"title":"DatasetContractStatusOut","description":"Estado do contrato ODCS: mudanças de schema por resolver e, com uma versão\naceite pelo produtor (`active_version`), a conformidade com ela."},"DatasetDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"connection_id":{"type":"string","title":"Connection Id"},"schema_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Name"},"table_name":{"type":"string","title":"Table Name"},"name":{"type":"string","title":"Name"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"last_profiled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Profiled At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"auto_monitors_enabled":{"type":"boolean","title":"Auto Monitors Enabled","default":true},"incremental_profiling":{"type":"boolean","title":"Incremental Profiling","default":false},"kind":{"type":"string","enum":["table","view","materialized_view","external","unknown"],"title":"Kind","description":"Tipo do objeto na fonte (cartão #347). `view` e `external` perfilam em `basic` sobre as primeiras linhas, salvo profundidade própria `standard` ou `deep` do dataset.","default":"table"},"cost_guarded":{"type":"boolean","title":"Cost Guarded","description":"Os scans perfilam este dataset em `basic` sobre as primeiras linhas e sem contar valores distintos: `kind` é `view` ou `external` e o dataset não tem profundidade própria `standard` ou `deep` (cartão #347).","default":false},"latest_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latest Score"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"column_descriptions":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Column Descriptions"},"docs_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Source"},"usage":{"anyOf":[{"$ref":"#/components/schemas/DatasetUsageOut"},{"type":"null"}]},"readme_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Readme Published At"},"trust":{"anyOf":[{"$ref":"#/components/schemas/TrustOut"},{"type":"null"}]},"data_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Country","description":"País dos dados próprio do dataset (ISO 3166-1 alfa-2, cartão #513); null = o da conexão ou, sem ele, o do workspace (o efetivo vem em `country` no detalhe)."},"suggestions_status":{"anyOf":[{"type":"string","enum":["pending","ready","failed","limited"]},{"type":"null"}],"title":"Suggestions Status","description":"Sugestões IA do último scan, geradas depois dele: `pending` (a gerar), `ready`, `failed` (ficam as heurísticas) ou `limited` (acima do teto de datasets com IA por scan — ficam as heurísticas). Null: nada a gerar (IA desligada ou sugestões IA reutilizadas do scan anterior)."},"columns":{"items":{"$ref":"#/components/schemas/ColumnOut"},"type":"array","title":"Columns"},"profile":{"items":{"$ref":"#/components/schemas/ColumnProfileOut"},"type":"array","title":"Profile"},"score_history":{"items":{"$ref":"#/components/schemas/ScorePointOut"},"type":"array","title":"Score History"},"open_issues":{"items":{"$ref":"#/components/schemas/IssueOut"},"type":"array","title":"Open Issues"},"suggestions":{"items":{"$ref":"#/components/schemas/SuggestionOut"},"type":"array","title":"Suggestions"},"auto_monitors":{"anyOf":[{"$ref":"#/components/schemas/AutoMonitorsOut"},{"type":"null"}]},"incremental_profiling_status":{"anyOf":[{"$ref":"#/components/schemas/IncrementalProfilingOut"},{"type":"null"}]},"freshness":{"anyOf":[{"$ref":"#/components/schemas/FreshnessOut"},{"type":"null"}]},"country":{"anyOf":[{"$ref":"#/components/schemas/DataCountryOut"},{"type":"null"}]},"connector_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connector Type"},"access_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Role"}},"type":"object","required":["id","connection_id","table_name","name","created_at"],"title":"DatasetDetailOut","description":"Detalhe: colunas, último profiling por coluna, histórico de score,\nissues abertos e sugestões (proposed+accepted) do dataset.","examples":[{"id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","connection_id":"c61c71df-1d14-449f-b4f1-044d4c5c9de7","schema_name":null,"table_name":"clientes","name":"clientes","row_count":220,"size_bytes":null,"last_profiled_at":"2026-10-11T05:54:47.362457","created_at":"2026-10-11T05:54:47.258590","auto_monitors_enabled":true,"incremental_profiling":false,"kind":"table","cost_guarded":false,"latest_score":78,"layer":null,"description":null,"column_descriptions":null,"docs_source":null,"usage":null,"readme_published_at":null,"trust":null,"suggestions_status":null,"data_country":null}]},"DatasetDimensionOut":{"properties":{"id":{"type":"string","title":"Id"},"label":{"$ref":"#/components/schemas/DimensionLabelOut"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"measured":{"type":"boolean","title":"Measured"},"checks":{"type":"integer","title":"Checks"},"passed":{"type":"integer","title":"Passed"},"open_issues":{"type":"integer","title":"Open Issues"},"checks_detail":{"items":{"$ref":"#/components/schemas/DimensionCheckOut"},"type":"array","title":"Checks Detail"}},"type":"object","required":["id","label","measured","checks","passed","open_issues"],"title":"DatasetDimensionOut"},"DatasetDimensionsOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Computed At"},"dimensions":{"items":{"$ref":"#/components/schemas/DatasetDimensionOut"},"type":"array","title":"Dimensions"},"other_dimensions":{"items":{"$ref":"#/components/schemas/OtherDimensionOut"},"type":"array","title":"Other Dimensions"},"history":{"items":{"$ref":"#/components/schemas/DimensionHistoryPointOut"},"type":"array","title":"History"},"history_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"History Started At"}},"type":"object","required":["dataset_id","dataset_name","dimensions","other_dimensions","history"],"title":"DatasetDimensionsOut"},"DatasetLineageOut":{"properties":{"upstream":{"items":{"$ref":"#/components/schemas/LineageNeighbourOut"},"type":"array","title":"Upstream"},"downstream":{"items":{"$ref":"#/components/schemas/LineageNeighbourOut"},"type":"array","title":"Downstream"},"external":{"$ref":"#/components/schemas/LineageExternalOut"},"exposures":{"items":{"oneOf":[{"$ref":"#/components/schemas/LineageExposureLeafOut"},{"$ref":"#/components/schemas/LineageConsumerLeafOut"}],"discriminator":{"propertyName":"node","mapping":{"consumer":"#/components/schemas/LineageConsumerLeafOut","exposure":"#/components/schemas/LineageExposureLeafOut"}}},"type":"array","title":"Exposures"}},"type":"object","required":["upstream","downstream","external","exposures"],"title":"DatasetLineageOut","description":"Linhagem direta do dataset: fontes, dependentes, nós externos e consumidores."},"DatasetOut":{"properties":{"id":{"type":"string","title":"Id"},"connection_id":{"type":"string","title":"Connection Id"},"schema_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Name"},"table_name":{"type":"string","title":"Table Name"},"name":{"type":"string","title":"Name"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"last_profiled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Profiled At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"auto_monitors_enabled":{"type":"boolean","title":"Auto Monitors Enabled","default":true},"incremental_profiling":{"type":"boolean","title":"Incremental Profiling","default":false},"kind":{"type":"string","enum":["table","view","materialized_view","external","unknown"],"title":"Kind","description":"Tipo do objeto na fonte (cartão #347). `view` e `external` perfilam em `basic` sobre as primeiras linhas, salvo profundidade própria `standard` ou `deep` do dataset.","default":"table"},"cost_guarded":{"type":"boolean","title":"Cost Guarded","description":"Os scans perfilam este dataset em `basic` sobre as primeiras linhas e sem contar valores distintos: `kind` é `view` ou `external` e o dataset não tem profundidade própria `standard` ou `deep` (cartão #347).","default":false},"latest_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latest Score"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"column_descriptions":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Column Descriptions"},"docs_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Docs Source"},"usage":{"anyOf":[{"$ref":"#/components/schemas/DatasetUsageOut"},{"type":"null"}]},"readme_published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Readme Published At"},"trust":{"anyOf":[{"$ref":"#/components/schemas/TrustOut"},{"type":"null"}]},"data_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Country","description":"País dos dados próprio do dataset (ISO 3166-1 alfa-2, cartão #513); null = o da conexão ou, sem ele, o do workspace (o efetivo vem em `country` no detalhe)."},"suggestions_status":{"anyOf":[{"type":"string","enum":["pending","ready","failed","limited"]},{"type":"null"}],"title":"Suggestions Status","description":"Sugestões IA do último scan, geradas depois dele: `pending` (a gerar), `ready`, `failed` (ficam as heurísticas) ou `limited` (acima do teto de datasets com IA por scan — ficam as heurísticas). Null: nada a gerar (IA desligada ou sugestões IA reutilizadas do scan anterior)."}},"type":"object","required":["id","connection_id","table_name","name","created_at"],"title":"DatasetOut","examples":[{"id":"109b178e-8f65-41fa-b0b5-a922d8e7055b","connection_id":"c61c71df-1d14-449f-b4f1-044d4c5c9de7","schema_name":null,"table_name":"clientes","name":"clientes","row_count":220,"size_bytes":null,"last_profiled_at":"2026-10-11T05:54:47.362457","created_at":"2026-10-11T05:54:47.258590","auto_monitors_enabled":true,"incremental_profiling":false,"kind":"table","cost_guarded":false,"latest_score":78,"layer":null,"description":null,"column_descriptions":null,"docs_source":null,"usage":null,"readme_published_at":null,"trust":null,"suggestions_status":null,"data_country":null}]},"DatasetParsingOut":{"properties":{"profiled":{"type":"boolean","title":"Profiled"},"columns":{"items":{"$ref":"#/components/schemas/ParseColumnOut"},"type":"array","title":"Columns"}},"type":"object","required":["profiled"],"title":"DatasetParsingOut","description":"Parsing e normalização de campos compostos do último perfil (cartão #386)."},"DatasetPipelineHealthOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"status":{"type":"string","enum":["ok","failed","delayed","paused","unknown","not_monitored"],"title":"Status"},"pipelines":{"items":{"$ref":"#/components/schemas/PipelineHealthItemOut"},"type":"array","title":"Pipelines"},"recent_runs":{"items":{"$ref":"#/components/schemas/PipelineRunOut"},"type":"array","title":"Recent Runs"}},"type":"object","required":["dataset_id","status","pipelines","recent_runs"],"title":"DatasetPipelineHealthOut"},"DatasetReadmeOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"status":{"type":"string","title":"Status"},"draft_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Md"},"draft_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Mode"},"draft_disclaimer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Disclaimer"},"draft_edited":{"type":"boolean","title":"Draft Edited","default":false},"ai_generated":{"type":"boolean","title":"Ai Generated","description":"O rascunho foi gerado por IA (false no modo offline).","default":false},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model","description":"Modelo que gerou o rascunho."},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At"},"requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Requested At"},"edited_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Edited At"},"edited_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edited By"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"published_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Md"},"published_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Mode"},"published_disclaimer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Disclaimer"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"published_ai_generated":{"type":"boolean","title":"Published Ai Generated","description":"A versão publicada foi gerada por IA — continua marcada depois de aprovada.","default":false},"published_ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published Ai Model","description":"Modelo que gerou a versão publicada."},"published_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published By"},"published_version":{"type":"integer","title":"Published Version","default":0},"has_unpublished_changes":{"type":"boolean","title":"Has Unpublished Changes","default":false},"diff":{"items":{"$ref":"#/components/schemas/ReadmeDiffLine"},"type":"array","title":"Diff"},"can_approve":{"type":"boolean","title":"Can Approve","default":false},"owners":{"items":{"type":"string"},"type":"array","title":"Owners"}},"type":"object","required":["dataset_id","status"],"title":"DatasetReadmeOut"},"DatasetSensitivityOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"levels":{"items":{"$ref":"#/components/schemas/SensitivityLevelOut"},"type":"array","title":"Levels"},"summary":{"$ref":"#/components/schemas/SensitivitySummaryOut"},"columns":{"items":{"$ref":"#/components/schemas/ColumnSensitivityOut"},"type":"array","title":"Columns"},"events":{"items":{"$ref":"#/components/schemas/SensitivityEventOut"},"type":"array","title":"Events"}},"type":"object","required":["dataset_id","levels","summary","columns","events"],"title":"DatasetSensitivityOut"},"DatasetTrustFactsOut":{"properties":{"schema_version":{"type":"integer","title":"Schema Version"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"detail":{"type":"string","enum":["minimal","full"],"title":"Detail"},"as_of":{"type":"string","title":"As Of"},"verdict":{"$ref":"#/components/schemas/TrustFactsVerdictOut"},"score":{"$ref":"#/components/schemas/TrustFactsScoreOut"},"contract":{"$ref":"#/components/schemas/TrustFactsContractOut"},"policy":{"$ref":"#/components/schemas/TrustFactsPolicyOut"},"sensitivity":{"$ref":"#/components/schemas/TrustFactsSensitivityOut"},"ai_readiness":{"$ref":"#/components/schemas/TrustFactsAiReadinessOut"},"freshness":{"$ref":"#/components/schemas/TrustFactsFreshnessOut"},"ownership":{"$ref":"#/components/schemas/TrustFactsOwnershipOut"},"lineage":{"$ref":"#/components/schemas/TrustFactsLineageOut"},"last_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan At"},"open_issues":{"$ref":"#/components/schemas/IssueSeverityCountsOut"},"links":{"$ref":"#/components/schemas/TrustFactsLinksOut"}},"type":"object","required":["schema_version","dataset_id","dataset_name","detail","as_of","verdict","score","contract","policy","sensitivity","ai_readiness","freshness","ownership","lineage","last_scan_at","open_issues","links"],"title":"DatasetTrustFactsOut","description":"Factos de confiança do dataset num só envelope estável (só metadados). Com\n`detail=minimal` não vêm nomes de colunas nem texto livre."},"DatasetTuningOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"steps":{"items":{"type":"number"},"type":"array","title":"Steps"},"base_threshold":{"type":"number","title":"Base Threshold"},"silence_after_ignores":{"type":"integer","title":"Silence After Ignores"},"default_next_on_ignore":{"additionalProperties":true,"type":"object","title":"Default Next On Ignore"},"anomalies":{"items":{"$ref":"#/components/schemas/AnomalyTuningEntryOut"},"type":"array","title":"Anomalies"},"retunes":{"items":{"$ref":"#/components/schemas/RuleRetuneOut"},"type":"array","title":"Retunes"}},"type":"object","required":["dataset_id","steps","base_threshold","silence_after_ignores","default_next_on_ignore","anomalies","retunes"],"title":"DatasetTuningOut","description":"`GET /datasets/{id}/tuning`: limiares afinados e reajustes pendentes."},"DatasetUsageOut":{"properties":{"tier":{"type":"string","title":"Tier"},"queries_per_day":{"type":"number","title":"Queries Per Day"},"queries_30d":{"type":"integer","title":"Queries 30D"},"queries_window":{"type":"integer","title":"Queries Window"},"window_days":{"type":"integer","title":"Window Days"},"last_query_day":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Query Day"},"suggested_depth":{"type":"string","title":"Suggested Depth"},"suggested_frequency":{"type":"string","title":"Suggested Frequency"},"source":{"type":"string","title":"Source"},"collected_at":{"type":"string","format":"date-time","title":"Collected At"}},"type":"object","required":["tier","queries_per_day","queries_30d","queries_window","window_days","suggested_depth","suggested_frequency","source","collected_at"],"title":"DatasetUsageOut","description":"Uso real segundo os query logs da plataforma."},"DatasetVerdictOut":{"properties":{"verdict":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Verdict"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"failed":{"items":{"$ref":"#/components/schemas/VerdictFailedRuleOut"},"type":"array","title":"Failed"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"contract":{"$ref":"#/components/schemas/DatasetContractStatusOut"},"policy":{"anyOf":[{"$ref":"#/components/schemas/PolicyResultOut"},{"type":"null"}]}},"type":"object","required":["verdict","score","failed","scan_id","contract"],"title":"DatasetVerdictOut","description":"Veredito do dataset para o gate de CI: `fail` com uma regra crítica falhada,\no contrato inválido ou uma violação crítica da política; `warn` só com avisos;\n`unknown` sem scan. `policy` só vem quando a política é avaliada."},"DbtIssueCountsOut":{"properties":{"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"resolved":{"type":"integer","title":"Resolved"}},"type":"object","required":["created","updated","resolved"],"title":"DbtIssueCountsOut"},"DbtMatchCountsOut":{"properties":{"rule_id":{"type":"integer","title":"Rule Id","description":"Testes casados pelo `rule_id` em `meta.beryx` (ou `meta.datavault`)."},"signature":{"type":"integer","title":"Signature","description":"Testes casados pela coluna e pelo tipo de teste."}},"type":"object","required":["rule_id","signature"],"title":"DbtMatchCountsOut"},"DbtRunResultsDuplicateOut":{"properties":{"status":{"type":"string","const":"duplicate","title":"Status"},"invocation_id":{"type":"string","title":"Invocation Id"},"run_id":{"type":"string","title":"Run Id"},"schema_version":{"type":"integer","title":"Schema Version"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["status","invocation_id","run_id","schema_version","detail"],"title":"DbtRunResultsDuplicateOut","description":"O mesmo `invocation_id` já tinha sido recebido: nada foi gravado outra vez."},"DbtRunResultsProcessedOut":{"properties":{"status":{"type":"string","const":"processed","title":"Status"},"invocation_id":{"type":"string","title":"Invocation Id"},"run_id":{"type":"string","title":"Run Id"},"schema_version":{"type":"integer","title":"Schema Version"},"dbt_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dbt Version"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"tests":{"$ref":"#/components/schemas/DbtTestCountsOut"},"rule_results":{"type":"integer","title":"Rule Results"},"matched":{"$ref":"#/components/schemas/DbtMatchCountsOut"},"without_equivalent":{"type":"integer","title":"Without Equivalent"},"unmatched_dataset":{"type":"integer","title":"Unmatched Dataset"},"unknown_tests":{"type":"integer","title":"Unknown Tests"},"other_nodes":{"type":"integer","title":"Other Nodes"},"issues":{"$ref":"#/components/schemas/DbtIssueCountsOut"},"scan_ids":{"items":{"type":"string"},"type":"array","title":"Scan Ids"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"items":{"items":{"$ref":"#/components/schemas/DbtTestResultItemOut"},"type":"array","title":"Items"},"items_total":{"type":"integer","title":"Items Total"}},"type":"object","required":["status","invocation_id","run_id","schema_version","dbt_version","project_name","tests","rule_results","matched","without_equivalent","unmatched_dataset","unknown_tests","other_nodes","issues","scan_ids","warnings","items","items_total"],"title":"DbtRunResultsProcessedOut","description":"Relatório de um `dbt test` recebido pela primeira vez."},"DbtTestCountsOut":{"properties":{"executed":{"type":"integer","title":"Executed"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"warned":{"type":"integer","title":"Warned"},"errored":{"type":"integer","title":"Errored"},"skipped":{"type":"integer","title":"Skipped"}},"type":"object","required":["executed","passed","failed","warned","errored","skipped"],"title":"DbtTestCountsOut"},"DbtTestResultItemOut":{"properties":{"unique_id":{"type":"string","title":"Unique Id"},"test":{"type":"string","title":"Test"},"status":{"type":"string","title":"Status"},"failures":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Failures"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"matched_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched By","description":"rule_id | signature"},"outcome":{"type":"string","title":"Outcome","description":"rule_result | dbt_test_issue | no_dataset | skipped"}},"type":"object","required":["unique_id","test","status","failures","dataset_id","rule_id","matched_by","outcome"],"title":"DbtTestResultItemOut","description":"O que aconteceu a um teste do `run_results.json`."},"DecisionCountsOut":{"properties":{"trusted":{"type":"integer","title":"Trusted"},"caution":{"type":"integer","title":"Caution"},"unknown":{"type":"integer","title":"Unknown"},"untrusted":{"type":"integer","title":"Untrusted"}},"type":"object","required":["trusted","caution","unknown","untrusted"],"title":"DecisionCountsOut","description":"Datasets por decisão de confiança."},"DemoPackOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"industry":{"type":"string","title":"Industry"},"tagline":{"type":"string","title":"Tagline"},"rule_pack_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Pack Id"},"rule_pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Pack Name"},"tables":{"items":{"type":"string"},"type":"array","title":"Tables"},"planted":{"items":{"$ref":"#/components/schemas/DemoPlantedOut"},"type":"array","title":"Planted"}},"type":"object","required":["id","name","industry","tagline","rule_pack_id","rule_pack_name","tables","planted"],"title":"DemoPackOut","description":"Seed pack por indústria (SEEDPACKS #127) — o seletor da demo."},"DemoPlantedOut":{"properties":{"table":{"type":"string","title":"Table"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"title":{"type":"string","title":"Title"},"story":{"type":"string","title":"Story"}},"type":"object","required":["table","column","title","story"],"title":"DemoPlantedOut"},"DimensionCheckOut":{"properties":{"source":{"type":"string","enum":["rule","monitor"],"title":"Source"},"ref":{"type":"string","title":"Ref"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"passed":{"type":"boolean","title":"Passed"}},"type":"object","required":["source","ref","passed"],"title":"DimensionCheckOut","description":"Um check que contou para a dimensão — só metadados, nunca valores observados."},"DimensionEstimateOut":{"properties":{"estimated":{"type":"boolean","title":"Estimated","default":true},"sample_size":{"type":"integer","title":"Sample Size","description":"Linhas analisadas: as da amostra lida pelo scan."},"duplicate_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duplicate Rows","description":"Linhas redundantes encontradas na amostra (unicidade)."},"sample_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sample Method","description":"Como a amostra foi escolhida (cartão #317): system | bernoulli (TABLESAMPLE/SAMPLE nativo), hash (hash da chave primária), stride (uma em cada k linhas de um ficheiro), head (as primeiras linhas) ou full. None em scores anteriores ao cartão."},"ci95":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Ci95","description":"Intervalo de confiança a 95% da dimensão, na mesma escala 0–100 (Wilson sobre a taxa de duplicados da amostra, com correção de população finita; cartão #350). None em scores anteriores ao cartão."}},"type":"object","required":["sample_size"],"title":"DimensionEstimateOut","description":"Dimensão do score calculada sobre uma amostra, não sobre a tabela inteira (cartão #294)."},"DimensionHistoryPointOut":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"scores":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"object","title":"Scores"}},"type":"object","required":["scan_id","computed_at","scores"],"title":"DimensionHistoryPointOut"},"DimensionLabelOut":{"properties":{"pt":{"type":"string","title":"Pt"},"en":{"type":"string","title":"En"}},"type":"object","required":["pt","en"],"title":"DimensionLabelOut"},"DimensionWorstOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"score":{"type":"number","title":"Score"}},"type":"object","required":["id","name","score"],"title":"DimensionWorstOut"},"DomainChangeFieldOut":{"properties":{"field":{"type":"string","title":"Field"},"before":{"title":"Before"},"after":{"title":"After"}},"type":"object","required":["field"],"title":"DomainChangeFieldOut"},"DomainChangeOut":{"properties":{"section":{"type":"string","title":"Section"},"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"change":{"type":"string","title":"Change"},"fields":{"items":{"$ref":"#/components/schemas/DomainChangeFieldOut"},"type":"array","title":"Fields"},"impact":{"type":"string","title":"Impact"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"}},"type":"object","required":["section","kind","title","change","impact"],"title":"DomainChangeOut","description":"Uma mudança entre duas versões do data product (formato do diff de\ncontratos): `impact` major quebra o consumidor, minor é compatível."},"DomainConformanceOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"conformance_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Conformance Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"},"checks":{"items":{"$ref":"#/components/schemas/ConformanceCheckCountOut"},"type":"array","title":"Checks"},"gaps":{"items":{"$ref":"#/components/schemas/ConformanceGapOut"},"type":"array","title":"Gaps"},"next_actions":{"items":{"type":"string"},"type":"array","title":"Next Actions"},"datasets":{"items":{"$ref":"#/components/schemas/DatasetConformanceOut"},"type":"array","title":"Datasets"}},"type":"object","required":["domain_id","domain_name","as_of","met","applicable","checks","gaps","next_actions","datasets"],"title":"DomainConformanceOut","description":"Scorecard de conformidade do data product (cartão #154)."},"DomainConsumerOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","enum":["user","ai_system","dbt_exposure","external"],"title":"Kind"},"ref_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref Id"},"name":{"type":"string","title":"Name"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"},"source":{"type":"string","enum":["manual","derived"],"title":"Source"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","kind","ref_id","name","channel_id","source","created_at"],"title":"DomainConsumerOut"},"DomainConsumersOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"total":{"type":"integer","title":"Total"},"by_kind":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Kind"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"consumers":{"items":{"$ref":"#/components/schemas/DomainConsumerOut"},"type":"array","title":"Consumers"}},"type":"object","required":["domain_id","total","by_kind","summary","consumers"],"title":"DomainConsumersOut","description":"`GET /domains/{id}/consumers`: a lista por tipo, as contagens e a frase de impacto."},"DomainDataPolicyOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"policy":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Policy","description":"Só os campos que o domínio fixa, por regra; vazio = herda tudo do workspace."},"allow_domain_relax":{"type":"boolean","title":"Allow Domain Relax","description":"Se o workspace deixa um domínio afrouxar as suas regras."},"effective":{"$ref":"#/components/schemas/DataPolicyStatusOut"}},"type":"object","required":["domain_id","domain_name","policy","allow_domain_relax","effective"],"title":"DomainDataPolicyOut","description":"A parcial da política de um domínio e a efetiva que os seus datasets herdam."},"DomainDatasetOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"open_issues":{"type":"integer","title":"Open Issues","default":0}},"type":"object","required":["id","name"],"title":"DomainDatasetOut"},"DomainDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner User Id"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"dataset_ids":{"items":{"type":"string"},"type":"array","title":"Dataset Ids"},"member_ids":{"items":{"type":"string"},"type":"array","title":"Member Ids"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"score_delta_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score Delta 7D"},"open_issues":{"$ref":"#/components/schemas/DomainIssueCounts"},"open_issues_total":{"type":"integer","title":"Open Issues Total"},"is_mine":{"type":"boolean","title":"Is Mine","default":false},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"sla":{"anyOf":[{"$ref":"#/components/schemas/DomainSla"},{"type":"null"}]},"attainment_current_month_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Current Month Pct"},"conformance_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Conformance Pct"},"restricted":{"type":"boolean","title":"Restricted","default":false},"access_role":{"type":"string","title":"Access Role","default":"editor"},"can_read":{"type":"boolean","title":"Can Read","default":true},"status":{"type":"string","title":"Status","default":"published"},"version":{"type":"string","title":"Version","default":"1.0"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"datasets":{"items":{"$ref":"#/components/schemas/DomainDatasetOut"},"type":"array","title":"Datasets"},"members":{"items":{"$ref":"#/components/schemas/DomainMemberOut"},"type":"array","title":"Members"}},"type":"object","required":["id","name","dataset_ids","member_ids","open_issues","open_issues_total","created_at","updated_at","datasets","members"],"title":"DomainDetailOut"},"DomainDimensionOut":{"properties":{"id":{"type":"string","title":"Id"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"datasets_measured":{"type":"integer","title":"Datasets Measured"},"datasets_total":{"type":"integer","title":"Datasets Total"},"checks":{"type":"integer","title":"Checks"},"passed":{"type":"integer","title":"Passed"},"open_issues":{"type":"integer","title":"Open Issues"}},"type":"object","required":["id","datasets_measured","datasets_total","checks","passed","open_issues"],"title":"DomainDimensionOut"},"DomainDimensionsOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"datasets_total":{"type":"integer","title":"Datasets Total"},"dimensions":{"items":{"$ref":"#/components/schemas/DomainDimensionOut"},"type":"array","title":"Dimensions"}},"type":"object","required":["id","name","datasets_total","dimensions"],"title":"DomainDimensionsOut"},"DomainGrantOut":{"properties":{"team_id":{"type":"string","title":"Team Id"},"team_name":{"type":"string","title":"Team Name"},"role":{"type":"string","title":"Role"},"granted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["team_id","team_name","role","granted_by","created_at","updated_at"],"title":"DomainGrantOut"},"DomainIssueCounts":{"properties":{"critical":{"type":"integer","title":"Critical","default":0},"warning":{"type":"integer","title":"Warning","default":0},"info":{"type":"integer","title":"Info","default":0}},"type":"object","title":"DomainIssueCounts"},"DomainMemberOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"}},"type":"object","required":["id","name","role"],"title":"DomainMemberOut"},"DomainOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner User Id"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"dataset_ids":{"items":{"type":"string"},"type":"array","title":"Dataset Ids"},"member_ids":{"items":{"type":"string"},"type":"array","title":"Member Ids"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"score_delta_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score Delta 7D"},"open_issues":{"$ref":"#/components/schemas/DomainIssueCounts"},"open_issues_total":{"type":"integer","title":"Open Issues Total"},"is_mine":{"type":"boolean","title":"Is Mine","default":false},"can_manage":{"type":"boolean","title":"Can Manage","default":false},"sla":{"anyOf":[{"$ref":"#/components/schemas/DomainSla"},{"type":"null"}]},"attainment_current_month_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Current Month Pct"},"conformance_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Conformance Pct"},"restricted":{"type":"boolean","title":"Restricted","default":false},"access_role":{"type":"string","title":"Access Role","default":"editor"},"can_read":{"type":"boolean","title":"Can Read","default":true},"status":{"type":"string","title":"Status","default":"published"},"version":{"type":"string","title":"Version","default":"1.0"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","dataset_ids","member_ids","open_issues","open_issues_total","created_at","updated_at"],"title":"DomainOut"},"DomainReadinessAiOut":{"properties":{"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"blocked":{"type":"boolean","title":"Blocked"}},"type":"object","required":["score","blocked"],"title":"DomainReadinessAiOut"},"DomainReadinessConsumersOut":{"properties":{"total":{"type":"integer","title":"Total"},"by_kind":{"$ref":"#/components/schemas/ConsumerKindCountsOut"}},"type":"object","required":["total","by_kind"],"title":"DomainReadinessConsumersOut","description":"Consumidores registados do data product (informativo; não muda o estado)."},"DomainReadinessDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"status":{"type":"string","enum":["ready","ready_with_warnings","not_ready"],"title":"Status"},"last_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan At"},"verdict":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Verdict"},"contract":{"$ref":"#/components/schemas/TrustContractFlagsOut"},"ai_readiness":{"$ref":"#/components/schemas/DomainReadinessAiOut"},"open_critical_issues":{"type":"integer","title":"Open Critical Issues"},"open_slo_breaches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Open Slo Breaches"},"next_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Scan At"},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["dataset_id","dataset_name","status","last_scan_at","verdict","contract","ai_readiness","open_critical_issues","open_slo_breaches","next_scan_at","blockers","warnings"],"title":"DomainReadinessDatasetOut","description":"Readiness de um dataset do data product; `open_slo_breaches` é null sem SLA."},"DomainReadinessOut":{"properties":{"domain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Id"},"domain_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Name"},"use_case":{"type":"string","enum":["rag","ml","agente","bi"],"title":"Use Case"},"status":{"type":"string","enum":["ready","ready_with_warnings","not_ready"],"title":"Status"},"blockers":{"items":{"$ref":"#/components/schemas/ReadinessFindingOut"},"type":"array","title":"Blockers"},"warnings":{"items":{"$ref":"#/components/schemas/ReadinessFindingOut"},"type":"array","title":"Warnings"},"checked_at":{"type":"string","title":"Checked At"},"valid_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid Until"},"sla":{"anyOf":[{"$ref":"#/components/schemas/DomainReadinessSlaOut"},{"type":"null"}]},"datasets":{"items":{"$ref":"#/components/schemas/DomainReadinessDatasetOut"},"type":"array","title":"Datasets"},"consumers":{"$ref":"#/components/schemas/DomainReadinessConsumersOut"}},"type":"object","required":["domain_id","domain_name","use_case","status","blockers","warnings","checked_at","valid_until","sla","datasets","consumers"],"title":"DomainReadinessOut","description":"Readiness do data product para um caso de uso: `not_ready` com algum\nbloqueador, `ready_with_warnings` só com avisos. `valid_until` é o próximo\nscan agendado (null sem agenda); `sla` é null sem SLA declarado."},"DomainReadinessSlaOut":{"properties":{"objective_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Objective Pct"},"attainment_current_month_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Current Month Pct"}},"type":"object","required":["objective_pct","attainment_current_month_pct"],"title":"DomainReadinessSlaOut"},"DomainSla":{"properties":{"freshness_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Freshness Hours"},"min_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Score"},"attainment_objective_pct":{"type":"number","title":"Attainment Objective Pct","default":95},"verdict_required":{"type":"boolean","title":"Verdict Required","default":true}},"additionalProperties":false,"type":"object","title":"DomainSla","description":"SLA declarado do data product (cartão #141). Gamas validadas no service.\n\n- `freshness_hours`: alvo de frescura dos datasets sem regra própria (com\n  regra, vale o mais exigente);\n- `min_score`: 0–100 — dia com score abaixo conta como violado;\n- `attainment_objective_pct`: 50–100 (omissão 95);\n- `verdict_required`: dia com veredito `fail` conta como violado."},"DomainSloReportOut":{"properties":{"months":{"type":"integer","title":"Months"},"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"objective_pct":{"type":"number","title":"Objective Pct"},"summary":{"$ref":"#/components/schemas/SloSummaryOut"},"monthly":{"items":{"$ref":"#/components/schemas/SloMonthOut"},"type":"array","title":"Monthly"},"datasets":{"items":{"$ref":"#/components/schemas/SloDatasetOut"},"type":"array","title":"Datasets"},"violations":{"items":{"$ref":"#/components/schemas/DomainSloViolationOut"},"type":"array","title":"Violations"},"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"sla":{"anyOf":[{"$ref":"#/components/schemas/DomainSla"},{"type":"null"}]},"breakdown":{"$ref":"#/components/schemas/SloBreakdownOut"}},"type":"object","required":["months","start","end","objective_pct","summary","monthly","datasets","violations","domain_id","domain_name","breakdown"],"title":"DomainSloReportOut","description":"SLO de um data product: a forma do dashboard + SLA declarado + breakdown."},"DomainSloViolationOut":{"properties":{"date":{"type":"string","title":"Date"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"target_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Hours"},"observed_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Observed Hours"},"issues":{"items":{"$ref":"#/components/schemas/SloIssueRefOut"},"type":"array","title":"Issues"},"issue_count":{"type":"integer","title":"Issue Count","default":0},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"}},"type":"object","required":["date","dataset_id","dataset_name"],"title":"DomainSloViolationOut"},"DomainSuggestionAmbiguousOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"links":{"type":"integer","title":"Links"},"candidates":{"items":{"$ref":"#/components/schemas/DomainSuggestionCandidateOut"},"type":"array","title":"Candidates"}},"type":"object","required":["dataset_id","dataset_name","links","candidates"],"title":"DomainSuggestionAmbiguousOut"},"DomainSuggestionCandidateOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"name":{"type":"string","title":"Name"},"votes":{"type":"integer","title":"Votes"},"restricted":{"type":"boolean","title":"Restricted"},"can_manage":{"type":"boolean","title":"Can Manage"},"signature":{"type":"string","title":"Signature"}},"type":"object","required":["domain_id","name","votes","restricted","can_manage","signature"],"title":"DomainSuggestionCandidateOut"},"DomainSuggestionCountsOut":{"properties":{"without_domain":{"type":"integer","title":"Without Domain"},"with_lineage":{"type":"integer","title":"With Lineage","description":"Datasets sem domínio com pelo menos uma ligação de linhagem."},"suggested":{"type":"integer","title":"Suggested"},"ambiguous":{"type":"integer","title":"Ambiguous"}},"type":"object","required":["without_domain","with_lineage","suggested","ambiguous"],"title":"DomainSuggestionCountsOut"},"DomainSuggestionGroupOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"name":{"type":"string","title":"Name"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"restricted":{"type":"boolean","title":"Restricted"},"items":{"items":{"$ref":"#/components/schemas/DomainSuggestionItemOut"},"type":"array","title":"Items"}},"type":"object","required":["domain_id","name","owner_name","restricted","items"],"title":"DomainSuggestionGroupOut"},"DomainSuggestionItemOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"domain_id":{"type":"string","title":"Domain Id"},"votes":{"type":"integer","title":"Votes"},"links":{"type":"integer","title":"Links"},"via_columns":{"items":{"type":"string"},"type":"array","title":"Via Columns"},"kinds":{"items":{"type":"string"},"type":"array","title":"Kinds"},"inferred_only":{"type":"boolean","title":"Inferred Only"},"signature":{"type":"string","title":"Signature"},"neighbours":{"items":{"$ref":"#/components/schemas/DomainSuggestionNeighbourOut"},"type":"array","title":"Neighbours"}},"type":"object","required":["dataset_id","dataset_name","domain_id","votes","links","via_columns","kinds","inferred_only","signature","neighbours"],"title":"DomainSuggestionItemOut"},"DomainSuggestionNeighbourOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"restricted":{"type":"boolean","title":"Restricted"},"voted":{"type":"boolean","title":"Voted"}},"type":"object","required":["dataset_id","name","restricted","voted"],"title":"DomainSuggestionNeighbourOut","description":"Um vizinho de linhagem; um invisível a quem pede vem como «Dataset restrito»,\ncom um id opaco (`restrito-N`) e `restricted: true` (ADR 0011 §2.4)."},"DomainSuggestionsOut":{"properties":{"counts":{"$ref":"#/components/schemas/DomainSuggestionCountsOut"},"has_domains":{"type":"boolean","title":"Has Domains"},"has_lineage":{"type":"boolean","title":"Has Lineage","description":"Há pelo menos uma ligação de linhagem que toca um dataset que quem pede vê."},"domains":{"items":{"$ref":"#/components/schemas/DomainSuggestionGroupOut"},"type":"array","title":"Domains"},"ambiguous":{"items":{"$ref":"#/components/schemas/DomainSuggestionAmbiguousOut"},"type":"array","title":"Ambiguous"}},"type":"object","required":["counts","has_domains","has_lineage","domains","ambiguous"],"title":"DomainSuggestionsOut"},"DomainTrustFactsLinksOut":{"properties":{"domain":{"type":"string","title":"Domain"},"readiness":{"type":"string","title":"Readiness"},"trust_facts":{"type":"string","title":"Trust Facts"}},"type":"object","required":["domain","readiness","trust_facts"],"title":"DomainTrustFactsLinksOut"},"DomainTrustFactsOut":{"properties":{"schema_version":{"type":"integer","title":"Schema Version"},"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"detail":{"type":"string","enum":["minimal","full"],"title":"Detail"},"as_of":{"type":"string","title":"As Of"},"summary":{"$ref":"#/components/schemas/DomainTrustFactsSummaryOut"},"links":{"$ref":"#/components/schemas/DomainTrustFactsLinksOut"},"datasets":{"items":{"$ref":"#/components/schemas/DatasetTrustFactsOut"},"type":"array","title":"Datasets"}},"type":"object","required":["schema_version","domain_id","domain_name","owner","detail","as_of","summary","links","datasets"],"title":"DomainTrustFactsOut","description":"Factos de confiança do data product: o agregado e os factos de cada dataset."},"DomainTrustFactsSummaryOut":{"properties":{"datasets":{"type":"integer","title":"Datasets"},"worst_decision":{"type":"string","enum":["trusted","caution","untrusted","unknown"],"title":"Worst Decision"},"decisions":{"$ref":"#/components/schemas/DecisionCountsOut"},"verdicts":{"$ref":"#/components/schemas/VerdictCountsOut"},"quality_score_avg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality Score Avg"},"trust_score_avg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trust Score Avg"},"ai_readiness_avg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ai Readiness Avg"},"freshness_met":{"type":"integer","title":"Freshness Met"},"freshness_measured":{"type":"integer","title":"Freshness Measured"},"sensitivity_levels":{"$ref":"#/components/schemas/SensitivityLevelCountsOut"},"pii_unmasked_gold":{"type":"integer","title":"Pii Unmasked Gold"},"open_issues":{"$ref":"#/components/schemas/IssueSeverityCountsOut"}},"type":"object","required":["datasets","worst_decision","decisions","verdicts","quality_score_avg","trust_score_avg","ai_readiness_avg","freshness_met","freshness_measured","sensitivity_levels","pii_unmasked_gold","open_issues"],"title":"DomainTrustFactsSummaryOut","description":"Agregado do data product: contagens e médias dos factos dos seus datasets."},"DomainVerdictDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"verdict":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Verdict"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"failed":{"items":{"$ref":"#/components/schemas/VerdictFailedRuleOut"},"type":"array","title":"Failed"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"contract":{"$ref":"#/components/schemas/DatasetContractStatusOut"},"policy":{"anyOf":[{"$ref":"#/components/schemas/PolicyResultOut"},{"type":"null"}]}},"type":"object","required":["dataset_id","dataset_name","verdict","score","failed","scan_id","contract"],"title":"DomainVerdictDatasetOut","description":"Veredito de um dataset do data product (o mesmo do veredito do dataset)."},"DomainVerdictOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"verdict":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Verdict"},"with_policy":{"type":"boolean","title":"With Policy"},"counts":{"$ref":"#/components/schemas/VerdictCountsOut"},"datasets":{"items":{"$ref":"#/components/schemas/DomainVerdictDatasetOut"},"type":"array","title":"Datasets"}},"type":"object","required":["domain_id","domain_name","verdict","with_policy","counts","datasets"],"title":"DomainVerdictOut","description":"Veredito do data product: o pior dos seus datasets (`unknown` se nenhum tem\nveredito), as contagens e o veredito de cada dataset, por nome."},"DomainVersionDiffOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"from_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Version"},"to_version":{"type":"string","title":"To Version"},"next_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Version"},"bump":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bump"},"summary":{"type":"string","title":"Summary"},"changes":{"items":{"$ref":"#/components/schemas/DomainChangeOut"},"type":"array","title":"Changes"}},"type":"object","required":["domain_id","to_version","summary","changes"],"title":"DomainVersionDiffOut","description":"Diff entre duas versões; `to_version=current` é o estado atual tal como\nseria publicado. `next_version` (a versão que a publicação gravaria) só vem\nquando a origem é a última versão; nos outros casos é `null`."},"DomainVersionOut":{"properties":{"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"},"bump":{"type":"string","title":"Bump"},"change_summary":{"type":"string","title":"Change Summary"},"changes_count":{"type":"integer","title":"Changes Count"},"breaking_changes":{"type":"integer","title":"Breaking Changes"},"datasets":{"type":"integer","title":"Datasets"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","version","bump","change_summary","changes_count","breaking_changes","datasets","created_at"],"title":"DomainVersionOut","description":"Versão publicada do data product (cartão #168)."},"DossierCdeOut":{"properties":{"cde_id":{"type":"string","title":"Cde Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"column_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column Name"},"label":{"type":"string","title":"Label"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"contract":{"anyOf":[{"$ref":"#/components/schemas/DossierContractOut"},{"type":"null"}]},"sla":{"items":{"$ref":"#/components/schemas/DossierSlaOut"},"type":"array","title":"Sla"},"lineage":{"$ref":"#/components/schemas/DossierLineageOut"},"requirements":{"items":{"$ref":"#/components/schemas/DossierRequirementStatusOut"},"type":"array","title":"Requirements"},"dimensions":{"items":{"$ref":"#/components/schemas/DossierDimensionOut"},"type":"array","title":"Dimensions"},"gaps":{"items":{"$ref":"#/components/schemas/DossierGapOut"},"type":"array","title":"Gaps"},"required_checks":{"type":"integer","title":"Required Checks"},"covered_checks":{"type":"integer","title":"Covered Checks"}},"type":"object","required":["cde_id","dataset_id","dataset_name","label","domains","sla","lineage","requirements","dimensions","gaps","required_checks","covered_checks"],"title":"DossierCdeOut"},"DossierContractOut":{"properties":{"number":{"type":"integer","title":"Number"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"}},"type":"object","required":["number"],"title":"DossierContractOut"},"DossierDimensionOut":{"properties":{"dimension":{"type":"string","title":"Dimension"},"label":{"type":"string","title":"Label"},"status":{"type":"string","title":"Status"},"status_label":{"type":"string","title":"Status Label"},"rules":{"items":{"$ref":"#/components/schemas/DossierRuleOut"},"type":"array","title":"Rules"},"open_issues":{"items":{"$ref":"#/components/schemas/DossierIssueOut"},"type":"array","title":"Open Issues"},"candidate_rule_types":{"items":{"type":"string"},"type":"array","title":"Candidate Rule Types"}},"type":"object","required":["dimension","label","status","status_label","rules","open_issues","candidate_rule_types"],"title":"DossierDimensionOut"},"DossierGapOut":{"properties":{"code":{"type":"string","title":"Code"},"dimension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"DossierGapOut"},"DossierIssueOut":{"properties":{"issue_id":{"type":"string","title":"Issue Id"},"type":{"type":"string","title":"Type"},"subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"},"severity":{"type":"string","title":"Severity"},"opened_at":{"type":"string","format":"date-time","title":"Opened At"}},"type":"object","required":["issue_id","type","severity","opened_at"],"title":"DossierIssueOut"},"DossierLineageOut":{"properties":{"upstream":{"items":{"type":"string"},"type":"array","title":"Upstream"},"downstream":{"items":{"type":"string"},"type":"array","title":"Downstream"},"hidden_upstream":{"type":"integer","title":"Hidden Upstream"},"hidden_downstream":{"type":"integer","title":"Hidden Downstream"}},"type":"object","required":["upstream","downstream","hidden_upstream","hidden_downstream"],"title":"DossierLineageOut"},"DossierOut":{"properties":{"title":{"type":"string","title":"Title"},"regulation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Regulation"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"window_days":{"type":"integer","title":"Window Days"},"deterministic":{"type":"boolean","title":"Deterministic"},"summary":{"$ref":"#/components/schemas/DossierSummaryOut"},"regulations":{"items":{"$ref":"#/components/schemas/DossierRegulationOut"},"type":"array","title":"Regulations"}},"type":"object","required":["title","generated_at","window_days","deterministic","summary","regulations"],"title":"DossierOut"},"DossierRegulationOut":{"properties":{"regulation":{"type":"string","title":"Regulation"},"label":{"type":"string","title":"Label"},"source":{"type":"string","title":"Source"},"summary":{"$ref":"#/components/schemas/DossierSummaryOut"},"requirements":{"items":{"$ref":"#/components/schemas/DossierRequirementOut"},"type":"array","title":"Requirements"},"cdes":{"items":{"$ref":"#/components/schemas/DossierCdeOut"},"type":"array","title":"Cdes"}},"type":"object","required":["regulation","label","source","summary","requirements","cdes"],"title":"DossierRegulationOut"},"DossierRequirementOut":{"properties":{"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"dimensions":{"items":{"type":"string"},"type":"array","title":"Dimensions"},"human_assessment":{"type":"boolean","title":"Human Assessment"},"cdes_by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"Cdes By Status"}},"type":"object","required":["code","title","dimensions","human_assessment","cdes_by_status"],"title":"DossierRequirementOut"},"DossierRequirementStatusOut":{"properties":{"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"status_label":{"type":"string","title":"Status Label"},"dimensions":{"items":{"type":"string"},"type":"array","title":"Dimensions"}},"type":"object","required":["code","title","status","status_label","dimensions"],"title":"DossierRequirementStatusOut"},"DossierRuleOut":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"rule_type":{"type":"string","title":"Rule Type"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"severity":{"type":"string","title":"Severity"},"last_passed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Last Passed"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"}},"type":"object","required":["rule_id","rule_type","columns","severity"],"title":"DossierRuleOut"},"DossierSlaOut":{"properties":{"domain_name":{"type":"string","title":"Domain Name"},"objective_pct":{"type":"number","title":"Objective Pct"},"attainment_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Pct"}},"type":"object","required":["domain_name","objective_pct"],"title":"DossierSlaOut"},"DossierSummaryOut":{"properties":{"cdes":{"type":"integer","title":"Cdes"},"required_checks":{"type":"integer","title":"Required Checks"},"covered_checks":{"type":"integer","title":"Covered Checks"},"coverage_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coverage Pct"},"cdes_without_gaps":{"type":"integer","title":"Cdes Without Gaps"},"gaps":{"type":"integer","title":"Gaps"},"failing_dimensions":{"type":"integer","title":"Failing Dimensions"}},"type":"object","required":["cdes","required_checks","covered_checks","cdes_without_gaps","gaps","failing_dimensions"],"title":"DossierSummaryOut"},"DuplicateClusterOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"confidence":{"type":"number","title":"Confidence"},"row_count":{"type":"integer","title":"Row Count"},"sample":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Sample"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"confidence_band":{"type":"string","title":"Confidence Band","readOnly":true},"reference_precision":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reference Precision","readOnly":true}},"type":"object","required":["id","scan_id","dataset_id","confidence","row_count","status","created_at","confidence_band","reference_precision"],"title":"DuplicateClusterOut"},"EngineeringDashboardOut":{"properties":{"global_score":{"type":"number","title":"Global Score"},"datasets_scanned":{"type":"integer","title":"Datasets Scanned"},"suggestions_open":{"type":"integer","title":"Suggestions Open"},"open_issues_by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"Open Issues By Severity"},"top_issues":{"items":{"$ref":"#/components/schemas/TopIssueItem"},"type":"array","title":"Top Issues"},"worst_datasets":{"items":{"$ref":"#/components/schemas/WorstDatasetItem"},"type":"array","title":"Worst Datasets"},"duplicate_clusters_open":{"type":"integer","title":"Duplicate Clusters Open"},"drift_findings_7d":{"type":"integer","title":"Drift Findings 7D"},"score_trend":{"items":{"$ref":"#/components/schemas/ScoreTrendPoint"},"type":"array","title":"Score Trend"}},"type":"object","required":["global_score","datasets_scanned","suggestions_open","open_issues_by_severity","top_issues","worst_datasets","duplicate_clusters_open","drift_findings_7d","score_trend"],"title":"EngineeringDashboardOut"},"ExecutiveDashboardOut":{"properties":{"total_impact_eur_month":{"type":"number","title":"Total Impact Eur Month"},"potential_savings_eur_month":{"type":"number","title":"Potential Savings Eur Month"},"critical_alerts":{"items":{"$ref":"#/components/schemas/CriticalAlertItem"},"type":"array","title":"Critical Alerts"},"risk_level":{"type":"string","title":"Risk Level"},"score_trend":{"items":{"$ref":"#/components/schemas/ScoreTrendPoint"},"type":"array","title":"Score Trend"},"stp_percent":{"type":"number","title":"Stp Percent"},"cycle_time_days":{"type":"number","title":"Cycle Time Days"},"hours_freed_month":{"type":"number","title":"Hours Freed Month"}},"type":"object","required":["total_impact_eur_month","potential_savings_eur_month","critical_alerts","risk_level","score_trend","stp_percent","cycle_time_days","hours_freed_month"],"title":"ExecutiveDashboardOut"},"ExportPiiRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"}},"additionalProperties":false,"type":"object","title":"ExportPiiRule"},"ExternalCatalogConnectionOut":{"properties":{"connection_id":{"type":"string","title":"Connection Id"},"connection_name":{"type":"string","title":"Connection Name"},"catalog":{"type":"string","title":"Catalog"},"enabled":{"type":"boolean","title":"Enabled"},"import_on_sync":{"type":"boolean","title":"Import On Sync"},"last_import_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Import At"},"tables_read":{"type":"integer","title":"Tables Read"},"glossary_terms":{"type":"integer","title":"Glossary Terms"},"changes":{"type":"integer","title":"Changes"}},"type":"object","required":["connection_id","connection_name","catalog","enabled","import_on_sync","tables_read","glossary_terms","changes"],"title":"ExternalCatalogConnectionOut"},"ExternalCatalogOut":{"properties":{"connected":{"type":"boolean","title":"Connected"},"datasets_covered":{"type":"integer","title":"Datasets Covered"},"glossary_terms":{"type":"integer","title":"Glossary Terms"},"tables_read":{"type":"integer","title":"Tables Read"},"last_import_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Import At"},"connections":{"items":{"$ref":"#/components/schemas/ExternalCatalogConnectionOut"},"type":"array","title":"Connections"}},"type":"object","required":["connected","datasets_covered","glossary_terms","tables_read","connections"],"title":"ExternalCatalogOut"},"ExternalJobOut":{"properties":{"namespace":{"type":"string","title":"Namespace"},"name":{"type":"string","title":"Name"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"last_event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event Type"},"last_event_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event Label"},"last_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event At"},"failed":{"type":"boolean","title":"Failed","default":false}},"type":"object","required":["namespace","name"],"title":"ExternalJobOut","description":"Job OpenLineage do cliente que liga um nó externo (cartão #130)."},"ExternalLineageNodeOut":{"properties":{"node_id":{"type":"string","title":"Node Id"},"namespace":{"type":"string","title":"Namespace"},"name":{"type":"string","title":"Name"},"label":{"type":"string","title":"Label"},"depth":{"type":"integer","title":"Depth"},"from_dataset_id":{"type":"string","title":"From Dataset Id"},"kind":{"type":"string","title":"Kind","default":"openlineage"},"jobs":{"items":{"$ref":"#/components/schemas/ExternalJobOut"},"type":"array","title":"Jobs"},"failed":{"type":"boolean","title":"Failed","default":false},"last_seen_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Seen At"}},"type":"object","required":["node_id","namespace","name","label","depth","from_dataset_id"],"title":"ExternalLineageNodeOut","description":"Nó fora dos nossos datasets visto no OpenLineage do cliente (S3, Kafka...)."},"ExternalTicketOut":{"properties":{"id":{"type":"string","title":"Id"},"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","title":"Entity Id"},"integration_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration Id"},"provider":{"type":"string","title":"Provider"},"external_key":{"type":"string","title":"External Key"},"url":{"type":"string","title":"Url"},"status":{"type":"string","title":"Status"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"last_status_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Status At"}},"type":"object","required":["id","entity_type","entity_id","provider","external_key","url","status","created_at"],"title":"ExternalTicketOut","description":"Ticket num sistema externo ligado a uma entidade do DataVault (cartão #374).\n\n`status` não é sincronizado com o vendor: um ticket criado pelo DataVault\nnasce `open`; um ligado à mão (ou anterior a esta versão) fica `unknown`."},"FailureParamsOut":{"properties":{"fields":{"items":{"type":"string"},"type":"array","title":"Fields","description":"`missing_fields`: os campos obrigatórios em falta."},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind","description":"`invalid_*`: o tipo de identificador (nif, iban…)."},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference","description":"`not_in_reference`: a lista de referência."},"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min","description":"`range`: o mínimo da regra."},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max","description":"`range`: o máximo da regra."}},"type":"object","required":["fields","kind","reference","min","max"],"title":"FailureParamsOut","description":"O que a regra pedia (nunca o valor do registo)."},"FinopsDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"size_bytes":{"type":"integer","title":"Size Bytes"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"storage_eur_month":{"type":"number","title":"Storage Eur Month"},"quality_waste_eur_month":{"type":"number","title":"Quality Waste Eur Month"},"total_eur_month":{"type":"number","title":"Total Eur Month"},"latest_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latest Score"}},"type":"object","required":["dataset_id","name","size_bytes","storage_eur_month","quality_waste_eur_month","total_eur_month"],"title":"FinopsDatasetOut"},"FinopsOverviewOut":{"properties":{"totals":{"$ref":"#/components/schemas/FinopsTotalsOut"},"price_per_gb_month_eur":{"type":"number","title":"Price Per Gb Month Eur"},"top_datasets":{"items":{"$ref":"#/components/schemas/FinopsDatasetOut"},"type":"array","title":"Top Datasets"},"recommendations":{"items":{"$ref":"#/components/schemas/FinopsRecommendationOut"},"type":"array","title":"Recommendations"},"billing_note":{"type":"string","title":"Billing Note"},"cost_quality":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cost Quality"}},"type":"object","required":["totals","price_per_gb_month_eur","top_datasets","recommendations","billing_note"],"title":"FinopsOverviewOut"},"FinopsRecommendationOut":{"properties":{"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["kind","title","detail"],"title":"FinopsRecommendationOut"},"FinopsTotalsOut":{"properties":{"storage_eur_month":{"type":"number","title":"Storage Eur Month"},"quality_waste_eur_month":{"type":"number","title":"Quality Waste Eur Month"},"total_eur_month":{"type":"number","title":"Total Eur Month"},"potential_savings_eur_month":{"type":"number","title":"Potential Savings Eur Month"}},"type":"object","required":["storage_eur_month","quality_waste_eur_month","total_eur_month","potential_savings_eur_month"],"title":"FinopsTotalsOut"},"FormatMaskOut":{"properties":{"mask":{"type":"string","title":"Mask"},"share":{"type":"number","title":"Share"}},"type":"object","required":["mask","share"],"title":"FormatMaskOut"},"FreshnessOut":{"properties":{"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"candidates":{"items":{"type":"string"},"type":"array","title":"Candidates"},"used_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Used Column"},"detected_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Column"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"latest_timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Timestamp"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"source_timezone":{"type":"string","title":"Source Timezone","default":"UTC"},"future_columns":{"items":{"type":"string"},"type":"array","title":"Future Columns"},"configured_missing":{"type":"boolean","title":"Configured Missing","default":false},"profiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profiled At"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"rule_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Column"},"rule_max_age_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rule Max Age Hours"}},"type":"object","title":"FreshnessOut","description":"Coluna que mede a frescura do dataset e como foi lida no último perfil."},"GateCorpusOut":{"properties":{"compared":{"type":"integer","title":"Compared","description":"Impressões digitais do corpus consideradas."},"truncated":{"type":"boolean","title":"Truncated","description":"A comparação aproximada usou só as 5000 mais recentes (os exatos veem o corpus todo)."},"expected_languages":{"items":{"type":"string"},"type":"array","title":"Expected Languages"}},"type":"object","required":["compared","truncated","expected_languages"],"title":"GateCorpusOut"},"GateDocumentIn":{"properties":{"id":{"type":"string","maxLength":500,"minLength":1,"title":"Id","description":"Identificador do documento no pipeline (caminho, URL, chave). Único no lote."},"text":{"type":"string","maxLength":100000,"title":"Text","description":"Texto extraído do documento (máx. 100000 caracteres)."},"metadata":{"additionalProperties":true,"type":"object","maxProperties":32,"title":"Metadata","description":"Metadata livre (nunca persistida). `modified_at` (ISO 8601) ativa a flag `desatualizado`."}},"type":"object","required":["id","text"],"title":"GateDocumentIn","description":"Um documento do lote: texto já extraído + metadata opcional."},"GateFlagOut":{"properties":{"code":{"type":"string","enum":["vazio","pii","duplicado_exato","duplicado_aproximado","idioma_inesperado","boilerplate","curto","codificacao","desatualizado"],"title":"Code"},"severity":{"type":"string","enum":["rejeitar","rever","info"],"title":"Severity"},"message":{"type":"string","title":"Message"},"details":{"additionalProperties":true,"type":"object","title":"Details","description":"Contexto da flag: `types` (pii), `origem`/`ref`/`similarity` (duplicados), `detected`/`expected` (idioma), `reasons` (boilerplate)."}},"type":"object","required":["code","severity","message"],"title":"GateFlagOut"},"GatePolicyIn":{"properties":{"expected_languages":{"anyOf":[{"items":{"type":"string","enum":["pt","en","es","fr"]},"type":"array"},{"type":"null"}],"title":"Expected Languages","description":"Idiomas esperados. Omitido e com `dataset_id`: os idiomas dominantes do último scan do corpus. Sem nenhum dos dois, a flag `idioma_inesperado` não se aplica."},"allowed_pii":{"items":{"type":"string","enum":["email","NIF","IBAN","telefone","cartao_pagamento"]},"type":"array","title":"Allowed Pii","description":"Tipos de dados pessoais tolerados (a flag `pii` passa a `info`)."},"pii_action":{"type":"string","enum":["rejeitar","rever"],"title":"Pii Action","description":"Severidade da flag `pii` para tipos não tolerados.","default":"rejeitar"},"min_chars":{"type":"integer","maximum":10000,"minimum":0,"title":"Min Chars","description":"Abaixo disto a flag `curto` (rever).","default":200},"stale_after_days":{"anyOf":[{"type":"integer","maximum":36500,"minimum":1},{"type":"null"}],"title":"Stale After Days","description":"Idade (por `metadata.modified_at`) a partir da qual o documento é `desatualizado`. `null` desliga.","default":730}},"type":"object","title":"GatePolicyIn","description":"O que o pipeline tolera. Omitido = os limiares da análise de corpus."},"GateQuotaOut":{"properties":{"remaining_this_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining This Month","description":"Documentos que ainda cabem no plano; `null` = ilimitado."}},"type":"object","required":["remaining_this_month"],"title":"GateQuotaOut"},"GateResultOut":{"properties":{"id":{"type":"string","title":"Id"},"verdict":{"type":"string","enum":["aceitar","rever","rejeitar"],"title":"Verdict","description":"`rejeitar` se alguma flag rejeita; `rever` se alguma pede revisão; senão `aceitar`."},"score":{"type":"number","title":"Score","description":"0–100: 100 menos a penalização das flags."},"flags":{"items":{"$ref":"#/components/schemas/GateFlagOut"},"type":"array","title":"Flags"},"content_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Hash","description":"SHA-256 do texto normalizado (espaços colapsados) — o que o gate compara."},"chars":{"type":"integer","title":"Chars"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["id","verdict","score","flags","content_hash","chars","language"],"title":"GateResultOut"},"GateSummaryOut":{"properties":{"total":{"type":"integer","title":"Total"},"aceitar":{"type":"integer","title":"Aceitar"},"rever":{"type":"integer","title":"Rever"},"rejeitar":{"type":"integer","title":"Rejeitar"}},"type":"object","required":["total","aceitar","rever","rejeitar"],"title":"GateSummaryOut"},"GovernanceCellOut":{"properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"target":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target"},"status":{"type":"string","enum":["on_target","at_risk","off_target","no_data","no_target"],"title":"Status"}},"type":"object","required":["status"],"title":"GovernanceCellOut"},"GovernanceDomainRowOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"restricted":{"type":"boolean","title":"Restricted"},"datasets":{"type":"integer","title":"Datasets"},"summary":{"$ref":"#/components/schemas/GovernanceSummaryOut"},"cells":{"additionalProperties":{"$ref":"#/components/schemas/GovernanceCellOut"},"type":"object","title":"Cells"}},"type":"object","required":["domain_id","domain_name","restricted","datasets","summary","cells"],"title":"GovernanceDomainRowOut"},"GovernanceGroupOut":{"properties":{"code":{"type":"string","enum":["coverage","resolution","sla","adoption","quality","incidents","usage"],"title":"Code"},"label":{"type":"string","title":"Label"}},"type":"object","required":["code","label"],"title":"GovernanceGroupOut"},"GovernanceKpiOut":{"properties":{"code":{"type":"string","title":"Code","description":"Código estável do KPI (ex.: `ownership_pct`, `score_validity`)."},"group":{"type":"string","enum":["coverage","resolution","sla","adoption","quality","incidents","usage"],"title":"Group"},"unit":{"type":"string","enum":["pct","hours","count","score"],"title":"Unit"},"direction":{"type":"string","enum":["higher","lower"],"title":"Direction"},"history":{"type":"string","enum":["derived","snapshot"],"title":"History","description":"`derived` reconstituído dos carimbos; `snapshot` do fecho mensal."},"label":{"type":"string","title":"Label"},"definition":{"type":"string","title":"Definition"},"dimension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"None = nada medido."},"sample":{"type":"integer","title":"Sample","description":"O que sustenta o valor: datasets, problemas, decisões ou dataset-dias."},"window":{"type":"string","enum":["last_30d","now"],"title":"Window"},"previous":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Previous"},"previous_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Key","description":"`prior_30d` (fluxo) ou o mês (YYYY-MM) do fecho anterior."},"delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta"},"target":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target"},"target_source":{"type":"string","enum":["workspace","organization","domain_sla","default","none"],"title":"Target Source"},"status":{"type":"string","enum":["on_target","at_risk","off_target","no_data","no_target"],"title":"Status"},"gap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gap","description":"Folga (+) ou falta (−) face à meta, na unidade."},"trend":{"items":{"$ref":"#/components/schemas/GovernanceTrendPointOut"},"type":"array","title":"Trend"}},"type":"object","required":["code","group","unit","direction","history","label","definition","sample","window","target_source","status","trend"],"title":"GovernanceKpiOut"},"GovernanceOut":{"properties":{"scope":{"type":"string","enum":["workspace","domain"],"title":"Scope"},"scope_id":{"type":"string","title":"Scope Id"},"scope_name":{"type":"string","title":"Scope Name"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"months":{"type":"integer","title":"Months"},"window_days":{"type":"integer","title":"Window Days"},"periods":{"items":{"$ref":"#/components/schemas/GovernancePeriodOut"},"type":"array","title":"Periods"},"datasets_total":{"type":"integer","title":"Datasets Total"},"summary":{"$ref":"#/components/schemas/GovernanceSummaryOut"},"groups":{"items":{"$ref":"#/components/schemas/GovernanceGroupOut"},"type":"array","title":"Groups"},"kpis":{"items":{"$ref":"#/components/schemas/GovernanceKpiOut"},"type":"array","title":"Kpis"},"domains":{"items":{"$ref":"#/components/schemas/GovernanceDomainRowOut"},"type":"array","title":"Domains"},"trend_available":{"type":"boolean","title":"Trend Available"},"snapshots_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshots Since","description":"Primeiro mês com fecho mensal (cobertura e uso)."},"targets":{"items":{"$ref":"#/components/schemas/GovernanceTargetRowOut"},"type":"array","title":"Targets"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"sla":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sla"}},"type":"object","required":["scope","scope_id","scope_name","as_of","months","window_days","periods","datasets_total","summary","groups","kpis","domains","trend_available","targets"],"title":"GovernanceOut","description":"Painel de eficácia do programa de governação (cartão #274): KPIs com meta,\nsemáforo, variação e tendência mensal; no workspace, a matriz por domínio e\nas metas (workspace → organização → omissão)."},"GovernancePeriodOut":{"properties":{"period_key":{"type":"string","title":"Period Key"},"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"partial":{"type":"boolean","title":"Partial"}},"type":"object","required":["period_key","start","end","partial"],"title":"GovernancePeriodOut"},"GovernanceSummaryOut":{"properties":{"on_target":{"type":"integer","title":"On Target"},"at_risk":{"type":"integer","title":"At Risk"},"off_target":{"type":"integer","title":"Off Target"},"no_data":{"type":"integer","title":"No Data"},"no_target":{"type":"integer","title":"No Target"},"judged":{"type":"integer","title":"Judged","description":"KPIs com valor e meta."},"on_target_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"On Target Pct"}},"type":"object","required":["on_target","at_risk","off_target","no_data","no_target","judged"],"title":"GovernanceSummaryOut"},"GovernanceTargetRowOut":{"properties":{"code":{"type":"string","title":"Code"},"workspace":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Workspace"},"organization":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Organization"},"default":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Default"},"effective":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective"},"source":{"type":"string","enum":["workspace","organization","domain_sla","default","none"],"title":"Source"}},"type":"object","required":["code","source"],"title":"GovernanceTargetRowOut"},"GovernanceTrendPointOut":{"properties":{"period_key":{"type":"string","title":"Period Key","description":"Mês UTC (YYYY-MM)."},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"partial":{"type":"boolean","title":"Partial","description":"Mês corrente: medido até agora."}},"type":"object","required":["period_key","partial"],"title":"GovernanceTrendPointOut"},"GraphDatasetOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer","description":"Camada medallion (bronze, silver, gold) ou null."}},"type":"object","required":["id","name","layer"],"title":"GraphDatasetOut","description":"Dataset de partida de uma consulta ao grafo."},"GraphDatasetRefOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"GraphDatasetRefOut","description":"Dataset por id e nome."},"GraphDomainOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"GraphDomainOut","description":"Domínio por id e nome."},"GraphEdgeOut":{"properties":{"from":{"type":"string","title":"From","description":"Nome do dataset a montante."},"to":{"type":"string","title":"To","description":"Nome do dataset a jusante."},"kinds":{"items":{"type":"string"},"type":"array","title":"Kinds","description":"Origens da ligação, a mais forte primeiro."},"via_columns":{"items":{"type":"string"},"type":"array","title":"Via Columns","description":"Colunas de ligação (vazio com um dataset restrito)."},"columns":{"items":{"type":"string"},"type":"array","title":"Columns","description":"Mapa de colunas «a → b» (vazio com um dataset restrito)."}},"type":"object","required":["from","to","kinds","via_columns","columns"],"title":"GraphEdgeOut","description":"Ligação entre dois datasets, com as origens e o mapa de colunas."},"GraphExposureOut":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"maturity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maturity"},"depth":{"type":"integer","title":"Depth"},"via_dataset":{"type":"string","title":"Via Dataset","description":"Dataset por onde o impacto chega ao consumidor."},"node":{"anyOf":[{"type":"string","const":"consumer"},{"type":"null"}],"title":"Node","description":"Só presente num consumidor registado."},"consumptions_7d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Consumptions 7D","description":"Só presente num consumidor registado."},"last_decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Decision","description":"Só presente num consumidor registado."}},"type":"object","required":["name","type","maturity","depth","via_dataset"],"title":"GraphExposureOut","description":"Consumidor a jusante, só por nome: exposure dbt ou consumidor registado."},"GraphFindFiltersOut":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"domain":{"anyOf":[{"$ref":"#/components/schemas/GraphDomainOut"},{"type":"null"}]},"has_pii":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Pii"},"min_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Score"},"usage_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage Class"}},"type":"object","title":"GraphFindFiltersOut","description":"Filtros aplicados; só os que foram dados."},"GraphFindOut":{"properties":{"filters":{"$ref":"#/components/schemas/GraphFindFiltersOut"},"total":{"type":"integer","title":"Total"},"truncated":{"type":"boolean","title":"Truncated"},"datasets":{"items":{"$ref":"#/components/schemas/GraphFoundDatasetOut"},"type":"array","title":"Datasets"}},"type":"object","required":["filters","total","truncated","datasets"],"title":"GraphFindOut","description":"Resultado da pesquisa composta no catálogo."},"GraphFoundDatasetOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"usage_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage Class"},"pii_columns":{"items":{"type":"string"},"type":"array","title":"Pii Columns","description":"Nomes das colunas com dados pessoais."}},"type":"object","required":["id","name","layer","score","usage_class","pii_columns"],"title":"GraphFoundDatasetOut","description":"Dataset que cumpre todos os filtros."},"GraphImpactedColumnOut":{"properties":{"dataset":{"type":"string","title":"Dataset"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"from":{"type":"string","title":"From","description":"Coluna de onde deriva («dataset.coluna»)."},"transform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transform"},"depth":{"type":"integer","title":"Depth"}},"type":"object","required":["dataset","column","from","transform","depth"],"title":"GraphImpactedColumnOut","description":"Coluna a jusante que deriva da coluna pedida."},"GraphImpactedDatasetOut":{"properties":{"id":{"type":"string","title":"Id","description":"Id do dataset; num dataset restrito, um id opaco."},"name":{"type":"string","title":"Name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"restricted":{"type":"boolean","title":"Restricted","description":"Só presente (true) num dataset a que quem pede não tem acesso.","default":false},"depth":{"type":"integer","title":"Depth"},"kind":{"type":"string","title":"Kind","description":"Origem da ligação por onde o impacto chega."},"via_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via Column"}},"type":"object","required":["id","name","layer","depth","kind","via_column"],"title":"GraphImpactedDatasetOut","description":"Dataset a jusante afetado por uma mudança."},"GraphNeighbourOut":{"properties":{"id":{"type":"string","title":"Id","description":"Id do dataset; num dataset restrito, um id opaco."},"name":{"type":"string","title":"Name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"restricted":{"type":"boolean","title":"Restricted","description":"Só presente (true) num dataset a que quem pede não tem acesso.","default":false},"depth":{"type":"integer","title":"Depth","description":"Saltos a partir do dataset de partida."},"path":{"type":"string","title":"Path","description":"Caminho no sentido do fluxo dos dados («A → B → C»)."}},"type":"object","required":["id","name","layer","depth","path"],"title":"GraphNeighbourOut","description":"Dataset a montante ou a jusante, até ao número de saltos pedido."},"HealthOut":{"properties":{"status":{"type":"string","title":"Status"},"env":{"type":"string","title":"Env"},"version":{"type":"string","title":"Version"},"build_sha":{"type":"string","title":"Build Sha"},"api_version":{"type":"string","title":"Api Version","description":"Versão da API pública (changelog de developers), com semver próprio.","examples":["1.18.0"]}},"type":"object","required":["status","env","version","build_sha","api_version"],"title":"HealthOut"},"IdeColumnProfileOut":{"properties":{"name":{"type":"string","title":"Name"},"data_type":{"type":"string","title":"Data Type"},"null_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Null Pct"},"distinct_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Count"},"classification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classification","description":"Nível de sensibilidade; nulo = sem classificação."},"pii":{"type":"boolean","title":"Pii"},"profiled":{"type":"boolean","title":"Profiled","description":"Se o último perfil trouxe métricas desta coluna."}},"type":"object","required":["name","data_type","null_pct","distinct_count","classification","pii","profiled"],"title":"IdeColumnProfileOut","description":"Perfil de uma coluna para o hover, sem valores."},"IdeDatasetColumnsOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"columns":{"items":{"$ref":"#/components/schemas/IdeColumnProfileOut"},"type":"array","title":"Columns"}},"type":"object","required":["dataset_id","columns"],"title":"IdeDatasetColumnsOut"},"IdeDatasetSummaryOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"schema_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Name"},"table_name":{"type":"string","title":"Table Name"},"connection_name":{"type":"string","title":"Connection Name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer","description":"Camada medallion detetada pelo nome."},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"trust_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trust Score"},"trust_grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trust Grade"},"open_issues":{"type":"integer","title":"Open Issues"},"open_issues_by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"Open Issues By Severity"},"contract_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Version","description":"Número do contrato ativo; nulo = sem contrato."},"has_pii":{"type":"boolean","title":"Has Pii"},"pii_columns":{"items":{"type":"string"},"type":"array","title":"Pii Columns"},"policy_status":{"type":"string","enum":["off","pass","warn","fail"],"title":"Policy Status"},"policy_violations":{"items":{"$ref":"#/components/schemas/PolicyViolationOut"},"type":"array","title":"Policy Violations"}},"type":"object","required":["id","name","schema_name","table_name","connection_name","layer","score","trust_score","trust_grade","open_issues","open_issues_by_severity","contract_version","has_pii","pii_columns","policy_status","policy_violations"],"title":"IdeDatasetSummaryOut","description":"Resumo de qualidade de uma tabela referenciada no código. Só metadados."},"IdeRefResolutionOut":{"properties":{"ref":{"type":"string","title":"Ref"},"dataset":{"anyOf":[{"$ref":"#/components/schemas/IdeDatasetSummaryOut"},{"type":"null"}],"description":"Nulo = a referência não resolve."},"ambiguous":{"type":"boolean","title":"Ambiguous","description":"A mesma tabela existe em mais de um schema."},"candidates":{"items":{"type":"string"},"type":"array","title":"Candidates"}},"type":"object","required":["ref","dataset","ambiguous","candidates"],"title":"IdeRefResolutionOut"},"IdeResolveOut":{"properties":{"results":{"items":{"$ref":"#/components/schemas/IdeRefResolutionOut"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"IdeResolveOut"},"ImpactNodeOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"depth":{"type":"integer","title":"Depth"},"issue_count":{"type":"integer","title":"Issue Count"},"impact":{"anyOf":[{"type":"string","enum":["column","table"]},{"type":"null"}],"title":"Impact"},"via_columns":{"items":{"type":"string"},"type":"array","title":"Via Columns"}},"type":"object","required":["dataset_id","name","depth","issue_count"],"title":"ImpactNodeOut","description":"Nó da árvore de impacto (pré-ordem; `depth` para indentar)."},"ImpactedDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"depth":{"type":"integer","title":"Depth"},"via_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via Column"},"kind":{"type":"string","title":"Kind"},"restricted":{"type":"boolean","title":"Restricted","default":false}},"type":"object","required":["dataset_id","name","depth","kind"],"title":"ImpactedDatasetOut"},"ImpactedExposureOut":{"properties":{"id":{"type":"string","title":"Id"},"node":{"type":"string","enum":["exposure","consumer"],"title":"Node","default":"exposure"},"unique_id":{"type":"string","title":"Unique Id"},"name":{"type":"string","title":"Name"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"display_name":{"type":"string","title":"Display Name"},"type":{"type":"string","title":"Type"},"type_label":{"type":"string","title":"Type Label"},"maturity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maturity"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"depth":{"type":"integer","title":"Depth"},"direct":{"type":"boolean","title":"Direct"},"via_dataset_id":{"type":"string","title":"Via Dataset Id"},"via_dataset_name":{"type":"string","title":"Via Dataset Name"},"path":{"items":{"type":"string"},"type":"array","title":"Path"},"framework":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"},"consumptions_7d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Consumptions 7D"},"last_decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Decision"},"last_consumed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Consumed At"}},"type":"object","required":["id","unique_id","name","display_name","type","type_label","depth","direct","via_dataset_id","via_dataset_name","path"],"title":"ImpactedExposureOut","description":"Consumidor afetado — nó-folha da linhagem: exposure dbt (cartão #107) ou\nconsumidor registado pela Trust API (cartão #166, `node: consumer`)."},"IncidentIssueOut":{"properties":{"id":{"type":"string","title":"Id"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"title":{"type":"string","title":"Title"},"type":{"type":"string","title":"Type"},"severity":{"type":"string","title":"Severity"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","dataset_id","dataset_name","title","type","severity","status","created_at"],"title":"IncidentIssueOut"},"IncidentOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"root_dataset_id":{"type":"string","title":"Root Dataset Id"},"root_dataset_name":{"type":"string","title":"Root Dataset Name"},"root_issue_id":{"type":"string","title":"Root Issue Id"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"status":{"type":"string","title":"Status"},"severity":{"type":"string","title":"Severity"},"issue_count":{"type":"integer","title":"Issue Count"},"dataset_count":{"type":"integer","title":"Dataset Count"},"issues":{"items":{"$ref":"#/components/schemas/IncidentIssueOut"},"type":"array","title":"Issues"},"impact_tree":{"items":{"$ref":"#/components/schemas/ImpactNodeOut"},"type":"array","title":"Impact Tree"},"exposures":{"items":{"$ref":"#/components/schemas/ImpactedExposureOut"},"type":"array","title":"Exposures","default":[]},"impact_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Summary"},"diagnosis_report_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Diagnosis Report Id"},"diagnosis_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Diagnosis Status"},"impact_scope":{"type":"string","enum":["column","table","none"],"title":"Impact Scope","default":"table"},"impact_columns":{"items":{"type":"string"},"type":"array","title":"Impact Columns"},"impact_note":{"anyOf":[{"type":"string","const":"no_column_lineage"},{"type":"null"}],"title":"Impact Note"},"downstream_count":{"type":"integer","title":"Downstream Count","default":0},"downstream_column_count":{"type":"integer","title":"Downstream Column Count","default":0},"exposures_count":{"type":"integer","title":"Exposures Count","default":0}},"type":"object","required":["id","title","root_dataset_id","root_dataset_name","root_issue_id","started_at","last_seen_at","status","severity","issue_count","dataset_count","issues","impact_tree"],"title":"IncidentOut","description":"Incidente derivado: sem tabela própria, estado vem das issues agrupadas."},"IncrementalProfilingOut":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"supported":{"type":"boolean","title":"Supported"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"detected_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detected Column"},"candidates":{"items":{"type":"string"},"type":"array","title":"Candidates"},"min_rows":{"type":"integer","title":"Min Rows"},"full_every":{"type":"integer","title":"Full Every"},"last":{"anyOf":[{"$ref":"#/components/schemas/IncrementalStateOut"},{"type":"null"}]}},"type":"object","required":["enabled","supported","min_rows","full_every"],"title":"IncrementalProfilingOut","description":"Perfil incremental do dataset: configuração, limiares e último estado."},"IncrementalStateOut":{"properties":{"mode":{"type":"string","title":"Mode"},"reason":{"type":"string","title":"Reason"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"watermark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Watermark"},"since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"},"window_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Window Rows"},"runs_since_full":{"type":"integer","title":"Runs Since Full","default":0},"baseline":{"type":"boolean","title":"Baseline","default":false},"estimated_distinct":{"items":{"type":"string"},"type":"array","title":"Estimated Distinct"},"missing_sketches":{"items":{"type":"string"},"type":"array","title":"Missing Sketches"},"profiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profiled At"}},"type":"object","required":["mode","reason"],"title":"IncrementalStateOut","description":"Como foi feito o último perfil: `mode` full|incremental e porquê (`reason`)."},"IssueBoardCellOut":{"properties":{"status":{"type":"string","title":"Status"},"assignee_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Id"},"assignee_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["status","count"],"title":"IssueBoardCellOut"},"IssueBoardOut":{"properties":{"total":{"type":"integer","title":"Total"},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status"},"cells":{"items":{"$ref":"#/components/schemas/IssueBoardCellOut"},"type":"array","title":"Cells"},"team_cells":{"items":{"$ref":"#/components/schemas/IssueBoardTeamCellOut"},"type":"array","title":"Team Cells"}},"type":"object","required":["total","by_status","cells"],"title":"IssueBoardOut","description":"Contadores do board de atividades: estado × responsável e estado × equipa."},"IssueBoardTeamCellOut":{"properties":{"status":{"type":"string","title":"Status"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["status","count"],"title":"IssueBoardTeamCellOut"},"IssueEventOut":{"properties":{"id":{"type":"string","title":"Id"},"field":{"type":"string","title":"Field"},"from_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Value"},"to_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Value"},"from_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Label"},"to_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Label"},"actor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Id"},"actor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Name"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","field","created_at"],"title":"IssueEventOut","description":"Um passo do rasto de um issue (Atividades v1)."},"IssueImpactOut":{"properties":{"issue_id":{"type":"string","title":"Issue Id"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"downstream":{"items":{"$ref":"#/components/schemas/ImpactedDatasetOut"},"type":"array","title":"Downstream"},"exposures":{"items":{"$ref":"#/components/schemas/ImpactedExposureOut"},"type":"array","title":"Exposures"},"external":{"items":{"$ref":"#/components/schemas/ExternalLineageNodeOut"},"type":"array","title":"External"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"}},"type":"object","required":["issue_id","downstream","exposures"],"title":"IssueImpactOut","description":"Impacto de uma issue: datasets a jusante e consumidores que parte."},"IssueOut":{"properties":{"id":{"type":"string","title":"Id"},"workspace_id":{"type":"string","title":"Workspace Id"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"type":{"type":"string","title":"Type"},"subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"impact":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Impact"},"status":{"type":"string","title":"Status"},"assignee_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Id"},"assignee_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Name"},"assignee_team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Team Id"},"assignee_team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Team Name"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"snoozed_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Snoozed Until"},"resolution_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolution Reason"},"sla_breached_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sla Breached At","description":"Quando o issue passou o alvo do SLA de resolução da sua severidade (null = dentro do SLA ou sem alvo). Fica depois de resolver."},"external_ticket_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ticket Url","description":"Depreciado desde a API 1.36.0 — usa `tickets`. URL do primeiro ticket externo ligado ao issue; deixa de vir numa major, não antes de 2027-04-05.","deprecated":true},"tickets":{"items":{"$ref":"#/components/schemas/ExternalTicketOut"},"type":"array","title":"Tickets"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"regression_suggestion":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Regression Suggestion"},"dimension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension","description":"Dimensão de qualidade do issue pelo mapa determinístico (cartão #264).","readOnly":true}},"type":"object","required":["id","workspace_id","type","severity","title","status","created_at","updated_at","dimension"],"title":"IssueOut","examples":[{"id":"633445a5-08d4-4e5f-9293-06e2b8b4f0b4","workspace_id":"ca9db29d-42e0-44ee-949f-a614099dd16b","dataset_id":"b458276a-6941-49e1-beb7-e361162c6e72","dataset_name":"produtos","scan_id":"4569088f-7057-46dd-a5b2-15c744b4a33f","type":"rule_violation","subtype":"not_null","severity":"warning","title":"Nulos acima do limite em produtos.preco","description":"A regra 'not_null' falhou na última verificação. Valor observado: 6.25. Limite definido: 5.0.","impact":null,"status":"open","assignee_id":null,"assignee_name":null,"assignee_team_id":null,"assignee_team_name":null,"due_date":null,"snoozed_until":null,"resolution_reason":null,"sla_breached_at":null,"external_ticket_url":null,"tickets":[],"created_at":"2026-10-11T05:54:48.106294","updated_at":"2026-10-11T05:54:48.106295","resolved_at":null,"regression_suggestion":null,"dimension":"completeness"}]},"IssueSeverityCountsOut":{"properties":{"critical":{"type":"integer","title":"Critical"},"warning":{"type":"integer","title":"Warning"},"info":{"type":"integer","title":"Info"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["critical","warning","info","total"],"title":"IssueSeverityCountsOut","description":"Issues abertos ou reconhecidos por severidade, e o total."},"IssueStatus":{"type":"string","enum":["open","acknowledged","resolved","ignored"],"title":"IssueStatus"},"IssueType":{"type":"string","enum":["rule_violation","duplicates","schema_drift","schema_change","anomaly","auto_monitor","document","reported","engineering","cost_anomaly","label_quality","unused_dataset","dbt_divergence","metric_drift","policy_violation","slo_breach","matching","pipeline_sync","bi_refresh"],"title":"IssueType"},"KnowledgeEntryOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"body":{"type":"string","title":"Body"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"source_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ref"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"created_by":{"type":"string","title":"Created By"},"outdated":{"type":"boolean","title":"Outdated"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"ai_generated":{"type":"boolean","title":"Ai Generated","default":false},"disclaimer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disclaimer"}},"type":"object","required":["id","kind","title","body","created_by","outdated","created_at","updated_at"],"title":"KnowledgeEntryOut"},"KnowledgeKind":{"type":"string","enum":["report","rca","resolution","decision","note"],"title":"KnowledgeKind","description":"Tipo de entrada da base de conhecimento."},"LabelQualityOut":{"properties":{"available":{"type":"boolean","title":"Available"},"install_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Install Hint"},"label_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label Column"},"feature_columns":{"items":{"type":"string"},"type":"array","title":"Feature Columns"},"pii_columns":{"items":{"type":"string"},"type":"array","title":"Pii Columns"},"pii_confirmed":{"type":"boolean","title":"Pii Confirmed","default":false},"pii_confirmed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pii Confirmed At"},"pii_confirmed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pii Confirmed By"},"max_features":{"type":"integer","title":"Max Features"},"last_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Last Result"}},"type":"object","required":["available","max_features"],"title":"LabelQualityOut","description":"Estado da qualidade de rótulos de um dataset."},"LineageColumnMapOut":{"properties":{"upstream_column":{"type":"string","title":"Upstream Column"},"downstream_column":{"type":"string","title":"Downstream Column"},"transform":{"type":"string","title":"Transform"},"confidence":{"type":"string","title":"Confidence"},"expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expression"}},"type":"object","required":["upstream_column","downstream_column","transform","confidence","expression"],"title":"LineageColumnMapOut","description":"Ligação coluna a coluna numa aresta de linhagem."},"LineageConsumerLeafOut":{"properties":{"id":{"type":"string","title":"Id"},"node":{"type":"string","const":"consumer","title":"Node"},"unique_id":{"type":"string","title":"Unique Id"},"name":{"type":"string","title":"Name"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"display_name":{"type":"string","title":"Display Name"},"type":{"type":"string","title":"Type"},"type_label":{"type":"string","title":"Type Label"},"maturity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maturity"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"framework":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"},"consumptions_7d":{"type":"integer","title":"Consumptions 7D"},"last_decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Decision"},"last_consumed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Consumed At"},"depth":{"type":"integer","title":"Depth"},"direct":{"type":"boolean","title":"Direct"},"via_dataset_id":{"type":"string","title":"Via Dataset Id"},"via_dataset_name":{"type":"string","title":"Via Dataset Name"},"path":{"items":{"type":"string"},"type":"array","title":"Path"}},"type":"object","required":["id","node","unique_id","name","label","display_name","type","type_label","maturity","owner_name","owner_email","url","description","framework","consumptions_7d","last_decision","last_consumed_at","depth","direct","via_dataset_id","via_dataset_name","path"],"title":"LineageConsumerLeafOut","description":"Consumidor registado (agente, aplicação, pipeline) que leu o dataset."},"LineageExposureLeafOut":{"properties":{"id":{"type":"string","title":"Id"},"node":{"type":"string","const":"exposure","title":"Node"},"unique_id":{"type":"string","title":"Unique Id"},"name":{"type":"string","title":"Name"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"display_name":{"type":"string","title":"Display Name"},"type":{"type":"string","title":"Type"},"type_label":{"type":"string","title":"Type Label"},"maturity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Maturity"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"depth":{"type":"integer","title":"Depth"},"direct":{"type":"boolean","title":"Direct"},"via_dataset_id":{"type":"string","title":"Via Dataset Id"},"via_dataset_name":{"type":"string","title":"Via Dataset Name"},"path":{"items":{"type":"string"},"type":"array","title":"Path"}},"type":"object","required":["id","node","unique_id","name","label","display_name","type","type_label","maturity","owner_name","owner_email","url","description","depth","direct","via_dataset_id","via_dataset_name","path"],"title":"LineageExposureLeafOut","description":"Exposure dbt (dashboard, app, notebook) que depende do dataset."},"LineageExternalOut":{"properties":{"upstream":{"items":{"$ref":"#/components/schemas/ExternalLineageNodeOut"},"type":"array","title":"Upstream"},"downstream":{"items":{"$ref":"#/components/schemas/ExternalLineageNodeOut"},"type":"array","title":"Downstream"}},"type":"object","required":["upstream","downstream"],"title":"LineageExternalOut","description":"Nós fora dos nossos datasets vistos no OpenLineage do cliente."},"LineageImpactOut":{"properties":{"dataset":{"$ref":"#/components/schemas/GraphDatasetOut"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"downstream":{"items":{"$ref":"#/components/schemas/GraphImpactedDatasetOut"},"type":"array","title":"Downstream"},"exposures":{"items":{"$ref":"#/components/schemas/GraphExposureOut"},"type":"array","title":"Exposures"},"external":{"items":{"type":"string"},"type":"array","title":"External","description":"Destinos fora do warehouse, vistos no OpenLineage."},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"truncated":{"type":"boolean","title":"Truncated"},"max_depth":{"type":"integer","title":"Max Depth"},"exposure_max_depth":{"type":"integer","title":"Exposure Max Depth"},"column_lineage":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Column Lineage","description":"Só presente quando se pede uma coluna."},"columns":{"items":{"$ref":"#/components/schemas/GraphImpactedColumnOut"},"type":"array","title":"Columns","description":"Só presente quando se pede uma coluna."}},"type":"object","required":["dataset","column","downstream","exposures","external","summary","truncated","max_depth","exposure_max_depth"],"title":"LineageImpactOut","description":"O que parte se o dataset (ou uma coluna dele) mudar."},"LineageNeighbourOut":{"properties":{"edge_id":{"type":"string","title":"Edge Id"},"dataset_id":{"type":"string","title":"Dataset Id","description":"Id do dataset; num dataset restrito, um id opaco."},"name":{"type":"string","title":"Name"},"via_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via Column"},"kind":{"type":"string","title":"Kind"},"columns":{"items":{"$ref":"#/components/schemas/LineageColumnMapOut"},"type":"array","title":"Columns"},"restricted":{"type":"boolean","title":"Restricted","description":"Só presente (true) num dataset a que quem pede não tem acesso.","default":false}},"type":"object","required":["edge_id","dataset_id","name","via_column","kind","columns"],"title":"LineageNeighbourOut","description":"Vizinho direto na linhagem (fonte ou dependente)."},"LineagePathOut":{"properties":{"source":{"$ref":"#/components/schemas/GraphDatasetRefOut"},"target":{"$ref":"#/components/schemas/GraphDatasetRefOut"},"max_hops":{"type":"integer","title":"Max Hops"},"found":{"type":"boolean","title":"Found"},"direction":{"anyOf":[{"type":"string","enum":["source_to_target","target_to_source"]},{"type":"null"}],"title":"Direction"},"hops":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hops"},"path":{"items":{"type":"string"},"type":"array","title":"Path"},"path_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Text"},"edges":{"items":{"$ref":"#/components/schemas/GraphEdgeOut"},"type":"array","title":"Edges"}},"type":"object","required":["source","target","max_hops","found","direction","hops","path","path_text","edges"],"title":"LineagePathOut","description":"Caminho mais curto entre dois datasets, no sentido do fluxo dos dados."},"LineageSankeyOut":{"properties":{"columns":{"items":{"$ref":"#/components/schemas/SankeyColumnOut"},"type":"array","title":"Columns"},"nodes":{"items":{"$ref":"#/components/schemas/SankeyNodeOut"},"type":"array","title":"Nodes"},"links":{"items":{"$ref":"#/components/schemas/SankeyLinkOut"},"type":"array","title":"Links"},"warnings":{"items":{"$ref":"#/components/schemas/SankeyWarningOut"},"type":"array","title":"Warnings"},"truncated":{"type":"boolean","title":"Truncated"}},"type":"object","required":["columns","nodes","links","warnings","truncated"],"title":"LineageSankeyOut"},"LineageTraverseOut":{"properties":{"dataset":{"$ref":"#/components/schemas/GraphDatasetOut"},"direction":{"type":"string","enum":["upstream","downstream","both"],"title":"Direction"},"hops":{"type":"integer","title":"Hops"},"upstream":{"items":{"$ref":"#/components/schemas/GraphNeighbourOut"},"type":"array","title":"Upstream","description":"Ausente com direction=downstream."},"downstream":{"items":{"$ref":"#/components/schemas/GraphNeighbourOut"},"type":"array","title":"Downstream","description":"Ausente com direction=upstream."},"edges":{"items":{"$ref":"#/components/schemas/GraphEdgeOut"},"type":"array","title":"Edges"},"exposures":{"items":{"$ref":"#/components/schemas/GraphExposureOut"},"type":"array","title":"Exposures","description":"Ausente com direction=upstream."},"truncated":{"type":"boolean","title":"Truncated"}},"type":"object","required":["dataset","direction","hops","edges","truncated"],"title":"LineageTraverseOut","description":"Vizinhança de linhagem do dataset até 3 saltos, com tetos de datasets e arestas."},"ManagementDashboardOut":{"properties":{"score_trend":{"items":{"$ref":"#/components/schemas/ScoreTrendPoint"},"type":"array","title":"Score Trend"},"issues_opened_vs_resolved":{"items":{"$ref":"#/components/schemas/OpenedResolvedPoint"},"type":"array","title":"Issues Opened Vs Resolved"},"hours_saved_month":{"type":"number","title":"Hours Saved Month"},"cost_of_poor_quality_eur_month":{"type":"number","title":"Cost Of Poor Quality Eur Month"},"datasets_by_health":{"additionalProperties":{"type":"integer"},"type":"object","title":"Datasets By Health"},"recommendation_adoption":{"$ref":"#/components/schemas/RecommendationAdoption"}},"type":"object","required":["score_trend","issues_opened_vs_resolved","hours_saved_month","cost_of_poor_quality_eur_month","datasets_by_health","recommendation_adoption"],"title":"ManagementDashboardOut"},"MedallionLayer":{"type":"string","enum":["bronze","silver","gold"],"title":"MedallionLayer"},"MetadataCheckCountOut":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"dimension":{"type":"string","enum":["completeness","timeliness","consistency"],"title":"Dimension"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"not_applicable":{"type":"integer","title":"Not Applicable"},"coverage_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coverage Pct","description":"% dos datasets aplicáveis que cumprem (None sem aplicáveis)."}},"type":"object","required":["code","label","dimension","passed","failed","not_applicable"],"title":"MetadataCheckCountOut"},"MetadataCheckOut":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"dimension":{"type":"string","enum":["completeness","timeliness","consistency"],"title":"Dimension"},"status":{"type":"string","enum":["passed","failed","not_applicable"],"title":"Status"},"applicable":{"type":"boolean","title":"Applicable"},"passed":{"type":"boolean","title":"Passed"},"severity":{"type":"string","title":"Severity"},"detail":{"type":"string","title":"Detail"},"issue_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Code"},"link":{"type":"string","title":"Link"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["code","label","dimension","status","applicable","passed","severity","detail","link","endpoint"],"title":"MetadataCheckOut"},"MetadataDatasetDomainOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"}},"type":"object","required":["domain_id","domain_name"],"title":"MetadataDatasetDomainOut"},"MetadataDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"},"issue_codes":{"items":{"type":"string"},"type":"array","title":"Issue Codes"},"domains":{"items":{"$ref":"#/components/schemas/MetadataDatasetDomainOut"},"type":"array","title":"Domains"},"checks":{"items":{"$ref":"#/components/schemas/MetadataCheckOut"},"type":"array","title":"Checks"}},"type":"object","required":["dataset_id","dataset_name","met","applicable","issue_codes","checks"],"title":"MetadataDatasetOut"},"MetadataDimensionOut":{"properties":{"code":{"type":"string","enum":["completeness","timeliness","consistency"],"title":"Code"},"label":{"type":"string","title":"Label"},"pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"}},"type":"object","required":["code","label","met","applicable"],"title":"MetadataDimensionOut"},"MetadataDomainRowOut":{"properties":{"domain_id":{"type":"string","title":"Domain Id"},"domain_name":{"type":"string","title":"Domain Name"},"restricted":{"type":"boolean","title":"Restricted"},"pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"},"datasets":{"type":"integer","title":"Datasets"},"target":{"$ref":"#/components/schemas/MetadataTargetOut"},"checks":{"items":{"$ref":"#/components/schemas/MetadataCheckCountOut"},"type":"array","title":"Checks"}},"type":"object","required":["domain_id","domain_name","restricted","met","applicable","datasets","target","checks"],"title":"MetadataDomainRowOut"},"MetadataFindingOut":{"properties":{"code":{"type":"string","title":"Code"},"label":{"type":"string","title":"Label"},"check":{"type":"string","title":"Check"},"dimension":{"type":"string","enum":["completeness","timeliness","consistency"],"title":"Dimension"},"severity":{"type":"string","title":"Severity"},"failed":{"type":"integer","title":"Failed"},"datasets":{"items":{"type":"string"},"type":"array","title":"Datasets"},"suggestions":{"items":{"$ref":"#/components/schemas/MetadataSuggestionOut"},"type":"array","title":"Suggestions"}},"type":"object","required":["code","label","check","dimension","severity","failed","datasets","suggestions"],"title":"MetadataFindingOut"},"MetadataQualityOut":{"properties":{"scope":{"type":"string","enum":["workspace","domain"],"title":"Scope"},"scope_id":{"type":"string","title":"Scope Id"},"scope_name":{"type":"string","title":"Scope Name"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"},"datasets_total":{"type":"integer","title":"Datasets Total"},"target":{"$ref":"#/components/schemas/MetadataTargetOut"},"dimensions":{"items":{"$ref":"#/components/schemas/MetadataDimensionOut"},"type":"array","title":"Dimensions"},"checks":{"items":{"$ref":"#/components/schemas/MetadataCheckCountOut"},"type":"array","title":"Checks"},"findings":{"items":{"$ref":"#/components/schemas/MetadataFindingOut"},"type":"array","title":"Findings"},"datasets":{"items":{"$ref":"#/components/schemas/MetadataDatasetOut"},"type":"array","title":"Datasets"},"datasets_truncated":{"type":"boolean","title":"Datasets Truncated"},"domains":{"items":{"$ref":"#/components/schemas/MetadataDomainRowOut"},"type":"array","title":"Domains"},"external_catalog":{"$ref":"#/components/schemas/ExternalCatalogOut"},"trend":{"items":{"$ref":"#/components/schemas/MetadataTrendPointOut"},"type":"array","title":"Trend"},"trend_available":{"type":"boolean","title":"Trend Available"}},"type":"object","required":["scope","scope_id","scope_name","as_of","met","applicable","datasets_total","target","dimensions","checks","findings","datasets","datasets_truncated","domains","external_catalog","trend","trend_available"],"title":"MetadataQualityOut","description":"Qualidade do catálogo e dos metadados (cartão #270): completude, atualidade\ne coerência por dataset, com checks não aplicáveis fora do denominador,\nproblemas com sugestões, meta, tendência diária e o catálogo externo."},"MetadataSuggestionOut":{"properties":{"channel":{"type":"string","enum":["readme","catalog_import","manual","lineage"],"title":"Channel"},"action":{"type":"string","title":"Action"},"datasets":{"type":"integer","title":"Datasets"},"link":{"type":"string","title":"Link"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["channel","action","datasets","link","endpoint"],"title":"MetadataSuggestionOut"},"MetadataTargetOut":{"properties":{"target_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Pct"},"reached":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reached"},"gap_pp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gap Pp","description":"Pontos percentuais em falta até à meta."}},"type":"object","title":"MetadataTargetOut"},"MetadataTrendPointOut":{"properties":{"period_key":{"type":"string","title":"Period Key"},"pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct"},"met":{"type":"integer","title":"Met"},"applicable":{"type":"integer","title":"Applicable"},"datasets":{"type":"integer","title":"Datasets"}},"type":"object","required":["period_key","met","applicable","datasets"],"title":"MetadataTrendPointOut"},"MinAiReadinessRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"},"use_case":{"type":"string","title":"Use Case","default":"rag"},"threshold":{"type":"number","maximum":100,"minimum":0,"title":"Threshold","default":60}},"additionalProperties":false,"type":"object","title":"MinAiReadinessRule"},"MinScoreRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"},"threshold":{"type":"number","maximum":100,"minimum":0,"title":"Threshold","default":80}},"additionalProperties":false,"type":"object","title":"MinScoreRule"},"OpenedResolvedPoint":{"properties":{"date":{"type":"string","title":"Date"},"opened":{"type":"integer","title":"Opened"},"resolved":{"type":"integer","title":"Resolved"}},"type":"object","required":["date","opened","resolved"],"title":"OpenedResolvedPoint"},"OrchestratorRunIn":{"properties":{"source":{"type":"string","const":"airflow","title":"Source","default":"airflow"},"external_run_id":{"type":"string","maxLength":100,"minLength":1,"title":"External Run Id"},"status":{"type":"string","enum":["running","success","error","cancelled"],"title":"Status"},"connection_id":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Connection Id"},"job_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Job Id"},"job_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Job Name"},"project_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Project Name"},"environment_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Environment Name"},"status_message":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Status Message"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["external_run_id","status"],"title":"OrchestratorRunIn","description":"Run reportado por um orquestrador (v1: Airflow, via `beryx-airflow`)."},"OrchestratorRunOut":{"properties":{"id":{"type":"string","title":"Id"},"source":{"type":"string","title":"Source"},"external_run_id":{"type":"string","title":"External Run Id"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"environment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment Name"},"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","source","external_run_id","job_id","job_name","project_id","project_name","environment_name","status","status_message","connection_id","scan_id","started_at","finished_at","created_at"],"title":"OrchestratorRunOut","description":"Run de um orquestrador (dbt Cloud, dbt Core, Airflow…): só metadados."},"OrchestratorRunStatus":{"type":"string","enum":["running","success","error","cancelled"],"title":"OrchestratorRunStatus"},"OrchestratorSource":{"type":"string","enum":["dbt_cloud","airflow","fivetran","airbyte","dbt_core"],"title":"OrchestratorSource"},"OtherDimensionOut":{"properties":{"id":{"type":"string","title":"Id"},"label":{"$ref":"#/components/schemas/DimensionLabelOut"},"open_issues":{"type":"integer","title":"Open Issues"}},"type":"object","required":["id","label","open_issues"],"title":"OtherDimensionOut","description":"Dimensão sem checks no scorecard mas com issues abertos (ex.: eficiência)."},"PackRuleOut":{"properties":{"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"rule_type":{"type":"string","title":"Rule Type"},"severity":{"type":"string","title":"Severity"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rationale":{"type":"string","title":"Rationale"},"examples_valid":{"items":{"type":"string"},"type":"array","title":"Examples Valid","default":[]},"examples_invalid":{"items":{"type":"string"},"type":"array","title":"Examples Invalid","default":[]}},"type":"object","required":["key","title","rule_type","severity","params","columns","rationale"],"title":"PackRuleOut"},"ParseColumnOut":{"properties":{"column":{"type":"string","title":"Column"},"kind":{"type":"string","title":"Kind"},"locale":{"type":"string","title":"Locale"},"samples":{"type":"integer","title":"Samples"},"parsed":{"type":"integer","title":"Parsed"},"success_rate":{"type":"number","title":"Success Rate"},"confidence":{"type":"number","title":"Confidence"},"hinted":{"type":"boolean","title":"Hinted"},"components":{"additionalProperties":{"type":"number"},"type":"object","title":"Components"},"failing_masks":{"items":{"type":"string"},"type":"array","title":"Failing Masks"},"suggestion_signature":{"type":"string","title":"Suggestion Signature"}},"type":"object","required":["column","kind","locale","samples","parsed","success_rate","confidence","hinted","components","failing_masks","suggestion_signature"],"title":"ParseColumnOut","description":"Campo composto de uma coluna (cartão #386): componentes e cobertura na amostra.\n\nSem valores da amostra: os exemplos que não se decompõem vêm como máscaras\n(dígito → 9, letra → A)."},"PiiColumnOut":{"properties":{"column":{"type":"string","title":"Column"},"pii_type":{"type":"string","title":"Pii Type"},"pii_type_label":{"type":"string","title":"Pii Type Label"},"special_category":{"type":"boolean","title":"Special Category","default":false},"source":{"type":"string","title":"Source"},"evidence":{"type":"string","title":"Evidence"},"sample_matches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sample Matches"},"sample_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sample Size"},"covered":{"type":"boolean","title":"Covered","default":false},"rule_types":{"items":{"type":"string"},"type":"array","title":"Rule Types"},"quasi_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quasi Identifier"},"generalization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generalization"}},"type":"object","required":["column","pii_type","pii_type_label","source","evidence"],"title":"PiiColumnOut"},"PiiDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"connection_name":{"type":"string","title":"Connection Name"},"connector_type":{"type":"string","title":"Connector Type"},"last_profiled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Profiled At"},"pii_column_count":{"type":"integer","title":"Pii Column Count","default":0},"covered_column_count":{"type":"integer","title":"Covered Column Count","default":0},"special_category":{"type":"boolean","title":"Special Category","default":false},"types":{"additionalProperties":{"type":"integer"},"type":"object","title":"Types"},"columns":{"items":{"$ref":"#/components/schemas/PiiColumnOut"},"type":"array","title":"Columns"},"quasi_identifier_count":{"type":"integer","title":"Quasi Identifier Count","default":0},"k_min_estimate":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K Min Estimate"}},"type":"object","required":["dataset_id","dataset_name","connection_name","connector_type"],"title":"PiiDatasetOut"},"PiiGoldRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array","title":"Layers"},"mask_patterns":{"items":{"type":"string"},"type":"array","title":"Mask Patterns"}},"additionalProperties":false,"type":"object","title":"PiiGoldRule"},"PiiMapOut":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"pii_types":{"items":{"$ref":"#/components/schemas/PiiTypeOut"},"type":"array","title":"Pii Types"},"summary":{"$ref":"#/components/schemas/PiiSummaryOut"},"datasets":{"items":{"$ref":"#/components/schemas/PiiDatasetOut"},"type":"array","title":"Datasets"}},"type":"object","required":["generated_at","pii_types","summary","datasets"],"title":"PiiMapOut"},"PiiSummaryOut":{"properties":{"datasets_total":{"type":"integer","title":"Datasets Total","default":0},"datasets_profiled":{"type":"integer","title":"Datasets Profiled","default":0},"datasets_with_pii":{"type":"integer","title":"Datasets With Pii","default":0},"pii_columns":{"type":"integer","title":"Pii Columns","default":0},"special_category_columns":{"type":"integer","title":"Special Category Columns","default":0},"covered_columns":{"type":"integer","title":"Covered Columns","default":0},"coverage_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coverage Pct"},"by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Type"},"quasi_identifier_columns":{"type":"integer","title":"Quasi Identifier Columns","default":0},"min_k":{"type":"integer","title":"Min K","default":5}},"type":"object","title":"PiiSummaryOut"},"PiiTypeOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"special_category":{"type":"boolean","title":"Special Category","default":false}},"type":"object","required":["key","label"],"title":"PiiTypeOut"},"PipelineEndpointOut":{"properties":{"table":{"type":"string","title":"Table"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"age_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age S"}},"type":"object","required":["table"],"title":"PipelineEndpointOut","description":"Uma ponta do pipeline: tabela e quando foi atualizada (e há quanto tempo)."},"PipelineHealthItemOut":{"properties":{"provider":{"type":"string","title":"Provider"},"provider_label":{"type":"string","title":"Provider Label"},"integration_id":{"type":"string","title":"Integration Id"},"integration_name":{"type":"string","title":"Integration Name"},"pipeline_id":{"type":"string","title":"Pipeline Id"},"pipeline_name":{"type":"string","title":"Pipeline Name"},"status":{"type":"string","enum":["ok","failed","delayed","paused","unknown"],"title":"Status"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success At"},"last_failure_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failure At"},"last_run_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Run Message"},"expected_interval_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Interval S"},"delay_threshold_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Delay Threshold S"},"rows_synced":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rows Synced"},"pipeline_rows_synced":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pipeline Rows Synced"},"destination":{"$ref":"#/components/schemas/PipelineEndpointOut"},"source":{"$ref":"#/components/schemas/PipelineSourceOut"},"lag_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lag S"},"recon":{"anyOf":[{"$ref":"#/components/schemas/PipelineReconOut"},{"type":"null"}]},"schema_change":{"anyOf":[{"$ref":"#/components/schemas/PipelineSchemaChangeOut"},{"type":"null"}]},"synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Synced At"}},"type":"object","required":["provider","provider_label","integration_id","integration_name","pipeline_id","pipeline_name","status","destination","source"],"title":"PipelineHealthItemOut"},"PipelineReconOut":{"properties":{"source_count":{"type":"integer","title":"Source Count"},"target_count":{"type":"integer","title":"Target Count"},"delta":{"type":"integer","title":"Delta"},"delta_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Pct"},"tolerance_pct":{"type":"number","title":"Tolerance Pct"},"fail_pct":{"type":"number","title":"Fail Pct"},"status":{"type":"string","enum":["ok","warn","fail"],"title":"Status"},"method":{"type":"string","title":"Method"},"source_profiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Profiled At"},"target_profiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Profiled At"},"comparable":{"type":"boolean","title":"Comparable"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["source_count","target_count","delta","tolerance_pct","fail_pct","status","method","comparable"],"title":"PipelineReconOut","description":"RECON #16 entre os perfis mais recentes da origem e do destino."},"PipelineRunOut":{"properties":{"id":{"type":"string","title":"Id"},"source":{"type":"string","title":"Source"},"external_run_id":{"type":"string","title":"External Run Id"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"environment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment Name"},"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","source","external_run_id","status"],"title":"PipelineRunOut"},"PipelineSchemaChangeOut":{"properties":{"detected_at":{"type":"string","title":"Detected At"},"added":{"items":{"type":"string"},"type":"array","title":"Added"},"removed":{"items":{"type":"string"},"type":"array","title":"Removed"},"added_total":{"type":"integer","title":"Added Total"},"removed_total":{"type":"integer","title":"Removed Total"}},"type":"object","required":["detected_at","added","removed","added_total","removed_total"],"title":"PipelineSchemaChangeOut","description":"Tabelas que entraram/saíram do pipeline num sync (as listas são cortadas)."},"PipelineSourceOut":{"properties":{"table":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Table"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"age_s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age S"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"restricted":{"type":"boolean","title":"Restricted","default":false}},"type":"object","title":"PipelineSourceOut"},"PolicyResultOut":{"properties":{"status":{"type":"string","enum":["off","pass","warn","fail"],"title":"Status"},"rules":{"items":{"type":"string"},"type":"array","title":"Rules"},"violations":{"items":{"$ref":"#/components/schemas/PolicyViolationOut"},"type":"array","title":"Violations"}},"type":"object","required":["status","rules","violations"],"title":"PolicyResultOut","description":"Avaliação da política de dados: `off` sem regras ligadas."},"PolicyViolationOut":{"properties":{"rule":{"type":"string","title":"Rule"},"label":{"type":"string","title":"Label"},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity"},"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"message":{"type":"string","title":"Message"},"source":{"type":"string","title":"Source","description":"Quem impôs a regra: `workspace` ou `domain:<nome>`."},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"},"min_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Level"},"export":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Export"},"readme_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Readme Status"},"max_age_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Age Days"},"oldest_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Oldest Days"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Threshold"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"},"identifier_kinds":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Identifier Kinds"},"min_valid_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Valid Pct"}},"additionalProperties":true,"type":"object","required":["rule","label","severity","columns","message","source"],"title":"PolicyViolationOut","description":"Violação de uma regra da política de dados. Depois de `source` vêm os\npormenores da regra, só os que ela usa."},"PreviewItemOut":{"properties":{"rule_key":{"type":"string","title":"Rule Key"},"title":{"type":"string","title":"Title"},"rule_type":{"type":"string","title":"Rule Type"},"severity":{"type":"string","title":"Severity"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"status":{"type":"string","title":"Status"}},"type":"object","required":["rule_key","title","rule_type","severity","column","params","status"],"title":"PreviewItemOut"},"ProfileDepth":{"type":"string","enum":["basic","standard","deep"],"title":"ProfileDepth","description":"Profundidade do profiling (por scan, com teto por plano)."},"QualityCalendarOut":{"properties":{"days":{"type":"integer","title":"Days"},"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"has_history":{"type":"boolean","title":"Has History"},"cells":{"items":{"$ref":"#/components/schemas/CalendarDayOut"},"type":"array","title":"Cells"},"summary":{"$ref":"#/components/schemas/CalendarSummaryOut"}},"type":"object","required":["days","start","end","has_history","cells","summary"],"title":"QualityCalendarOut"},"RagGateRequest":{"properties":{"documents":{"items":{"$ref":"#/components/schemas/GateDocumentIn"},"type":"array","maxItems":100,"minItems":1,"title":"Documents","description":"Lote a avaliar (1–100 documentos, ≤ 2 000 000 caracteres no total)."},"dataset_id":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Dataset Id","description":"Corpus contra o qual detetar duplicados (um dataset do workspace — p.ex. o corpus documental de um bucket). Sem ele, só se deteta duplicação dentro do lote."},"dry_run":{"type":"boolean","title":"Dry Run","description":"Avalia sem registar nada no corpus. Conta para a quota mensal do plano.","default":false},"policy":{"$ref":"#/components/schemas/GatePolicyIn"}},"type":"object","required":["documents"],"title":"RagGateRequest","examples":[{"dataset_id":"3f1c7a52-9d0e-4b1f-8a57-2c1e0b9d4f11","dry_run":false,"policy":{"expected_languages":["pt"],"allowed_pii":[]},"documents":[{"id":"manuais/subestacoes-v3.md","text":"O presente manual descreve os procedimentos de manutenção…","metadata":{"modified_at":"2026-05-02T10:00:00Z","source":"sharepoint"}},{"id":"crm/nota-4411.txt","text":"Cliente ana@empresa.pt pediu a segunda via da fatura…"}]}]},"RagGateResponse":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"summary":{"$ref":"#/components/schemas/GateSummaryOut"},"registered":{"type":"integer","title":"Registered","description":"Documentos aceites registados no corpus (só hashes); 0 em dry-run ou sem `dataset_id`."},"corpus":{"$ref":"#/components/schemas/GateCorpusOut"},"quota":{"$ref":"#/components/schemas/GateQuotaOut"},"results":{"items":{"$ref":"#/components/schemas/GateResultOut"},"type":"array","title":"Results","description":"Um resultado por documento, pela ordem do lote."}},"type":"object","required":["dry_run","dataset_id","summary","registered","corpus","quota","results"],"title":"RagGateResponse","examples":[{"dry_run":false,"dataset_id":null,"summary":{"total":1,"aceitar":0,"rever":1,"rejeitar":0},"registered":0,"corpus":{"compared":0,"truncated":false,"expected_languages":[]},"quota":{"remaining_this_month":null},"results":[{"id":"faq-001","verdict":"rever","score":85,"flags":[{"code":"curto","severity":"rever","message":"Só 188 caracteres (mínimo 200) — pouco contexto para fundamentar uma resposta.","details":{"chars":188,"min_chars":200}}],"content_hash":"341565ebcff78ca4e0328dd87fb3182f4b5ad000ce2a660b4ce058d5a72c1ae1","chars":188,"language":null}]}]},"ReadinessFindingOut":{"properties":{"code":{"type":"string","title":"Code"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","dataset_id","dataset_name","message"],"title":"ReadinessFindingOut","description":"Bloqueador ou aviso com `code` estável; sem dataset quando é do data product."},"ReadmeDiffLine":{"properties":{"op":{"type":"string","title":"Op"},"text":{"type":"string","title":"Text"}},"type":"object","required":["op","text"],"title":"ReadmeDiffLine"},"RealPiiOutsideProdRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"},"min_valid_pct":{"type":"number","maximum":1,"minimum":0.5,"title":"Min Valid Pct","default":0.9}},"additionalProperties":false,"type":"object","title":"RealPiiOutsideProdRule"},"RecommendationAdoption":{"properties":{"generated":{"type":"integer","title":"Generated"},"accepted":{"type":"integer","title":"Accepted"}},"type":"object","required":["generated","accepted"],"title":"RecommendationAdoption"},"RecordFailureOut":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"rule_type":{"type":"string","title":"Rule Type"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"severity":{"type":"string","title":"Severity","description":"`critical`, `warning` ou `info`, como na regra."},"code":{"type":"string","enum":["null_value","missing_fields","pattern_mismatch","not_numeric","below_min","above_max","invalid_shape","invalid_check_digit","not_in_reference"],"title":"Code","description":"Motivo estável da falha."},"params":{"$ref":"#/components/schemas/FailureParamsOut"},"message":{"type":"string","title":"Message","description":"O motivo em pt-PT, composto a partir de `code` e `params`."}},"type":"object","required":["rule_id","rule_type","column","severity","code","params","message"],"title":"RecordFailureOut"},"RecordResultOut":{"properties":{"index":{"type":"integer","title":"Index","description":"Posição do registo no lote (a partir de 0)."},"passed":{"type":"boolean","title":"Passed","description":"Nenhuma regra falhou neste registo."},"failed_rules":{"items":{"$ref":"#/components/schemas/RecordFailureOut"},"type":"array","title":"Failed Rules"}},"type":"object","required":["index","passed","failed_rules"],"title":"RecordResultOut"},"RecordValidationRequest":{"properties":{"records":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Records","description":"Registos a validar: objetos JSON com as colunas do dataset no topo (1–5000 registos, corpo ≤ 2 MB; acima, 413). Nunca são guardados."},"rule_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":500},{"type":"null"}],"title":"Rule Ids","description":"Só estas regras do dataset (ativas). Omitido: todas as regras ativas. Um id que não seja de uma regra ativa do dataset dá 422."}},"additionalProperties":false,"type":"object","required":["records"],"title":"RecordValidationRequest","examples":[{"records":[{"nif":"123456789","email":"ana@empresa.pt"},{"nif":"123456780","email":"sem-arroba"}]}]},"RecordValidationResponse":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"verdict":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Verdict","description":"Do lote, como o veredito do gate de CI: `fail` se uma regra crítica passa da tolerância, `warn` se só outras passam, `unknown` se nenhuma regra avaliou registos."},"summary":{"$ref":"#/components/schemas/ValidationSummaryOut"},"rules":{"items":{"$ref":"#/components/schemas/RuleValidationOut"},"type":"array","title":"Rules","description":"Uma entrada por regra, pela ordem das regras."},"results":{"items":{"$ref":"#/components/schemas/RecordResultOut"},"type":"array","title":"Results","description":"Um resultado por registo, pela ordem do lote."}},"type":"object","required":["dataset_id","verdict","summary","rules","results"],"title":"RecordValidationResponse","examples":[{"dataset_id":"3f1c7a52-9d0e-4b1f-8a57-2c1e0b9d4f11","verdict":"fail","summary":{"records":2,"passed":1,"failed":1,"rules":3,"rules_evaluated":2},"rules":[{"rule_id":"9b8d6c1e-5a4f-4e2b-9c3d-7f6a5b4c3d2e","rule_type":"valid_identifier","column":"nif","severity":"critical","not_applicable_code":null,"passed":1,"failed":1,"not_applicable":0,"failed_pct":50,"threshold_pct":0,"within_threshold":false},{"rule_id":"4e3d2c1b-0a9f-4e8d-8c7b-6a5f4e3d2c1b","rule_type":"pattern","column":"email","severity":"warning","not_applicable_code":null,"passed":1,"failed":1,"not_applicable":0,"failed_pct":50,"threshold_pct":0,"within_threshold":false},{"rule_id":"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","rule_type":"unique","column":"nif","severity":"warning","not_applicable_code":"dataset_level","passed":0,"failed":0,"not_applicable":2,"failed_pct":null,"threshold_pct":0,"within_threshold":null}],"results":[{"index":0,"passed":true,"failed_rules":[]},{"index":1,"passed":false,"failed_rules":[{"rule_id":"9b8d6c1e-5a4f-4e2b-9c3d-7f6a5b4c3d2e","rule_type":"valid_identifier","column":"nif","severity":"critical","code":"invalid_check_digit","params":{"fields":[],"kind":"nif","reference":null,"min":null,"max":null},"message":"«nif» tem a forma de um NIF/NIPC, mas o dígito de controlo não bate."},{"rule_id":"4e3d2c1b-0a9f-4e8d-8c7b-6a5f4e3d2c1b","rule_type":"pattern","column":"email","severity":"warning","code":"pattern_mismatch","params":{"fields":[],"kind":null,"reference":null,"min":null,"max":null},"message":"«email» não segue o padrão da regra."}]}]}]},"ReportOut":{"properties":{"id":{"type":"string","title":"Id"},"workspace_id":{"type":"string","title":"Workspace Id"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"domain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Id"},"persona":{"type":"string","title":"Persona"},"report_type":{"type":"string","title":"Report Type"},"status":{"type":"string","title":"Status"},"content_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Md"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"Língua do texto de content_md (pt, en ou es); null nos relatórios anteriores, escritos em pt."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"tokens_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Used"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"correlation_id":{"type":"string","title":"Correlation Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"ai_generated":{"type":"boolean","title":"Ai Generated","description":"Conteúdo gerado por um modelo de IA; false no modo offline.","default":false},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model","description":"Modelo que gerou o conteúdo."},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At","description":"Quando o conteúdo foi gerado (UTC); null sem IA."}},"type":"object","required":["id","workspace_id","persona","report_type","status","correlation_id","created_at"],"title":"ReportOut"},"ReportTraceNodeOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"status":{"type":"string","title":"Status"},"summary":{"type":"string","title":"Summary"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ended At"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges"},"configurable":{"items":{"$ref":"#/components/schemas/RoutineConfigOut"},"type":"array","title":"Configurable"}},"type":"object","required":["id","title","description","status","summary","meta","badges","configurable"],"title":"ReportTraceNodeOut"},"ReportTraceOut":{"properties":{"report_id":{"type":"string","title":"Report Id"},"report_type":{"type":"string","title":"Report Type"},"persona":{"type":"string","title":"Persona"},"status":{"type":"string","title":"Status"},"scheduled":{"type":"boolean","title":"Scheduled"},"has_trace":{"type":"boolean","title":"Has Trace"},"catalog_version":{"type":"string","title":"Catalog Version"},"lang":{"type":"string","title":"Lang"},"nodes":{"items":{"$ref":"#/components/schemas/ReportTraceNodeOut"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/RoutineEdgeOut"},"type":"array","title":"Edges"},"badges":{"additionalProperties":{"$ref":"#/components/schemas/RoutineBadgeOut"},"type":"object","title":"Badges"}},"type":"object","required":["report_id","report_type","persona","status","scheduled","has_trace","catalog_version","lang","nodes","edges","badges"],"title":"ReportTraceOut"},"RequireActiveContractRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"}},"additionalProperties":false,"type":"object","title":"RequireActiveContractRule"},"RequireFreshnessRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"}},"additionalProperties":false,"type":"object","title":"RequireFreshnessRule"},"RequireOwnerRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"}},"additionalProperties":false,"type":"object","title":"RequireOwnerRule"},"RequireReadmeRule":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity","default":"critical"},"layers":{"anyOf":[{"items":{"$ref":"#/components/schemas/MedallionLayer"},"type":"array"},{"type":"null"}],"title":"Layers"}},"additionalProperties":false,"type":"object","title":"RequireReadmeRule"},"RoutineBadgeOut":{"properties":{"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"}},"type":"object","required":["label","description"],"title":"RoutineBadgeOut"},"RoutineBlockOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"inputs":{"items":{"type":"string"},"type":"array","title":"Inputs"},"outputs":{"items":{"type":"string"},"type":"array","title":"Outputs"},"configurable":{"items":{"$ref":"#/components/schemas/RoutineConfigOut"},"type":"array","title":"Configurable"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges"}},"type":"object","required":["id","title","description","inputs","outputs","configurable","badges"],"title":"RoutineBlockOut"},"RoutineCatalogOut":{"properties":{"version":{"type":"string","title":"Version"},"lang":{"type":"string","title":"Lang"},"blocks":{"items":{"$ref":"#/components/schemas/RoutineBlockOut"},"type":"array","title":"Blocks"},"edges":{"items":{"$ref":"#/components/schemas/RoutineEdgeOut"},"type":"array","title":"Edges"},"badges":{"additionalProperties":{"$ref":"#/components/schemas/RoutineBadgeOut"},"type":"object","title":"Badges"}},"type":"object","required":["version","lang","blocks","edges","badges"],"title":"RoutineCatalogOut"},"RoutineConfigOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"where":{"type":"string","title":"Where"},"available":{"type":"boolean","title":"Available"}},"type":"object","required":["key","label","where","available"],"title":"RoutineConfigOut"},"RoutineEdgeOut":{"properties":{"from":{"type":"string","title":"From"},"to":{"type":"string","title":"To"}},"type":"object","required":["from","to"],"title":"RoutineEdgeOut"},"RuleLastResultOut":{"properties":{"status":{"type":"string","enum":["passed","failed","not_evaluated"],"title":"Status","description":"`not_evaluated`: a regra correu mas não se conseguiu verificar (por exemplo, uma `referential` com a referência noutra ligação acima de 200 000 chaves); não abre issue nem conta no score."},"scan_id":{"type":"string","title":"Scan Id"},"evaluated_at":{"type":"string","format":"date-time","title":"Evaluated At"},"observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed"},"threshold":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Threshold"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Porque não foi avaliada (só com `status=not_evaluated`); sem valores dos dados."}},"type":"object","required":["status","scan_id","evaluated_at"],"title":"RuleLastResultOut","description":"Último resultado de uma regra num scan (cartão #164)."},"RuleOut":{"properties":{"id":{"type":"string","title":"Id"},"workspace_id":{"type":"string","title":"Workspace Id"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"column_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column Name"},"rule_type":{"type":"string","title":"Rule Type"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"severity":{"type":"string","title":"Severity"},"enabled":{"type":"boolean","title":"Enabled"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_result":{"anyOf":[{"$ref":"#/components/schemas/RuleLastResultOut"},{"type":"null"}]}},"type":"object","required":["id","workspace_id","rule_type","severity","enabled","created_at"],"title":"RuleOut"},"RulePackOut":{"properties":{"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"},"name":{"type":"string","title":"Name"},"industry":{"type":"string","title":"Industry"},"tagline":{"type":"string","title":"Tagline"},"rule_count":{"type":"integer","title":"Rule Count"},"rule_types":{"additionalProperties":{"type":"integer"},"type":"object","title":"Rule Types"},"rationale_md":{"type":"string","title":"Rationale Md"},"rules":{"items":{"$ref":"#/components/schemas/PackRuleOut"},"type":"array","title":"Rules"}},"type":"object","required":["id","version","name","industry","tagline","rule_count","rule_types","rationale_md","rules"],"title":"RulePackOut"},"RulePackPreview":{"properties":{"pack_id":{"type":"string","title":"Pack Id"},"pack_version":{"type":"string","title":"Pack Version"},"dataset_id":{"type":"string","title":"Dataset Id"},"items":{"items":{"$ref":"#/components/schemas/PreviewItemOut"},"type":"array","title":"Items"},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts"}},"type":"object","required":["pack_id","pack_version","dataset_id","items","counts"],"title":"RulePackPreview"},"RulePackSummary":{"properties":{"id":{"type":"string","title":"Id"},"version":{"type":"string","title":"Version"},"name":{"type":"string","title":"Name"},"industry":{"type":"string","title":"Industry"},"tagline":{"type":"string","title":"Tagline"},"rule_count":{"type":"integer","title":"Rule Count"},"rule_types":{"additionalProperties":{"type":"integer"},"type":"object","title":"Rule Types"}},"type":"object","required":["id","version","name","industry","tagline","rule_count","rule_types"],"title":"RulePackSummary"},"RuleRetuneOut":{"properties":{"suggestion_id":{"type":"string","title":"Suggestion Id"},"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"rule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"},"column_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column Name"},"previous_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Previous Params"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["suggestion_id","kind","title"],"title":"RuleRetuneOut","description":"Reajuste/recalibração de regra à espera de aprovação (#157 `retune`, #156 `tuning`)."},"RuleValidationOut":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"rule_type":{"type":"string","title":"Rule Type"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"severity":{"type":"string","title":"Severity"},"not_applicable_code":{"anyOf":[{"type":"string","enum":["dataset_level","evaluated_at_source","cross_dataset","invalid_rule","reference_list_missing","regex_timeout"]},{"type":"null"}],"title":"Not Applicable Code","description":"Preenchido quando a regra não se avalia em nenhum registo: regra do dataset inteiro, avaliada por SQL na fonte, entre datasets, inválida, lista do registo em falta ou regex acima do tempo."},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"not_applicable":{"type":"integer","title":"Not Applicable","description":"Registos em que a regra não se aplica (p.ex. valor nulo)."},"failed_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Failed Pct","description":"% de falhas nos registos avaliados; `null` sem nenhum."},"threshold_pct":{"type":"number","title":"Threshold Pct","description":"Tolerância da regra (`max_null_pct`/`max_violation_pct`)."},"within_threshold":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Within Threshold","description":"`failed_pct` ≤ `threshold_pct`; `null` se a regra não avaliou nenhum registo."}},"type":"object","required":["rule_id","rule_type","column","severity","not_applicable_code","passed","failed","not_applicable","failed_pct","threshold_pct","within_threshold"],"title":"RuleValidationOut"},"SankeyColumnOut":{"properties":{"index":{"type":"integer","title":"Index"},"layer":{"type":"string","enum":["bronze","silver","gold"],"title":"Layer"},"label":{"type":"string","title":"Label"},"datasets":{"type":"integer","title":"Datasets"},"inferred":{"type":"integer","title":"Inferred"},"avg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Score"},"volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Volume"},"at_risk":{"type":"integer","title":"At Risk"}},"type":"object","required":["index","layer","label","datasets","inferred","avg_score","volume","at_risk"],"title":"SankeyColumnOut"},"SankeyLinkOut":{"properties":{"id":{"type":"string","title":"Id"},"edge_ids":{"items":{"type":"string"},"type":"array","title":"Edge Ids"},"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"kinds":{"items":{"type":"string"},"type":"array","title":"Kinds"},"via_columns":{"items":{"type":"string"},"type":"array","title":"Via Columns"},"volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Volume"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"band":{"type":"string","enum":["good","warn","bad","unknown"],"title":"Band"},"lateral":{"type":"boolean","title":"Lateral"}},"type":"object","required":["id","edge_ids","source","target","kinds","via_columns","volume","score","band","lateral"],"title":"SankeyLinkOut"},"SankeyNodeOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"layer":{"type":"string","enum":["bronze","silver","gold"],"title":"Layer"},"layer_inferred":{"type":"boolean","title":"Layer Inferred"},"column":{"type":"integer","title":"Column"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"band":{"type":"string","enum":["good","warn","bad","unknown"],"title":"Band"},"volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Volume"},"worst_upstream_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Worst Upstream Score"},"worst_upstream_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Worst Upstream Id"},"inherited_band":{"type":"string","enum":["good","warn","bad","unknown"],"title":"Inherited Band"},"upstream_count":{"type":"integer","title":"Upstream Count"},"downstream_count":{"type":"integer","title":"Downstream Count"}},"type":"object","required":["id","name","layer","layer_inferred","column","score","band","volume","worst_upstream_score","worst_upstream_id","inherited_band","upstream_count","downstream_count"],"title":"SankeyNodeOut"},"SankeyWarningOut":{"properties":{"type":{"type":"string","enum":["cycle","against_flow"],"title":"Type"},"upstream_id":{"type":"string","title":"Upstream Id"},"downstream_id":{"type":"string","title":"Downstream Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["type","upstream_id","downstream_id","message"],"title":"SankeyWarningOut"},"ScanCreate":{"properties":{"connection_id":{"type":"string","title":"Connection Id"},"dataset_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Dataset Ids"},"profile_depth":{"anyOf":[{"$ref":"#/components/schemas/ProfileDepth"},{"type":"null"}]},"override_blackout":{"type":"boolean","title":"Override Blackout","default":false},"override_reason":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Override Reason"},"resample":{"type":"boolean","title":"Resample","description":"Cartão #317: ler uma amostra de linhas nova neste scan (outra semente). Por omissão cada dataset usa sempre a mesma amostra, para os resultados não oscilarem entre scans sem os dados mudarem.","default":false}},"type":"object","required":["connection_id"],"title":"ScanCreate"},"ScanLiveOut":{"properties":{"scan":{"$ref":"#/components/schemas/ScanOut"},"connection_name":{"type":"string","title":"Connection Name"},"seq":{"type":"integer","title":"Seq"},"progress":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Progress"},"server_ts":{"type":"string","format":"date-time","title":"Server Ts"}},"type":"object","required":["scan","connection_name","seq","server_ts"],"title":"ScanLiveOut","description":"Teatro do scan: estado do scan + fotografia de progresso.\n\nMesmo formato nos frames `snapshot` do SSE e no GET de fallback (polling).\n`progress` é None em scans antigos (TTL expirado) ou sem progresso gravado."},"ScanOut":{"properties":{"id":{"type":"string","title":"Id"},"connection_id":{"type":"string","title":"Connection Id"},"status":{"type":"string","title":"Status"},"trigger":{"type":"string","title":"Trigger"},"dataset_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Dataset Ids"},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats"},"profile_depth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Depth"},"resample":{"type":"boolean","title":"Resample","description":"Cartão #317: o scan leu uma amostra de linhas nova (outra semente).","default":false},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"correlation_id":{"type":"string","title":"Correlation Id"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","connection_id","status","trigger","correlation_id","created_at"],"title":"ScanOut","examples":[{"id":"4569088f-7057-46dd-a5b2-15c744b4a33f","connection_id":"c61c71df-1d14-449f-b4f1-044d4c5c9de7","status":"completed","trigger":"manual","dataset_ids":null,"stats":{"datasets":4,"datasets_failed":0,"issues_created":6,"clusters":92,"duration_s":0.87,"auto_monitors":{"datasets":4,"issues_created":0,"skipped":0},"source_endpoint":"primary","source_queries":{"executions":330,"statements":63,"errors":0,"total_ms":15.52,"max_in_flight":1,"truncated":false,"endpoint":"primary"}},"profile_depth":null,"resample":false,"error":null,"correlation_id":"dadad3fd-5336-432c-b891-dddf80f57294","started_at":"2026-10-11T05:54:47.296520","finished_at":"2026-10-11T05:54:48.162906","created_at":"2026-10-11T05:54:47.277291"}]},"SchemaChangeOut":{"properties":{"id":{"type":"string","title":"Id"},"detected_at":{"type":"string","format":"date-time","title":"Detected At"},"source":{"type":"string","title":"Source"},"severity":{"$ref":"#/components/schemas/Severity"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"issue_status":{"anyOf":[{"$ref":"#/components/schemas/IssueStatus"},{"type":"null"}]},"changes":{"items":{"$ref":"#/components/schemas/SchemaColumnChangeOut"},"type":"array","title":"Changes"},"renames":{"items":{"$ref":"#/components/schemas/SchemaRenameOut"},"type":"array","title":"Renames"},"downstream":{"items":{"$ref":"#/components/schemas/SchemaImpactedDatasetOut"},"type":"array","title":"Downstream"},"contract":{"anyOf":[{"$ref":"#/components/schemas/SchemaContractImpactOut"},{"type":"null"}]}},"type":"object","required":["id","detected_at","source","severity"],"title":"SchemaChangeOut","description":"Entrada da timeline de schema do dataset."},"SchemaColumnChangeOut":{"properties":{"kind":{"type":"string","title":"Kind"},"column":{"type":"string","title":"Column"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before"},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"},"breaking":{"type":"boolean","title":"Breaking","default":false}},"type":"object","required":["kind","column"],"title":"SchemaColumnChangeOut"},"SchemaContractFindingOut":{"properties":{"code":{"type":"string","title":"Code"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"rename_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rename To"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before"},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},"type":"object","required":["code"],"title":"SchemaContractFindingOut"},"SchemaContractImpactOut":{"properties":{"status":{"type":"string","title":"Status"},"problems":{"items":{"type":"string"},"type":"array","title":"Problems"},"findings":{"items":{"$ref":"#/components/schemas/SchemaContractFindingOut"},"type":"array","title":"Findings"}},"type":"object","required":["status"],"title":"SchemaContractImpactOut"},"SchemaImpactedDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"name":{"type":"string","title":"Name"},"depth":{"type":"integer","title":"Depth","default":1},"via_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Via Column"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"restricted":{"type":"boolean","title":"Restricted","default":false}},"type":"object","required":["dataset_id","name"],"title":"SchemaImpactedDatasetOut"},"SchemaRenameOut":{"properties":{"from_column":{"type":"string","title":"From Column"},"to_column":{"type":"string","title":"To Column"},"confidence":{"type":"number","title":"Confidence"},"reason":{"type":"string","title":"Reason","default":""},"signals":{"items":{"type":"string"},"type":"array","title":"Signals"},"logical_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logical Type"}},"type":"object","required":["from_column","to_column","confidence"],"title":"SchemaRenameOut"},"ScoreDimensionChangeOut":{"properties":{"dimension":{"type":"string","title":"Dimension"},"weight":{"type":"number","title":"Weight"},"before":{"type":"number","title":"Before"},"after":{"type":"number","title":"After"},"points":{"type":"number","title":"Points","description":"peso·(depois − antes): a parte do Δscore desta dimensão."},"drivers":{"items":{"$ref":"#/components/schemas/ScoreDriverOut"},"type":"array","title":"Drivers"},"unexplained_points":{"type":"number","title":"Unexplained Points","description":"O que os drivers não explicam nesta dimensão (min(), clamp, arredondamento)."},"missing_before":{"type":"boolean","title":"Missing Before","default":false},"missing_after":{"type":"boolean","title":"Missing After","default":false}},"type":"object","required":["dimension","weight","before","after","points","unexplained_points"],"title":"ScoreDimensionChangeOut"},"ScoreDriverOut":{"properties":{"kind":{"type":"string","title":"Kind","description":"column_nulls | column_set_changed | duplicates | uniqueness_basis_changed | rule_failing | rule_passing | rule_set_changed | freshness | drift | consistency_issue | consistency_branch_changed | dimension_unrecorded"},"dimension":{"type":"string","title":"Dimension"},"points":{"type":"number","title":"Points","description":"Contribuição para o Δscore, já ponderada pelo peso da dimensão."},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"rule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"},"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"copy":{"type":"string","title":"Copy","description":"Frase determinística em pt-PT (relatórios); a UI formata a partir de kind+params.","default":""}},"type":"object","required":["kind","dimension","points"],"title":"ScoreDriverOut","description":"Uma causa da variação, em pontos de score (ponderados, com sinal)."},"ScoreExplanationOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"from_scan_id":{"type":"string","title":"From Scan Id"},"to_scan_id":{"type":"string","title":"To Scan Id"},"from_computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From Computed At"},"to_computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"To Computed At"},"score_before":{"type":"number","title":"Score Before"},"score_after":{"type":"number","title":"Score After"},"delta":{"type":"number","title":"Delta"},"unexplained_points":{"type":"number","title":"Unexplained Points"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"},"dimensions":{"items":{"$ref":"#/components/schemas/ScoreDimensionChangeOut"},"type":"array","title":"Dimensions"}},"type":"object","required":["dataset_id","from_scan_id","to_scan_id","score_before","score_after","delta","unexplained_points","dimensions"],"title":"ScoreExplanationOut","description":"Δscore entre dois scans decomposto por dimensão e drivers (cartão #318).\n\nΣ drivers + `unexplained_points` = `delta`."},"ScorePointOut":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"score":{"type":"number","title":"Score"},"dimensions":{"additionalProperties":{"type":"number"},"type":"object","title":"Dimensions"},"dimensions_meta":{"additionalProperties":{"$ref":"#/components/schemas/DimensionEstimateOut"},"type":"object","title":"Dimensions Meta","description":"Dimensões estimadas sobre amostra (hoje só `unicidade`); vazio quando todas cobrem a tabela inteira."},"computed_at":{"type":"string","format":"date-time","title":"Computed At"}},"type":"object","required":["scan_id","score","computed_at"],"title":"ScorePointOut"},"ScoreTrendPoint":{"properties":{"date":{"type":"string","title":"Date"},"score":{"type":"number","title":"Score"}},"type":"object","required":["date","score"],"title":"ScoreTrendPoint"},"SemanticTypeOut":{"properties":{"kind":{"type":"string","title":"Kind"},"confidence":{"type":"number","title":"Confidence"},"valid_pct":{"type":"number","title":"Valid Pct","description":"Fração (0..1) dos valores distintos da amostra que casam com o tipo."},"estimated":{"type":"boolean","title":"Estimated","description":"True quando `valid_pct` sai da amostra de valores (cartão #350).","default":false},"sample_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sample Size","description":"Valores distintos da amostra medidos (até 20): a UI mostra «N/M valores da amostra». None quando o tipo não sai da amostra ou em perfis anteriores ao cartão #350."},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region","description":"Só no tipo `phone`: o país do plano de numeração (ISO 3166-1 alfa-2), que a UI mostra no selo («Telefone ES»). None nos outros tipos e em `phone_pt` (é PT) (cartão #516)."}},"type":"object","required":["kind","confidence","valid_pct"],"title":"SemanticTypeOut","description":"Tipo semântico inferido no profiling (`domain/quality/semantic_types.py`)."},"SensitivityEventOut":{"properties":{"id":{"type":"string","title":"Id"},"column":{"type":"string","title":"Column"},"from_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Level"},"to_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Level"},"source":{"type":"string","title":"Source"},"actor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Id"},"actor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Name"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","column","source","created_at"],"title":"SensitivityEventOut"},"SensitivityLevel":{"type":"string","enum":["public","internal","confidential","pii"],"title":"SensitivityLevel","description":"Classificação de sensibilidade de uma coluna (cartão #112 — SENSCLASS).\n\nOrdem = ordem crescente de sensibilidade (a herança por linhagem sugere\nsempre o nível mais alto a montante)."},"SensitivityLevelCountsOut":{"properties":{"public":{"type":"integer","title":"Public"},"internal":{"type":"integer","title":"Internal"},"confidential":{"type":"integer","title":"Confidential"},"pii":{"type":"integer","title":"Pii"}},"type":"object","required":["public","internal","confidential","pii"],"title":"SensitivityLevelCountsOut","description":"Colunas por nível de sensibilidade."},"SensitivityLevelOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"}},"type":"object","required":["key","label"],"title":"SensitivityLevelOut"},"SensitivitySuggestionOut":{"properties":{"level":{"type":"string","title":"Level"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"column":{"type":"string","title":"Column"}},"type":"object","required":["level","dataset_id","dataset_name","column"],"title":"SensitivitySuggestionOut","description":"Nível herdado sugerido por linhagem (dataset diretamente a montante)."},"SensitivitySummaryOut":{"properties":{"columns":{"type":"integer","title":"Columns","default":0},"unclassified":{"type":"integer","title":"Unclassified","default":0},"by_level":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Level"},"manual":{"type":"integer","title":"Manual","default":0},"suggestions":{"type":"integer","title":"Suggestions","default":0}},"type":"object","title":"SensitivitySummaryOut"},"Severity":{"type":"string","enum":["info","warning","critical"],"title":"Severity"},"SignalOut":{"properties":{"id":{"type":"string","title":"Id"},"source_ref":{"type":"string","title":"Source Ref"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"title":{"type":"string","title":"Title"},"kind":{"type":"string","title":"Kind"},"severity":{"type":"string","title":"Severity"},"summary":{"type":"string","title":"Summary"},"entities_json":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Entities Json"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"},"match_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Match Confidence"},"status":{"type":"string","title":"Status"},"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"rule_suggestion_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Suggestion Id"},"extracted_by":{"type":"string","title":"Extracted By"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","source_ref","title","kind","severity","summary","status","extracted_by","updated_at"],"title":"SignalOut"},"SlaAgeingOut":{"properties":{"lt_1d":{"type":"integer","title":"Lt 1D","description":"Menos de 1 dia."},"d1_3":{"type":"integer","title":"D1 3","description":"De 1 a 3 dias."},"d3_7":{"type":"integer","title":"D3 7","description":"De 3 a 7 dias."},"d7_30":{"type":"integer","title":"D7 30","description":"De 7 a 30 dias."},"gt_30d":{"type":"integer","title":"Gt 30D","description":"Mais de 30 dias."}},"type":"object","required":["lt_1d","d1_3","d3_7","d7_30","gt_30d"],"title":"SlaAgeingOut","description":"Abertas no fim do período por idade de calendário."},"SlaGroupOut":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key","description":"id do domínio ou da equipa, ou a severidade; null = sem domínio/equipa (ou o total)."},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Nome do domínio ou da equipa; null nos outros grupos."},"opened":{"type":"integer","title":"Opened","description":"Criados no período."},"resolved":{"type":"integer","title":"Resolved","description":"Fechados no período (resolvidos ou ignorados)."},"open_at_end":{"type":"integer","title":"Open At End","description":"Por resolver no fim do período."},"breached":{"type":"integer","title":"Breached","description":"Dos fechados no período e dos abertos no fim, os que passaram o alvo."},"in_scope":{"type":"integer","title":"In Scope","description":"Dos fechados no período e dos abertos no fim, os que tinham alvo."},"mtta_median_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mtta Median Hours"},"mtta_p90_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mtta P90 Hours"},"mttr_median_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mttr Median Hours"},"mttr_p90_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mttr P90 Hours"},"ageing":{"$ref":"#/components/schemas/SlaAgeingOut"}},"type":"object","required":["key","opened","resolved","open_at_end","breached","in_scope","ageing"],"title":"SlaGroupOut"},"SlaReportOut":{"properties":{"period":{"type":"string","title":"Period"},"group_by":{"type":"string","enum":["domain","team","severity"],"title":"Group By"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"as_of":{"type":"string","format":"date-time","title":"As Of","description":"Fim do período, ou agora num mês em curso."},"targets":{"items":{"$ref":"#/components/schemas/SlaTargetOut"},"type":"array","title":"Targets"},"total":{"$ref":"#/components/schemas/SlaGroupOut"},"groups":{"items":{"$ref":"#/components/schemas/SlaGroupOut"},"type":"array","title":"Groups"}},"type":"object","required":["period","group_by","starts_at","ends_at","as_of","targets","total","groups"],"title":"SlaReportOut","description":"Relatório mensal de stewardship (cartão #396): SLA de resolução, MTTA/MTTR."},"SlaTargetOut":{"properties":{"severity":{"type":"string","title":"Severity"},"target_hours":{"type":"integer","title":"Target Hours"},"active_since":{"type":"string","format":"date-time","title":"Active Since"}},"type":"object","required":["severity","target_hours","active_since"],"title":"SlaTargetOut","description":"Cartão #396: alvo de resolução de uma severidade e desde quando conta."},"SloBreakdownOut":{"properties":{"freshness":{"type":"integer","title":"Freshness","default":0},"score":{"type":"integer","title":"Score","default":0},"verdict":{"type":"integer","title":"Verdict","default":0}},"type":"object","title":"SloBreakdownOut","description":"Dataset-dias violados por subtipo (um dia pode violar vários)."},"SloDatasetOut":{"properties":{"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"target_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Hours"},"met_days":{"type":"integer","title":"Met Days","default":0},"violated_days":{"type":"integer","title":"Violated Days","default":0},"unmeasured_days":{"type":"integer","title":"Unmeasured Days","default":0},"attainment_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Pct"},"meets_objective":{"type":"boolean","title":"Meets Objective","default":false},"worst_observed_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Worst Observed Hours"},"last_observed_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Observed Hours"}},"type":"object","required":["dataset_id","dataset_name"],"title":"SloDatasetOut"},"SloIssueRefOut":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"severity":{"type":"string","title":"Severity"}},"type":"object","required":["id","title","status","severity"],"title":"SloIssueRefOut"},"SloMonthOut":{"properties":{"month":{"type":"string","title":"Month"},"met_days":{"type":"integer","title":"Met Days","default":0},"violated_days":{"type":"integer","title":"Violated Days","default":0},"unmeasured_days":{"type":"integer","title":"Unmeasured Days","default":0},"attainment_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Pct"},"meets_objective":{"type":"boolean","title":"Meets Objective","default":false}},"type":"object","required":["month"],"title":"SloMonthOut"},"SloReportOut":{"properties":{"months":{"type":"integer","title":"Months"},"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"objective_pct":{"type":"number","title":"Objective Pct"},"summary":{"$ref":"#/components/schemas/SloSummaryOut"},"monthly":{"items":{"$ref":"#/components/schemas/SloMonthOut"},"type":"array","title":"Monthly"},"datasets":{"items":{"$ref":"#/components/schemas/SloDatasetOut"},"type":"array","title":"Datasets"},"violations":{"items":{"$ref":"#/components/schemas/SloViolationOut"},"type":"array","title":"Violations"}},"type":"object","required":["months","start","end","objective_pct","summary","monthly","datasets","violations"],"title":"SloReportOut"},"SloSummaryOut":{"properties":{"attainment_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment Pct"},"current_month_attainment_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Month Attainment Pct"},"datasets_with_slo":{"type":"integer","title":"Datasets With Slo","default":0},"datasets_measured":{"type":"integer","title":"Datasets Measured","default":0},"datasets_meeting_objective":{"type":"integer","title":"Datasets Meeting Objective","default":0},"met_days":{"type":"integer","title":"Met Days","default":0},"violated_days":{"type":"integer","title":"Violated Days","default":0},"unmeasured_days":{"type":"integer","title":"Unmeasured Days","default":0}},"type":"object","title":"SloSummaryOut"},"SloViolationOut":{"properties":{"date":{"type":"string","title":"Date"},"dataset_id":{"type":"string","title":"Dataset Id"},"dataset_name":{"type":"string","title":"Dataset Name"},"target_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Hours"},"observed_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Observed Hours"},"issues":{"items":{"$ref":"#/components/schemas/SloIssueRefOut"},"type":"array","title":"Issues"},"issue_count":{"type":"integer","title":"Issue Count","default":0}},"type":"object","required":["date","dataset_id","dataset_name"],"title":"SloViolationOut"},"SourceQueryLogOut":{"properties":{"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"operation":{"type":"string","title":"Operation"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"query_tag":{"type":"string","title":"Query Tag"},"endpoint":{"type":"string","title":"Endpoint"},"executions":{"type":"integer","title":"Executions"},"errors":{"type":"integer","title":"Errors"},"total_ms":{"type":"number","title":"Total Ms"},"max_ms":{"type":"number","title":"Max Ms"},"rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rows"},"first_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First At"},"last_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last At"},"statement_hash":{"type":"string","title":"Statement Hash"},"statement":{"type":"string","title":"Statement"}},"type":"object","required":["created_at","operation","scan_id","query_tag","endpoint","executions","errors","total_ms","max_ms","rows","first_at","last_at","statement_hash","statement"],"title":"SourceQueryLogOut","description":"Uma forma de statement executada pelo DataVault numa fonte (sem valores)."},"SuggestionCategory":{"type":"string","enum":["deduplication","schema","performance","governance","rules","refactoring","enrichment"],"title":"SuggestionCategory"},"SuggestionOut":{"properties":{"id":{"type":"string","title":"Id"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"description_md":{"type":"string","title":"Description Md","default":""},"sql_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sql Snippet"},"pyspark_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pyspark Snippet"},"impact":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Impact"},"effort":{"type":"string","title":"Effort"},"status":{"type":"string","title":"Status"},"source":{"type":"string","title":"Source"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"},"issue_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Id"},"signal_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Id"},"proposed_rule":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Proposed Rule"},"approved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approved At"},"applied_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied At"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"pull_request":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pull Request"},"rehearsal":{"anyOf":[{"$ref":"#/components/schemas/SuggestionRehearsalOut"},{"type":"null"}],"description":"Último ensaio só-leitura do passo de diagnóstico; null se nunca foi ensaiada."},"ai_generated":{"type":"boolean","title":"Ai Generated","description":"Texto gerado por IA (`source=ai`): pelo LLM das sugestões ou pelo assistente.","default":false},"ai_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model","description":"Modelo que gerou a sugestão; null fora da IA e nas sugestões IA antigas."},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At","description":"Quando a sugestão IA foi gerada; null fora da IA."}},"type":"object","required":["id","category","title","effort","status","source","created_at"],"title":"SuggestionOut"},"SuggestionRehearsalOut":{"properties":{"version":{"type":"integer","title":"Version"},"status":{"type":"string","enum":["queued","ok","blocked","timeout","error"],"title":"Status"},"affected_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Affected Rows","description":"Linhas que o passo de diagnóstico devolve, contadas na fonte."},"total_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Rows","description":"Linhas do dataset no último scan (o denominador de `pct`)."},"pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Pct","description":"affected_rows / total_rows × 100; null sem total ou acima dele."},"requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Requested At"},"ran_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ran At"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor","description":"Email do admin que pediu o ensaio; «conta eliminada» depois de a conta ser apagada."},"reason":{"anyOf":[{"$ref":"#/components/schemas/SuggestionRehearsalReasonOut"},{"type":"null"}]}},"type":"object","required":["version","status"],"title":"SuggestionRehearsalOut","description":"Último ensaio só-leitura do passo de diagnóstico (cartão #178). Só contagens."},"SuggestionRehearsalReasonOut":{"properties":{"code":{"type":"string","title":"Code","description":"no_diagnosis, aggregate, limit, not_select, forbidden, function_not_allowed, unknown_table, multiple_statements, system_table, timeout, source_error, blackout, not_supported, dataset_missing, messaging_unavailable…"},"params":{"additionalProperties":{"type":"string"},"type":"object","title":"Params"},"message":{"type":"string","title":"Message","default":""}},"type":"object","required":["code"],"title":"SuggestionRehearsalReasonOut","description":"Porque é que o ensaio não contou (cartão #178): código estável + params; a\nUI compõe o texto e `message` é o mesmo motivo em pt-PT, de recurso."},"SuggestionStatus":{"type":"string","enum":["proposed","accepted","applied","verified","dismissed","done"],"title":"SuggestionStatus","description":"Ciclo de vida da remediação governada.\n\nproposed → accepted (aprovada por admin) → applied (executada pelo cliente,\nfora do DataVault) → verified (o scan seguinte confirmou a resolução).\n`dismissed` rejeita; `done` é legado equivalente a verified."},"SyntheticColumnEvaluationOut":{"properties":{"name":{"type":"string","title":"Name"},"strategy":{"type":"string","title":"Strategy"},"null_rate_expected":{"type":"number","title":"Null Rate Expected","description":"Taxa de nulos do perfil (0–1)."},"null_rate_observed":{"type":"number","title":"Null Rate Observed","description":"Taxa de nulos no output (0–1)."},"null_delta":{"type":"number","title":"Null Delta","description":"Observada − perfil."},"quantile_deltas":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Quantile Deltas","description":"|Δ| de cada quantil p05–p95 ÷ IQR do perfil (null sem quantis)."},"quantile_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quantile Delta","description":"Média de `quantile_deltas`."},"distribution_tvd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distribution Tvd","description":"Distância de variação total (0–1) ao histograma do perfil ou às quotas categóricas."}},"type":"object","required":["name","strategy","null_rate_expected","null_rate_observed","null_delta"],"title":"SyntheticColumnEvaluationOut"},"SyntheticCorrelationEvaluationOut":{"properties":{"column_a":{"type":"string","title":"Column A"},"column_b":{"type":"string","title":"Column B"},"expected":{"type":"number","title":"Expected","description":"Coeficiente do perfil usado na geração."},"observed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Observed","description":"Pearson no output (null sem variância)."},"delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta"}},"type":"object","required":["column_a","column_b","expected"],"title":"SyntheticCorrelationEvaluationOut"},"SyntheticEvaluationOut":{"properties":{"rows":{"type":"integer","title":"Rows"},"seed":{"type":"integer","title":"Seed"},"utility_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Utility Score","description":"0–100: média ponderada das fidelidades (ver `utility_weights`)."},"utility_components":{"additionalProperties":{"type":"number"},"type":"object","title":"Utility Components","description":"Fidelidade 0–1 por métrica: nulls, quantiles, distribution, correlations."},"utility_weights":{"additionalProperties":{"type":"number"},"type":"object","title":"Utility Weights"},"columns":{"items":{"$ref":"#/components/schemas/SyntheticColumnEvaluationOut"},"type":"array","title":"Columns"},"correlations":{"items":{"$ref":"#/components/schemas/SyntheticCorrelationEvaluationOut"},"type":"array","title":"Correlations"},"privacy_verdict":{"type":"string","enum":["pass","warn","fail"],"title":"Privacy Verdict","description":"fail com qualquer leak; warn com k_min abaixo de k_threshold; senão pass."},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Motivo do veredito em pt-PT, de `key` e `params` (texto de recurso); null em pass."},"key":{"anyOf":[{"type":"string","enum":["leaks","k_below"]},{"type":"null"}],"title":"Key","description":"Código do motivo: `leaks` em fail, `k_below` em warn; null em pass."},"params":{"anyOf":[{"$ref":"#/components/schemas/SyntheticReasonParamsOut"},{"type":"null"}],"description":"Com que se compõe o motivo da `key`; null em pass."},"sample_leak":{"type":"boolean","title":"Sample Leak"},"extreme_leak":{"type":"boolean","title":"Extreme Leak"},"pii_leak":{"type":"boolean","title":"Pii Leak"},"leaks":{"items":{"$ref":"#/components/schemas/SyntheticLeakOut"},"type":"array","title":"Leaks"},"k_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K Min","description":"k-anonimato do output sobre os quase-identificadores com valores do domínio real (numéricos, temporais ou categóricos; ≥ 2)."},"k_share_below":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"K Share Below","description":"Fração das linhas em classes com menos de k_threshold."},"k_threshold":{"type":"integer","title":"K Threshold"},"quasi_identifiers":{"items":{"$ref":"#/components/schemas/SyntheticQuasiIdentifierOut"},"type":"array","title":"Quasi Identifiers"}},"type":"object","required":["rows","seed","utility_components","utility_weights","columns","correlations","privacy_verdict","sample_leak","extreme_leak","pii_leak","leaks","k_threshold","quasi_identifiers"],"title":"SyntheticEvaluationOut","description":"Scorecard utilidade × privacidade das linhas de (rows, seed) — cartão #174.\n\nSó taxas, deltas, contagens e nomes de colunas; nunca valores."},"SyntheticLeakOut":{"properties":{"kind":{"type":"string","enum":["sample","extreme","pii"],"title":"Kind"},"column":{"type":"string","title":"Column"},"rows":{"type":"integer","title":"Rows","description":"Linhas do output com o leak — nunca o valor."}},"type":"object","required":["kind","column","rows"],"title":"SyntheticLeakOut"},"SyntheticPackIn":{"properties":{"connection_id":{"anyOf":[{"type":"string","maxLength":36,"minLength":1},{"type":"null"}],"title":"Connection Id"},"domain_id":{"anyOf":[{"type":"string","maxLength":36,"minLength":1},{"type":"null"}],"title":"Domain Id"},"dataset_ids":{"anyOf":[{"items":{"type":"string","maxLength":36,"minLength":1},"type":"array","maxItems":20,"minItems":1},{"type":"null"}],"title":"Dataset Ids"},"rows_per_table":{"type":"integer","minimum":1,"title":"Rows Per Table","default":1000},"max_tables":{"type":"integer","maximum":20,"minimum":1,"title":"Max Tables","default":20},"format":{"type":"string","enum":["zip","sqlite"],"title":"Format","default":"zip"},"seed":{"type":"integer","maximum":9223372036854776000,"minimum":0,"title":"Seed","default":42}},"additionalProperties":false,"type":"object","title":"SyntheticPackIn","description":"Body de `POST /synthetic-packs` (cartão #175): exatamente um de `connection_id`,\n`domain_id` ou `dataset_ids`. O teto de `rows_per_table` vem das settings. Um\ncampo desconhecido (`rows` em vez de `rows_per_table`) dá 422 em vez de cair no default."},"SyntheticQuasiIdentifierOut":{"properties":{"column":{"type":"string","title":"Column"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["column","kind"],"title":"SyntheticQuasiIdentifierOut"},"SyntheticReasonParamsOut":{"properties":{"sample_columns":{"items":{"type":"string"},"type":"array","title":"Sample Columns","description":"`leaks`: colunas com sample_leak."},"extreme_columns":{"items":{"type":"string"},"type":"array","title":"Extreme Columns","description":"`leaks`: colunas com extreme_leak."},"pii_columns":{"items":{"type":"string"},"type":"array","title":"Pii Columns","description":"`leaks`: colunas com pii_leak."},"k_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K Min","description":"`k_below`: o k_min do output."},"k_threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K Threshold","description":"`k_below`: o limiar (5)."},"qi_columns":{"items":{"type":"string"},"type":"array","title":"Qi Columns","description":"`k_below`: os quase-identificadores do k_min."}},"type":"object","title":"SyntheticReasonParamsOut","description":"Com que a UI compõe o motivo, por `key`: nomes de colunas e números, nunca valores."},"TicketEntityType":{"type":"string","enum":["issue","incident","suggestion","contract_proposal","column_sensitivity"],"title":"TicketEntityType","description":"Entidade do DataVault a que um ticket externo está ligado (cartão #374).\n\nAs violações de política de dados são issues do tipo `policy_violation`:\nligam-se como `issue`. Um incidente é derivado a cada leitura — ancora-se no\nseu id (`inc-<id do issue raiz>`)."},"TicketTargetOut":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"issue_types":{"items":{"type":"string"},"type":"array","title":"Issue Types","default":[]}},"type":"object","required":["key","name"],"title":"TicketTargetOut"},"TicketTargetsOut":{"properties":{"integration_id":{"type":"string","title":"Integration Id"},"provider":{"type":"string","title":"Provider"},"default_project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Project"},"default_issue_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Issue Type"},"targets":{"items":{"$ref":"#/components/schemas/TicketTargetOut"},"type":"array","title":"Targets"}},"type":"object","required":["integration_id","provider","targets"],"title":"TicketTargetsOut"},"TopIssueItem":{"properties":{"id":{"type":"string","title":"Id"},"dataset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Name"},"type":{"type":"string","title":"Type"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","type","severity","title","created_at"],"title":"TopIssueItem"},"TreemapLeafMetricsOut":{"properties":{"volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Volume"},"cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost"},"columns":{"type":"integer","title":"Columns","default":0}},"type":"object","title":"TreemapLeafMetricsOut","description":"Métricas brutas de uma folha — para o resumo no hover."},"TreemapMetric":{"type":"string","enum":["volume","cost","columns"],"title":"TreemapMetric"},"TreemapMetricsAvailableOut":{"properties":{"volume":{"type":"boolean","title":"Volume"},"cost":{"type":"boolean","title":"Cost"},"columns":{"type":"boolean","title":"Columns"}},"type":"object","required":["volume","cost","columns"],"title":"TreemapMetricsAvailableOut"},"TreemapNodeOut":{"properties":{"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"value":{"type":"number","title":"Value"},"estimated":{"type":"boolean","title":"Estimated","default":false},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"issues_abertas":{"type":"integer","title":"Issues Abertas","default":0},"dataset_count":{"type":"integer","title":"Dataset Count","default":0},"metrics":{"anyOf":[{"$ref":"#/components/schemas/TreemapLeafMetricsOut"},{"type":"null"}]},"children":{"items":{"$ref":"#/components/schemas/TreemapNodeOut"},"type":"array","title":"Children"}},"type":"object","required":["name","kind","value"],"title":"TreemapNodeOut","description":"Nó do treemap do catálogo: raiz, conexão, schema ou dataset."},"TrustBlockerOut":{"properties":{"key":{"type":"string","title":"Key"},"message":{"type":"string","title":"Message"},"cap":{"type":"number","title":"Cap"},"params":{"additionalProperties":{"type":"integer"},"type":"object","title":"Params"}},"type":"object","required":["key","message","cap"],"title":"TrustBlockerOut","description":"Bloqueador ou aviso do trust score. A UI traduz pela `key` e pelos\n`params` (ADR 0006, adenda do cartão #476); `message` é o texto em pt-PT."},"TrustComponentOut":{"properties":{"key":{"type":"string","title":"Key"},"weight":{"type":"number","title":"Weight"},"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value"},"points":{"type":"number","title":"Points"},"evidence":{"type":"string","title":"Evidence"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},"type":"object","required":["key","weight","points","evidence"],"title":"TrustComponentOut","description":"Componente do trust score (cartão #142): peso, valor 0..1, pontos,\nevidência em pt-PT com números e a ação para subir (None = já no máximo)."},"TrustContractFlagsOut":{"properties":{"active":{"type":"boolean","title":"Active"},"valid":{"type":"boolean","title":"Valid"}},"type":"object","required":["active","valid"],"title":"TrustContractFlagsOut","description":"`active`: há versão do contrato aceite pelo produtor; `valid`: o contrato não falha."},"TrustDecisionBatchIn":{"properties":{"dataset_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Dataset Ids"},"purpose":{"type":"string","title":"Purpose","default":"agente"}},"type":"object","required":["dataset_ids"],"title":"TrustDecisionBatchIn","description":"Body de `POST /trust-decisions` (cartão #150): decisão de confiança em lote.","examples":[{"dataset_ids":["109b178e-8f65-41fa-b0b5-a922d8e7055b","a7e11a06-0950-4a0c-8bff-83e0586ff6fc"],"purpose":"agente"}]},"TrustDecisionBatchOut":{"properties":{"purpose":{"type":"string","enum":["agente","rag","treino","bi"],"title":"Purpose"},"decision":{"type":"string","enum":["trusted","caution","untrusted","unknown"],"title":"Decision"},"ttl_seconds":{"type":"integer","title":"Ttl Seconds"},"datasets":{"items":{"$ref":"#/components/schemas/TrustDecisionOut"},"type":"array","title":"Datasets"}},"type":"object","required":["purpose","decision","ttl_seconds","datasets"],"title":"TrustDecisionBatchOut","description":"Decisões de um lote: `decision` é a pior e `ttl_seconds` o menor."},"TrustDecisionFreshnessOut":{"properties":{"observed_age_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Observed Age Hours"},"sla_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sla Hours"},"sla_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sla Source"},"met":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Met"}},"type":"object","required":["observed_age_hours","sla_hours","sla_source","met"],"title":"TrustDecisionFreshnessOut"},"TrustDecisionIncidentsOut":{"properties":{"critical":{"type":"integer","title":"Critical"},"warning":{"type":"integer","title":"Warning"}},"type":"object","required":["critical","warning"],"title":"TrustDecisionIncidentsOut"},"TrustDecisionOut":{"properties":{"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dataset Id"},"purpose":{"type":"string","enum":["agente","rag","treino","bi"],"title":"Purpose"},"decision":{"type":"string","enum":["trusted","caution","untrusted","unknown"],"title":"Decision"},"reasons":{"items":{"$ref":"#/components/schemas/TrustReasonOut"},"type":"array","title":"Reasons"},"verdict":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Verdict"},"readiness":{"$ref":"#/components/schemas/TrustDecisionReadinessOut"},"freshness":{"$ref":"#/components/schemas/TrustDecisionFreshnessOut"},"open_incidents":{"$ref":"#/components/schemas/TrustDecisionIncidentsOut"},"pii":{"$ref":"#/components/schemas/TrustDecisionPiiOut"},"contract":{"$ref":"#/components/schemas/TrustContractFlagsOut"},"last_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan At"},"as_of":{"type":"string","title":"As Of"},"ttl_seconds":{"type":"integer","title":"Ttl Seconds"},"recommended_action_pt":{"type":"string","title":"Recommended Action Pt"},"required_actions":{"items":{"type":"string"},"type":"array","title":"Required Actions"},"valid_until":{"type":"string","title":"Valid Until"}},"type":"object","required":["dataset_id","purpose","decision","reasons","verdict","readiness","freshness","open_incidents","pii","contract","last_scan_at","as_of","ttl_seconds","recommended_action_pt","required_actions","valid_until"],"title":"TrustDecisionOut","description":"Decisão de confiança para consumir o dataset numa finalidade, com as razões,\no que falta para subir de decisão e por quanto tempo vale."},"TrustDecisionPiiOut":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"unmasked":{"items":{"type":"string"},"type":"array","title":"Unmasked"}},"type":"object","required":["columns","unmasked"],"title":"TrustDecisionPiiOut"},"TrustDecisionReadinessOut":{"properties":{"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers"}},"type":"object","required":["score","blockers"],"title":"TrustDecisionReadinessOut"},"TrustFactsAiReadinessOut":{"properties":{"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"verdict":{"anyOf":[{"type":"string","enum":["pronto","com_reservas","nao_pronto","sem_dados"]},{"type":"null"}],"title":"Verdict"},"use_cases":{"additionalProperties":{"$ref":"#/components/schemas/TrustFactsUseCaseOut"},"type":"object","title":"Use Cases"}},"type":"object","required":["score","verdict","use_cases"],"title":"TrustFactsAiReadinessOut","description":"Score global e, por caso de uso (`rag`, `ml`, `agente`, `bi`), score e veredito."},"TrustFactsContractOut":{"properties":{"status":{"type":"string","enum":["ok","warn","fail"],"title":"Status"},"active_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Version"},"activated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activated At"},"problem_count":{"type":"integer","title":"Problem Count"},"problems":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Problems"}},"type":"object","required":["status","active_version","activated_at","problem_count"],"title":"TrustFactsContractOut","description":"`problems` só com `detail=full`."},"TrustFactsDomainRefOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"TrustFactsDomainRefOut"},"TrustFactsFreshnessOut":{"properties":{"observed_age_hours":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Observed Age Hours"},"target_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Target Hours"},"target_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Source"},"met":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Met"},"attainment_30d_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Attainment 30D Pct"}},"type":"object","required":["observed_age_hours","target_hours","target_source","met","attainment_30d_pct"],"title":"TrustFactsFreshnessOut","description":"Idade dos dados (horas inteiras) contra o alvo e o cumprimento a 30 dias."},"TrustFactsLineageOut":{"properties":{"upstream":{"type":"integer","title":"Upstream"},"downstream":{"type":"integer","title":"Downstream"}},"type":"object","required":["upstream","downstream"],"title":"TrustFactsLineageOut"},"TrustFactsLinksOut":{"properties":{"dataset":{"type":"string","title":"Dataset"},"contract":{"type":"string","title":"Contract"},"issues":{"type":"string","title":"Issues"},"lineage":{"type":"string","title":"Lineage"},"trust_decision":{"type":"string","title":"Trust Decision"},"trust_facts":{"type":"string","title":"Trust Facts"}},"type":"object","required":["dataset","contract","issues","lineage","trust_decision","trust_facts"],"title":"TrustFactsLinksOut","description":"URLs relativos (UI e API): o consumidor junta a sua base."},"TrustFactsOwnershipOut":{"properties":{"domains":{"items":{"$ref":"#/components/schemas/TrustFactsDomainRefOut"},"type":"array","title":"Domains"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"owners":{"items":{"type":"string"},"type":"array","title":"Owners"}},"type":"object","required":["domains","owner","owners"],"title":"TrustFactsOwnershipOut"},"TrustFactsPolicyOut":{"properties":{"status":{"type":"string","enum":["off","pass","warn","fail"],"title":"Status"},"rules_active":{"type":"integer","title":"Rules Active"},"violations":{"items":{"$ref":"#/components/schemas/TrustFactsPolicyViolationOut"},"type":"array","title":"Violations"}},"type":"object","required":["status","rules_active","violations"],"title":"TrustFactsPolicyOut"},"TrustFactsPolicyViolationOut":{"properties":{"rule":{"type":"string","title":"Rule"},"severity":{"type":"string","enum":["warning","critical"],"title":"Severity"},"source":{"type":"string","title":"Source"},"columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Columns"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["rule","severity","source"],"title":"TrustFactsPolicyViolationOut","description":"`columns` e `message` só com `detail=full`."},"TrustFactsScoreOut":{"properties":{"quality":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality"},"quality_7d_ago":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality 7D Ago"},"trend_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trend 7D"},"trend_direction":{"anyOf":[{"type":"string","enum":["up","down","flat"]},{"type":"null"}],"title":"Trend Direction"},"trust":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trust"},"trust_grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trust Grade"},"trust_blocked":{"type":"boolean","title":"Trust Blocked"}},"type":"object","required":["quality","quality_7d_ago","trend_7d","trend_direction","trust","trust_grade","trust_blocked"],"title":"TrustFactsScoreOut"},"TrustFactsSensitivityOut":{"properties":{"levels":{"$ref":"#/components/schemas/SensitivityLevelCountsOut"},"columns_total":{"type":"integer","title":"Columns Total"},"columns_classified":{"type":"integer","title":"Columns Classified"},"pii_unmasked_gold":{"type":"integer","title":"Pii Unmasked Gold"},"pii_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pii Columns"},"pii_unmasked_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pii Unmasked Columns"}},"type":"object","required":["levels","columns_total","columns_classified","pii_unmasked_gold"],"title":"TrustFactsSensitivityOut","description":"`pii_columns` e `pii_unmasked_columns` só com `detail=full`."},"TrustFactsUseCaseOut":{"properties":{"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"verdict":{"anyOf":[{"type":"string","enum":["pronto","com_reservas","nao_pronto"]},{"type":"null"}],"title":"Verdict"},"blocker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocker"}},"type":"object","required":["score","verdict"],"title":"TrustFactsUseCaseOut","description":"`blocker` só com `detail=full`."},"TrustFactsVerdictOut":{"properties":{"value":{"type":"string","enum":["pass","warn","fail","unknown"],"title":"Value"},"with_policy":{"type":"boolean","title":"With Policy"},"decision":{"type":"string","enum":["trusted","caution","untrusted","unknown"],"title":"Decision"},"purpose":{"type":"string","enum":["agente","rag","treino","bi"],"title":"Purpose"},"reason_codes":{"items":{"type":"string"},"type":"array","title":"Reason Codes"},"reasons":{"anyOf":[{"items":{"$ref":"#/components/schemas/TrustReasonOut"},"type":"array"},{"type":"null"}],"title":"Reasons"}},"type":"object","required":["value","with_policy","decision","purpose","reason_codes"],"title":"TrustFactsVerdictOut","description":"`reasons` só com `detail=full`."},"TrustOut":{"properties":{"score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score"},"grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grade"},"blocked":{"type":"boolean","title":"Blocked","default":false},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cap"},"raw_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Raw Score"},"components":{"items":{"$ref":"#/components/schemas/TrustComponentOut"},"type":"array","title":"Components"},"blockers":{"items":{"$ref":"#/components/schemas/TrustBlockerOut"},"type":"array","title":"Blockers"},"warnings":{"items":{"$ref":"#/components/schemas/TrustBlockerOut"},"type":"array","title":"Warnings"},"computed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Computed At"}},"type":"object","title":"TrustOut","description":"Trust score composto e explicável (cartão #142). `score`/`grade` None =\ndataset sem scan (`reason` diz porquê). Na lista (`?include=trust`) vêm só\nscore/grade/blocked — os componentes ficam para o detalhe."},"TrustReasonOut":{"properties":{"code":{"type":"string","title":"Code"},"severity":{"type":"string","enum":["critical","warning","info"],"title":"Severity"},"message_pt":{"type":"string","title":"Message Pt"}},"type":"object","required":["code","severity","message_pt"],"title":"TrustReasonOut"},"ValidationSummaryOut":{"properties":{"records":{"type":"integer","title":"Records"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"rules":{"type":"integer","title":"Rules"},"rules_evaluated":{"type":"integer","title":"Rules Evaluated","description":"Regras avaliadas em pelo menos um registo."}},"type":"object","required":["records","passed","failed","rules","rules_evaluated"],"title":"ValidationSummaryOut"},"VerdictCountsOut":{"properties":{"pass":{"type":"integer","title":"Pass"},"warn":{"type":"integer","title":"Warn"},"fail":{"type":"integer","title":"Fail"},"unknown":{"type":"integer","title":"Unknown"}},"type":"object","required":["pass","warn","fail","unknown"],"title":"VerdictCountsOut","description":"Datasets por veredito."},"VerdictFailedRuleOut":{"properties":{"rule_type":{"type":"string","title":"Rule Type"},"column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column"},"severity":{"type":"string","title":"Severity"},"observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed"},"threshold":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Threshold"},"engine":{"type":"string","title":"Engine"}},"type":"object","required":["rule_type","column","severity","observed","threshold","engine"],"title":"VerdictFailedRuleOut","description":"Regra que falhou no último scan. `engine` = `dbt` quando a falha veio do\n`dbt test` (aí `observed` é a contagem de linhas falhadas)."},"VersionOut":{"properties":{"version":{"type":"string","title":"Version","description":"Versão do produto (semver).","examples":["1.0.0"]},"build_sha":{"type":"string","title":"Build Sha","description":"7 hex do commit da imagem a servir; `dev` fora de uma imagem publicada.","examples":["abc1234"]},"api_version":{"type":"string","title":"Api Version","description":"Versão da API pública (changelog de developers), com semver próprio.","examples":["1.18.0"]}},"type":"object","required":["version","build_sha","api_version"],"title":"VersionOut","description":"Identidade da release (cartão #312)."},"WorkspaceDimensionOut":{"properties":{"id":{"type":"string","title":"Id"},"label":{"$ref":"#/components/schemas/DimensionLabelOut"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"datasets_measured":{"type":"integer","title":"Datasets Measured"},"datasets_total":{"type":"integer","title":"Datasets Total"},"checks":{"type":"integer","title":"Checks"},"passed":{"type":"integer","title":"Passed"},"open_issues":{"type":"integer","title":"Open Issues"},"worst":{"items":{"$ref":"#/components/schemas/DimensionWorstOut"},"type":"array","title":"Worst"}},"type":"object","required":["id","label","datasets_measured","datasets_total","checks","passed","open_issues"],"title":"WorkspaceDimensionOut"},"WorstDatasetItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"score":{"type":"number","title":"Score"},"open_issues":{"type":"integer","title":"Open Issues"}},"type":"object","required":["id","name","score","open_issues"],"title":"WorstDatasetItem"},"ValidationItem":{"additionalProperties":true,"description":"Um campo recusado pela validação (422).\n\nOs campos do `ValidationError` que o FastAPI publicava antes do cartão #361.\nO `input` deixou de vir no cartão #450 (ecoava passwords) e fica descrito até\numa major: retirá-lo do schema é uma quebra (docs/api/VERSIONAMENTO.md §4).","properties":{"loc":{"description":"Onde está o campo: `query`, `path` ou `body`, e o nome.","items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"title":"Loc","type":"array"},"msg":{"description":"O motivo, legível.","title":"Msg","type":"string"},"type":{"description":"Tipo do erro de validação (ex.: `missing`, `int_parsing`).","title":"Type","type":"string"},"input":{"default":null,"description":"Já não vem na resposta (desde a API 1.65.0): ecoava o valor recebido, passwords incluídas. Fica no schema até à próxima major.","title":"Input"},"ctx":{"additionalProperties":true,"description":"Os limites da regra que recusou o valor (`gt`, `ge`, `lt`, `le`, `multiple_of`, `min_length`, `max_length`, `max_digits`, `decimal_places`), quando os há. Nunca traz o valor recebido.","title":"Ctx","type":"object"}},"required":["loc","msg","type"],"title":"ValidationItem","type":"object"},"ErrorResponse":{"additionalProperties":true,"description":"Corpo de todas as respostas de erro da API.","examples":[{"code":"token_read_only","detail":"Tokens de API são read-only — usa uma sessão de utilizador para mutações.","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"},{"code":null,"detail":"Dataset não encontrado.","request_id":"pipeline-run-42.step-3"}],"properties":{"detail":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/ValidationItem"},"type":"array"},{"additionalProperties":true,"type":"object"}],"description":"O motivo, legível; na validação (422), a lista dos campos recusados.","title":"Detail"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Código estável do erro quando existe (ex.: `auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`); senão `null`. Decide por este campo, não pelo texto de `detail`.","title":"Code"},"request_id":{"description":"O mesmo valor do header `X-Request-ID`: o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Cita-o ao suporte.","title":"Request Id","type":"string"}},"required":["detail","request_id"],"title":"ErrorResponse","type":"object"},"ValidationErrorResponse":{"additionalProperties":true,"description":"Corpo do 422 da validação: `detail` é sempre a lista dos campos recusados.","examples":[{"code":"validation_error","detail":[{"loc":["query","target"],"msg":"Field required","type":"missing"}],"request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}],"properties":{"detail":{"description":"Os campos recusados, um por item.","items":{"$ref":"#/components/schemas/ValidationItem"},"title":"Detail","type":"array"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Código estável do erro quando existe (ex.: `auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`); senão `null`. Decide por este campo, não pelo texto de `detail`.","title":"Code"},"request_id":{"description":"O mesmo valor do header `X-Request-ID`: o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Cita-o ao suporte.","title":"Request Id","type":"string"}},"required":["detail","request_id"],"title":"ValidationErrorResponse","type":"object"},"PlanLimitErrorResponse":{"additionalProperties":true,"description":"Corpo do 402: o limite do plano que o pedido atingiu.","examples":[{"code":"plan_limit","detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","limit":"compliance","plan":"pro","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}],"properties":{"detail":{"anyOf":[{"type":"string"},{"items":{"$ref":"#/components/schemas/ValidationItem"},"type":"array"},{"additionalProperties":true,"type":"object"}],"description":"O motivo, legível; na validação (422), a lista dos campos recusados.","title":"Detail"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Código estável do erro quando existe (ex.: `auth_required`, `token_invalid`, `token_read_only`, `workspace_suspended`, `plan_limit`, `validation_error`, `rate_limited`); senão `null`. Decide por este campo, não pelo texto de `detail`.","title":"Code"},"request_id":{"description":"O mesmo valor do header `X-Request-ID`: o teu, se o enviaste (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Cita-o ao suporte.","title":"Request Id","type":"string"},"plan":{"description":"O plano atual do workspace (ex.: `free`, `pro`).","title":"Plan","type":"string"},"limit":{"description":"O limite atingido: uma funcionalidade (ex.: `compliance`) ou uma quota (ex.: `rag_gate_documents_per_month`).","title":"Limit","type":"string"}},"required":["detail","request_id","plan","limit"],"title":"PlanLimitErrorResponse","type":"object"}},"responses":{"RateLimited":{"description":"Limite de pedidos atingido (`rate_limited`) ou, num pedido de scan, fila de scans do workspace cheia (`scan_queue_full`).","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"},"code":{"type":"string","description":"`rate_limited`; num pedido de scan com a fila do workspace cheia, `scan_queue_full`."},"retry_after":{"type":"integer"},"limit_scope":{"type":"string"},"request_id":{"type":"string"},"limit":{"type":"string","description":"`queued_scans`."},"queued":{"type":"integer","description":"Scans pedidos em fila ou a correr no workspace."},"max_queued":{"type":"integer","description":"Quantos o plano aceita de cada vez."},"retry_after_s":{"type":"integer","description":"Segundos até voltar a pedir o scan."}},"required":["detail"]}}}},"Unauthorized":{"description":"Token em falta (`auth_required`), inválido, expirado ou revogado (`token_invalid`).","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"detail":"Token inválido ou expirado.","code":"token_invalid","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}}},"PlanLimit":{"description":"Limite do plano do workspace (`plan_limit`); `plan` e `limit` dizem qual.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanLimitErrorResponse"},"example":{"detail":"«Dossiê de conformidade do AI Act» não está incluído no plano Team. O plano Business levanta este limite.","code":"plan_limit","plan":"pro","limit":"compliance","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}}},"Forbidden":{"description":"Método de escrita com um token só de leitura (`token_read_only`), workspace suspenso (`workspace_suspended`), quota da organização esgotada (`org_quota`, com `plan` e `limit`) ou acesso negado pela política do workspace.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"detail":"Tokens de API são read-only — usa uma sessão de utilizador para mutações.","code":"token_read_only","request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}}},"NotFound":{"description":"O recurso não existe ou pertence a outro workspace (a resposta é a mesma).","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"detail":"Dataset não encontrado.","code":null,"request_id":"7b0c1e4e-3f7a-4c1b-9a51-2d0f7f1e9c11"}}}},"ValidationFailed":{"description":"Parâmetros ou corpo inválidos (`validation_error`): `detail` lista os campos. Uma recusa da própria rota (ex.: um dataset ainda sem contagem para reconciliar) traz o motivo em texto em `detail`, na língua do pedido, e o seu `code` quando o texto está no catálogo (senão `null`).","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}}},"headers":{"Retry-After":{"description":"Segundos até poder repetir o pedido.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Pedidos permitidos na janela do limite aplicado.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Pedidos restantes na janela.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Segundos até a janela libertar o próximo pedido.","schema":{"type":"integer"}},"X-Request-ID":{"description":"Id do pedido: o que enviaste em `X-Request-ID` (1 a 64 caracteres de `[A-Za-z0-9._-]`), senão um UUID gerado. Vem também em `request_id` nos erros.","schema":{"type":"string","maxLength":64}}},"securitySchemes":{"ApiToken":{"type":"http","scheme":"bearer","bearerFormat":"dvk_<48 hex>","description":"Token de API read-only criado por um admin em Definições → Tokens de API (planos Team e superiores). Só GET, exceto `POST /rag-gate`; outros métodos → 403. Expira em `expires_at` (90 dias por omissão; os tokens anteriores ao prazo não expiram): depois disso, ou revogado, → 401. Rodar dá um token novo e o antigo vale até ao fim da graça (24 h por omissão)."}}}}