opf-br-mcp 0.9.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +22 -12
  2. package/dist/index.js +238 -49
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -10,27 +10,28 @@ acesso token-eficiente às regras do Open Finance Brasil.
10
10
 
11
11
  | Domínio | Fonte | Conteúdo |
12
12
  |---|---|---|
13
- | `pcm-additional-info` | Confluence público OFB | Regras de obrigatoriedade do `additionalInfo` (PCM) |
14
- | `payments-v4-openapi` | GitHub OpenBanking-Brasil/all-services-repo | Spec OpenAPI 4.1.0 da API de Pagamentos |
13
+ | `pcm-additional-info` | Confluence público OFB | Regras de obrigatoriedade do `additionalInfo` (PCM), incluindo Dados Abertos |
15
14
  | `payments-v5-openapi` | GitHub OpenBanking-Brasil/all-services-repo | Spec OpenAPI 5.0.0 da API de Iniciação de Pagamentos (consentimentos + Pix) |
16
15
  | `payments-v5-business-rules` | Confluence público OFB (Serviços - SV) | Regras de negócio da API de Pagamentos 5.0.0 (Escopo, Máquina de Estados, Diagrama de Sequência, Validação no DICT, Adaptações 4.0.1→5.0.0) — item por seção |
17
16
  | `enrollments-v2-openapi` | GitHub OpenBanking-Brasil/all-services-repo | Spec OpenAPI 2.3.0 da API de Vínculo de Dispositivo (Enrollments, FIDO, Pix Automático) |
18
- | `enrollments-v2-business-rules` | Confluence público OFB (Serviços - SV) | Regras de negócio do Vínculo de Dispositivo 2.2.0 (Máquina de estados, Edição do vínculo, FAQ - JSR) — item por seção |
17
+ | `enrollments-v2-business-rules` | Confluence público OFB (Serviços - SV) | Regras de negócio do Vínculo de Dispositivo 2.3.0-rc.1 (Máquina de estados, Edição do vínculo, FAQ - JSR) — item por seção |
19
18
  | `automatic-payments-v2-openapi` | GitHub OpenBanking-Brasil/all-services-repo | Spec OpenAPI 2.2.0 da API de Pagamentos Automáticos (Pix Automático e Transferências Inteligentes) |
20
19
  | `automatic-payments-v2-business-rules` | Confluence público OFB (Serviços - SV) | Regras de negócio de Pagamentos Automáticos 2.2.0 (Máquina de Estados, Edição do consentimento, Tentativas Intradia/Extradia, Adaptações 1.0.0→2.2.0) — item por seção |
21
20
  | `payments-common-rules` | Confluence público OFB (Serviços - SV) | Conteúdo comum aos produtos de Iniciação de Pagamentos (atores, Idempotência, Como Assinar o Payload, Convenções de data/fuso, Polling) — item por seção |
22
21
  | `payments-implementation-guides` | Confluence público OFB (Serviços - SV) | Guias de Implementação (Pix Automático, Agendamento Recorrente, Transferências Inteligentes, Liquidação de QR Codes) — item por seção |
23
22
  | `consents-v3-openapi` | GitHub Pages openbanking-brasil.github.io | Spec OpenAPI 3.3.1 da API de Consentimentos (Dados Cadastrais e Transacionais) |
24
23
  | `resources-v3-openapi` | GitHub Pages openbanking-brasil.github.io | Spec OpenAPI 3.1.0 da API de Recursos (`GET /resources`: status dos recursos compartilhados) |
25
- | `resources-v3-business-rules` | Confluence público OFB (Dados - DC) | Regras de negócio da API de Recursos 3.1.0 (Informações Gerais, Orientações) — item por seção |
26
- | `accounts-v2-openapi` | GitHub Pages openbanking-brasil.github.io | Spec OpenAPI 2.4.2 da API de Contas (listagem, saldos, transações, limites de cheque especial) |
27
- | `accounts-v2-business-rules` | Confluence público OFB (Dados - DC) | Regras de negócio da API de Contas 2.4.2 (Informações Gerais, Orientações — contraparte/IN BCB nº 371) — item por seção |
24
+ | `resources-v3-business-rules` | Confluence público OFB (Dados - DC) | Regras de negócio da API de Recursos 3.1.0 (Informações Gerais, Orientações, Campos regulatórios) — item por seção |
25
+ | `accounts-v2-openapi` | GitHub OpenBanking-Brasil/all-services-repo | Spec OpenAPI 2.5.1 da API de Contas (listagem, saldos, saldos reservados/caixinhas, transações, limites de cheque especial) |
26
+ | `accounts-v2-business-rules` | Confluence público OFB (Dados - DC) | Regras de negócio da API de Contas 2.5.0 (PRD, Orientações — contraparte/IN BCB nº 371) — item por seção |
28
27
  | `pcm-openapi` | GitHub OpenBanking-Brasil/pcm-specs | Spec OpenAPI da PCM (reportes, hybrid-flow, opendata, consents/stock, credit-portabilities, payments/status) |
29
- | `pcm-business-rules` | Confluence público OFB | Regras de negócio da PCM (Reporte, Processamento, Divergências, Especificação Técnica, Manual de Integração) — item por seção |
28
+ | `pcm-business-rules` | Confluence público OFB | Regras de negócio e gestão operacional da PCM (reporte, processamento, divergências, `dropReason`, descartes, não pareamento, qualidade e SLAs) — item por seção |
30
29
  | `jornada-otimizada` | Confluence público OFB | Regras da Jornada Otimizada (Orientações Gerais, Transferências Inteligentes, Jornada sem Redirecionamento) — item por seção |
31
- | `mqd` | Confluence público OFB | Motor de Qualidade de Dados (Especificação Técnica, Arquitetura, Documentação da API, Manual de Instalação, Endpoints Validados, FAQ, Troubleshooting) — item por seção |
30
+ | `mqd` | Confluence público OFB | Motor de Qualidade de Dados (especificação técnica, arquitetura e fluxos, documentação da API, instalação, endpoints validados, FAQ e troubleshooting) — item por seção |
32
31
  | `webhook-v1-openapi` | GitHub OpenBanking-Brasil/all-services-repo | Spec OpenAPI 1.3.0 da API de Webhook (notificações de mudança de estado: pagamentos, enrollments, pagamentos automáticos) |
33
- | `seguranca` | Confluence público OFB | Segurança do Open Finance Brasil (Perfil de Segurança, FAPI, DCR, CIBA, Padrão de Certificados, Assinaturas, Casos de Erro, Redirecionamento App-to-App, Glossário, Versionamento) — item por seção |
32
+ | `seguranca` | Confluence público OFB | Segurança do Open Finance Brasil (guias do usuário, Perfil de Segurança, FAPI-BR 2.2.1, DCR-BR 2.1.0, referências de CIBA, Padrão de Certificados 2.1, Assinaturas, Casos de Erro, Redirecionamento App-to-App, Glossário, Versionamento) — item por seção |
33
+ | `requisitos-nao-funcionais` | Confluence público OFB (Manual de APIs) | Requisitos não funcionais de todas as APIs (Desempenho, Disponibilidade, Timeout, Limites de tráfego, Limites operacionais, Indisponibilidade Programada) — item por seção |
34
+ | `limites-por-endpoint` | Confluence público OFB (Manual de APIs) | SLA (p95), timeout, TPM, TPS e limite operacional de cada endpoint de todas as famílias de API — um item por endpoint |
34
35
  | `participantes` | Diretório OFB (data.directory.openbankingbrasil.org.br) | Organizações participantes, marcas (authorisation servers) e famílias de API suportadas com versões — um item por organização |
35
36
  | `portal` | Confluence público OFB (busca ao vivo) | Busca CQL em todo o Portal do Desenvolvedor (espaço OF) — sem cache, `query` obrigatória; fallback quando os domínios específicos não cobrem o assunto |
36
37
 
@@ -70,7 +71,7 @@ bem na janela de contexto de um agente, e despejá-la desperdiça tokens. A solu
70
71
  apenas o mínimo necessário em cada etapa do funil:
71
72
 
72
73
  1. **`list_domains`** — catálogo barato: quais domínios e filtros existem. Os
73
- filtros idênticos a uma família inteira de domínios (os 8 `*-openapi`, os 11
74
+ filtros idênticos a uma família inteira de domínios (os 8 `*-openapi`, os 12
74
75
  de seções do Confluence) saem uma única vez em `filterSets`; cada domínio
75
76
  traz `filterSet` e só lista inline o que é próprio dele (em `*-openapi`,
76
77
  apenas `path`, cujo exemplo varia por API). Os filtros aceitos por um domínio
@@ -84,8 +85,8 @@ apenas o mínimo necessário em cada etapa do funil:
84
85
 
85
86
  Como o Swagger/OpenAPI vira dados pesquisáveis: o parser "achata" a spec em itens
86
87
  com `id` estável — um por endpoint (`type: operation`, ex.
87
- `payments-v4:POST /pix/payments`) e um por component reutilizável: `type: schema`
88
- (`payments-v4:schema:PixPayment`), `type: response` (`webhook:response:202Webhook`),
88
+ `payments:POST /pix/payments`) e um por component reutilizável: `type: schema`
89
+ (`payments:schema:PixPayment`), `type: response` (`webhook:response:202Webhook`),
89
90
  `type: parameter` (`webhook:parameter:xWebhookInteractionId`) e `type: header`
90
91
  (`payments:header:X-V`). O JSON completo de
91
92
  cada nó fica retido em `detail` até um `get_item` explícito. Os `id`s não são
@@ -167,3 +168,12 @@ npm test # vitest (fixtures locais, sem rede)
167
168
  npm run typecheck # tsc --noEmit
168
169
  npm run build # tsup → dist/
169
170
  ```
171
+
172
+ ### Skills para manutenção dos domínios
173
+
174
+ As skills do projeto ficam em `.agents/skills`:
175
+
176
+ - [auditar-dominios](.agents/skills/auditar-dominios/SKILL.md) — compara os domínios com as fontes oficiais e lista versões, páginas ou cobertura que precisam de atualização, com evidências e sem editar o projeto.
177
+ - [atualizar-dominios](.agents/skills/atualizar-dominios/SKILL.md) — aplica as atualizações solicitadas e verifica extração, fixtures, testes, tipos e build.
178
+
179
+ Exemplos de pedidos: “Use $auditar-dominios para listar os domínios desatualizados” e “Use $atualizar-dominios para atualizar Automatic Payments dentro do major atual”.
package/dist/index.js CHANGED
@@ -56,7 +56,7 @@ function isFresh(entry, ttlHours, now = /* @__PURE__ */ new Date()) {
56
56
  }
57
57
 
58
58
  // src/core/version.ts
59
- var PACKAGE_VERSION = "0.9.3";
59
+ var PACKAGE_VERSION = "1.1.0";
60
60
 
61
61
  // src/core/data.ts
62
62
  async function getDomainData(domain, force = false, ctx) {
@@ -158,6 +158,7 @@ var pcmConfig = {
158
158
  { pageId: "1621622796", title: "Inicia\xE7\xE3o de Pagamentos" },
159
159
  { pageId: "1623162886", title: "Inicia\xE7\xE3o de Pagamentos Sem Redirecionamento" },
160
160
  { pageId: "1622081540", title: "Pagamentos Autom\xE1ticos" },
161
+ { pageId: "1212088335", title: "Regras de Obrigatoriedade (additionalInfo) - DA" },
161
162
  { pageId: "1212153857", title: "Regras de Obrigatoriedade additionalInfo - SG" },
162
163
  { pageId: "1621786627", title: "DC - C\xE2mbio" },
163
164
  { pageId: "1622736899", title: "DC - Cart\xE3o de Cr\xE9dito" },
@@ -350,7 +351,7 @@ function buildItems(pages) {
350
351
  var pcmDomain = {
351
352
  id: "pcm-additional-info",
352
353
  title: "PCM \u2014 Regras de obrigatoriedade do additionalInfo",
353
- description: "Tabelas de obrigatoriedade e preenchimento do campo additionalInfo no Open Finance Brasil, extra\xEDdas do Confluence, por fam\xEDlia: Inicia\xE7\xE3o de Pagamentos (v4/v5), Sem Redirecionamento, Pagamentos Autom\xE1ticos, Seguran\xE7a (SG) e Dados/Consentimento (DC-*, v3). Cada item \xE9 um campo com regra de preenchimento, roles (CLIENT/SERVER), m\xE9todos, endpoints, vers\xF5es, tamanho m\xE1ximo e exemplo. Uma das facetas da PCM (Plataforma de Coleta de M\xE9tricas): para o swagger dos endpoints de reporte veja pcm-openapi; para as regras de neg\xF3cio (reporte, processamento, diverg\xEAncias) veja pcm-business-rules. search devolve resumos; use get_item para o registro completo.",
354
+ description: "Tabelas de obrigatoriedade e preenchimento do campo additionalInfo no Open Finance Brasil, extra\xEDdas do Confluence, por fam\xEDlia: Inicia\xE7\xE3o de Pagamentos (v4/v5), Sem Redirecionamento, Pagamentos Autom\xE1ticos, Dados Abertos (DA), Seguran\xE7a (SG) e Dados/Consentimento (DC-*, v3). Cada item \xE9 um campo com regra de preenchimento, roles (CLIENT/SERVER), m\xE9todos, endpoints, vers\xF5es, tamanho m\xE1ximo e exemplo. Uma das facetas da PCM (Plataforma de Coleta de M\xE9tricas): para o swagger dos endpoints de reporte veja pcm-openapi; para as regras de neg\xF3cio (reporte, processamento, diverg\xEAncias) veja pcm-business-rules. search devolve resumos; use get_item para o registro completo.",
354
355
  ttlHours: 72,
355
356
  filters: [
356
357
  { name: "field", description: "Match exato no nome do campo (case-insensitive)" },
@@ -535,26 +536,11 @@ function createOpenApiDomain(config) {
535
536
  };
536
537
  }
537
538
 
538
- // src/domains/payments-v4-openapi/config.ts
539
- var paymentsConfig = {
540
- id: "payments-v4-openapi",
541
- title: "API de Pagamentos \u2014 spec OpenAPI 4.1.0",
542
- description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 4. Mesma fam\xEDlia da payments-v5-openapi (major mais recente); escolha o dom\xEDnio pela vers\xE3o que seu caso usa. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response e type=parameter. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
543
- pathExample: "/pix/payments",
544
- specName: "payments",
545
- specVersion: "4.1.0",
546
- url: "https://raw.githubusercontent.com/OpenBanking-Brasil/all-services-repo/refs/heads/main/api_payment_initiation_-_open_finance_brasil/4.1.0.yaml",
547
- retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
548
- };
549
-
550
- // src/domains/payments-v4-openapi/index.ts
551
- var paymentsDomain = createOpenApiDomain(paymentsConfig);
552
-
553
539
  // src/domains/payments-v5-openapi/config.ts
554
540
  var paymentsV5Config = {
555
541
  id: "payments-v5-openapi",
556
542
  title: "API de Pagamentos \u2014 spec OpenAPI 5.0.0",
557
- description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 5 (major mais recente). Mesma fam\xEDlia da payments-v4-openapi; escolha o dom\xEDnio pela vers\xE3o que seu caso usa. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response, type=parameter e type=header. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
543
+ description: "Spec OpenAPI oficial da API de Inicia\xE7\xE3o de Pagamentos (Pix) do Open Finance Brasil, vers\xE3o 5. Itens type=operation (endpoints, um por m\xE9todo+path), type=schema (payloads) e os components reutiliz\xE1veis alvos dos $ref: type=response, type=parameter e type=header. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
558
544
  pathExample: "/pix/payments",
559
545
  specName: "payments",
560
546
  specVersion: "5.0.0",
@@ -720,16 +706,16 @@ var enrollmentsV2Domain = createOpenApiDomain(enrollmentsV2Config);
720
706
  var enrollmentsV2BusinessRulesConfig = {
721
707
  id: "enrollments-v2-business-rules",
722
708
  title: "API de V\xEDnculo de Dispositivo v2 \u2014 Regras de neg\xF3cio (SV)",
723
- specVersion: "2.2.0",
724
- description: "Regras de neg\xF3cio da API de V\xEDnculo de Dispositivo (Enrollments / Jornada Sem Redirecionamento) vers\xE3o 2.2.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Servi\xE7os (SV): Informa\xE7\xF5es Gerais, M\xE1quina de estados (vincula\xE7\xE3o de conta, autoriza\xE7\xE3o de consentimento e do consentimento recorrente), Edi\xE7\xE3o do v\xEDnculo de dispositivo (campos edit\xE1veis e condi\xE7\xF5es) e FAQ - JSR (perguntas e respostas por categoria). Complementa enrollments-v2-openapi, que traz a spec (endpoints e schemas) do mesmo major \u2014 hoje na 2.3.0, enquanto estas p\xE1ginas do Confluence ainda s\xE3o as da 2.2.0. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
709
+ specVersion: "2.3.0-rc.1",
710
+ description: "Regras de neg\xF3cio da API de V\xEDnculo de Dispositivo (Enrollments / Jornada Sem Redirecionamento) vers\xE3o 2.3.0-rc.1 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Servi\xE7os (SV): Informa\xE7\xF5es Gerais, M\xE1quina de estados (vincula\xE7\xE3o de conta, autoriza\xE7\xE3o de consentimento e do consentimento recorrente), Edi\xE7\xE3o do v\xEDnculo de dispositivo (campos edit\xE1veis e condi\xE7\xF5es) e FAQ - JSR (perguntas e respostas por categoria). Complementa enrollments-v2-openapi, que traz a spec (endpoints e schemas) do mesmo major \u2014 hoje na 2.3.0 est\xE1vel. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
725
711
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
726
712
  interRequestDelayMs: 2e3,
727
713
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
728
714
  pages: [
729
- { pageId: "1436516369", title: "Informa\xE7\xF5es Gerais - V\xEDnculo de dispositivo v2.2.0" },
730
- { pageId: "1436516401", title: "M\xE1quina de estados - V\xEDnculo de dispositivo v2.2.0" },
731
- { pageId: "1436516593", title: "Edi\xE7\xE3o do v\xEDnculo de dispositivo - v2.2.0" },
732
- { pageId: "1436516567", title: "FAQ - JSR - V\xEDnculo de dispositivo v2.2.0" }
715
+ { pageId: "2025424962", title: "Informa\xE7\xF5es Gerais - V\xEDnculo de dispositivo v2.3.0-rc.1" },
716
+ { pageId: "2025424995", title: "M\xE1quina de estados - V\xEDnculo de dispositivo v2.3.0-rc.1" },
717
+ { pageId: "2025425190", title: "Edi\xE7\xE3o do v\xEDnculo de dispositivo - v2.3.0-rc.1" },
718
+ { pageId: "2025425163", title: "FAQ - JSR - V\xEDnculo de dispositivo v2.3.0-rc.1" }
733
719
  ]
734
720
  };
735
721
 
@@ -822,7 +808,7 @@ var paymentsImplementationGuidesDomain = createConfluenceSectionsDomain(
822
808
  var consentsV3Config = {
823
809
  id: "consents-v3-openapi",
824
810
  title: "API de Consentimentos \u2014 spec OpenAPI 3.3.1",
825
- description: "Spec OpenAPI oficial da API de Consentimentos de compartilhamento de dados (Dados Cadastrais e Transacionais) do Open Finance Brasil, vers\xE3o 3.3.1. \xC9 o consentimento de dados \u2014 n\xE3o cobre consentimento de pagamento, que fica em payments-v4/v5-openapi (/consents) e automatic-payments-v2-openapi (/recurring-consents). Cobre cria\xE7\xE3o (POST /consents), consulta (GET /consents/{consentId}), revoga\xE7\xE3o (DELETE /consents/{consentId}), renova\xE7\xE3o (POST /consents/{consentId}/extends) e hist\xF3rico de renova\xE7\xF5es (GET /consents/{consentId}/extensions). Itens type=operation (um por m\xE9todo+path), type=schema (payloads, ex.: CreateConsent, ResponseConsent, LoggedUser, BusinessEntity) e os components reutiliz\xE1veis alvos dos $ref: type=response (BadRequest, UnprocessableEntity, ...) e type=parameter (Authorization, xFapiInteractionId, ...). search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
811
+ description: "Spec OpenAPI oficial da API de Consentimentos de compartilhamento de dados (Dados Cadastrais e Transacionais) do Open Finance Brasil, vers\xE3o 3.3.1. \xC9 o consentimento de dados \u2014 n\xE3o cobre consentimento de pagamento, que fica em payments-v5-openapi (/consents) e automatic-payments-v2-openapi (/recurring-consents). Cobre cria\xE7\xE3o (POST /consents), consulta (GET /consents/{consentId}), revoga\xE7\xE3o (DELETE /consents/{consentId}), renova\xE7\xE3o (POST /consents/{consentId}/extends) e hist\xF3rico de renova\xE7\xF5es (GET /consents/{consentId}/extensions). Itens type=operation (um por m\xE9todo+path), type=schema (payloads, ex.: CreateConsent, ResponseConsent, LoggedUser, BusinessEntity) e os components reutiliz\xE1veis alvos dos $ref: type=response (BadRequest, UnprocessableEntity, ...) e type=parameter (Authorization, xFapiInteractionId, ...). search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
826
812
  pathExample: "/consents/{consentId}",
827
813
  specName: "consents",
828
814
  specVersion: "3.3.1",
@@ -853,13 +839,14 @@ var resourcesV3BusinessRulesConfig = {
853
839
  id: "resources-v3-business-rules",
854
840
  title: "API de Recursos v3 \u2014 Regras de neg\xF3cio (DC)",
855
841
  specVersion: "3.1.0",
856
- description: "Regras de neg\xF3cio da API de Recursos (Resources) vers\xE3o 3.1.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Dados Cadastrais e Transacionais (DC): Informa\xE7\xF5es Gerais (vis\xE3o geral do GET /resources/v3/resources, status do recurso versus status do consentimento) e Orienta\xE7\xF5es - [DC] Recursos (quando um recurso volta a ficar dispon\xEDvel, uso do status code de erro apropriado quando a transmissora n\xE3o retorna as informa\xE7\xF5es) \u2014 esta \xFAltima n\xE3o \xE9 versionada e vale para todo o major v3. Complementa resources-v3-openapi, que traz a spec (endpoints e schemas) do mesmo major. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
842
+ description: "Regras de neg\xF3cio da API de Recursos (Resources) vers\xE3o 3.1.0 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Dados Cadastrais e Transacionais (DC): Informa\xE7\xF5es Gerais (vis\xE3o geral do GET /resources/v3/resources, status do recurso versus status do consentimento) e Orienta\xE7\xF5es - [DC] Recursos (quando um recurso volta a ficar dispon\xEDvel, uso do status code de erro apropriado quando a transmissora n\xE3o retorna as informa\xE7\xF5es) \u2014 esta \xFAltima n\xE3o \xE9 versionada e vale para todo o major v3 \u2014 e Campos regulat\xF3rios (obrigatoriedade regulat\xF3ria dos campos da resposta de GET /resources). Complementa resources-v3-openapi, que traz a spec (endpoints e schemas) do mesmo major. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
857
843
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
858
844
  interRequestDelayMs: 2e3,
859
845
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
860
846
  pages: [
861
847
  { pageId: "1267990545", title: "Informa\xE7\xF5es Gerais - [DC] Recursos - v3.1.0" },
862
- { pageId: "219512943", title: "Orienta\xE7\xF5es - [DC] Recursos" }
848
+ { pageId: "219512943", title: "Orienta\xE7\xF5es - [DC] Recursos" },
849
+ { pageId: "219480528", title: "Campos regulat\xF3rios - [DC] Recursos" }
863
850
  ]
864
851
  };
865
852
 
@@ -871,12 +858,14 @@ var resourcesV3BusinessRulesDomain = createConfluenceSectionsDomain(
871
858
  // src/domains/accounts-v2-openapi/config.ts
872
859
  var accountsV2Config = {
873
860
  id: "accounts-v2-openapi",
874
- title: "API de Contas \u2014 spec OpenAPI 2.4.2",
875
- description: "Spec OpenAPI oficial da API de Contas (Accounts) do Open Finance Brasil, vers\xE3o 2.4.2 \u2014 compartilhamento de contas de dep\xF3sito \xE0 vista, poupan\xE7a e pagamento pr\xE9-paga. Cobre listagem (GET /accounts), identifica\xE7\xE3o (GET /accounts/{accountId}), saldos (GET /accounts/{accountId}/balances), transa\xE7\xF5es (GET /accounts/{accountId}/transactions e /transactions-current) e limites de cheque especial (GET /accounts/{accountId}/overdraft-limits). \xC9 API de Dados Cadastrais e Transacionais: o consentimento que a habilita fica em consents-v3-openapi, e a listagem de recursos compartilhados em resources-v3-openapi. Itens type=operation (um por m\xE9todo+path), type=schema (payloads, ex.: AccountData, AccountBalancesData, AccountTransactionsData) e os components alvos dos $ref: type=response e type=parameter. Regras de neg\xF3cio da mesma API em accounts-v2-business-rules. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
861
+ title: "API de Contas \u2014 spec OpenAPI 2.5.1",
862
+ description: "Spec OpenAPI oficial da API de Contas (Accounts) do Open Finance Brasil, vers\xE3o 2.5.1 \u2014 compartilhamento de contas de dep\xF3sito \xE0 vista, poupan\xE7a e pagamento pr\xE9-paga. Cobre listagem (GET /accounts), identifica\xE7\xE3o (GET /accounts/{accountId}), saldos (GET /accounts/{accountId}/balances), saldos reservados/caixinhas (GET /accounts/{accountId}/reserved-balances, novo na 2.5.0), transa\xE7\xF5es (GET /accounts/{accountId}/transactions e /transactions-current) e limites de cheque especial (GET /accounts/{accountId}/overdraft-limits). \xC9 API de Dados Cadastrais e Transacionais: o consentimento que a habilita fica em consents-v3-openapi, e a listagem de recursos compartilhados em resources-v3-openapi. Itens type=operation (um por m\xE9todo+path), type=schema (payloads, ex.: AccountData, AccountBalancesData, AccountReservedBalancesData, AccountTransactionsData) e os components alvos dos $ref: type=response, type=parameter e type=header. Regras de neg\xF3cio da mesma API em accounts-v2-business-rules. search devolve resumos; use get_item para o n\xF3 completo da spec \u2014 nas opera\xE7\xF5es o campo `refs` traz os ids dos components referenciados, prontos para get_item.",
876
863
  pathExample: "/accounts/{accountId}/transactions",
877
864
  specName: "accounts",
878
- specVersion: "2.4.2",
879
- url: "https://openbanking-brasil.github.io/openapi/swagger-apis/accounts/2.4.2.yml",
865
+ specVersion: "2.5.1",
866
+ // A partir da 2.5.0 as versões estáveis de Contas só saem no all-services-repo:
867
+ // github.io/openapi/swagger-apis/accounts para na 2.4.2 estável.
868
+ url: "https://raw.githubusercontent.com/OpenBanking-Brasil/all-services-repo/refs/heads/main/api_accounts_-_open_finance_brasil/2.5.1.yaml",
880
869
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
881
870
  };
882
871
 
@@ -887,13 +876,19 @@ var accountsV2Domain = createOpenApiDomain(accountsV2Config);
887
876
  var accountsV2BusinessRulesConfig = {
888
877
  id: "accounts-v2-business-rules",
889
878
  title: "API de Contas v2 \u2014 Regras de neg\xF3cio (DC)",
890
- specVersion: "2.4.2",
891
- description: "Regras de neg\xF3cio da API de Contas (Accounts) vers\xE3o 2.4.2 do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Dados Cadastrais e Transacionais (DC): Informa\xE7\xF5es Gerais (vis\xE3o geral dos endpoints, contas de dep\xF3sito \xE0 vista/poupan\xE7a/pagamento pr\xE9-paga, saldos, transa\xE7\xF5es e limites) e Orienta\xE7\xF5es - [DC] Contas (obrigatoriedade de informa\xE7\xF5es de contraparte pela IN BCB n\xBA 371, tratamento de transa\xE7\xF5es e casos de borda) \u2014 esta \xFAltima n\xE3o \xE9 versionada e vale para todo o major v2. Complementa accounts-v2-openapi, que traz a spec (endpoints e schemas) do mesmo major. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
879
+ specVersion: "2.5.0",
880
+ description: "Regras de neg\xF3cio da API de Contas (Accounts) do Open Finance Brasil, extra\xEDdas das p\xE1ginas Confluence de Dados Cadastrais e Transacionais (DC): o PRD (Documento de Requisito do Produto) da v2.5.0 \u2014 escopo, funcionalidades e regras por assunto (listagem de contas, transa\xE7\xF5es, limites e saldos reservados/caixinhas), com escopo e permissions de cada um \u2014 e Orienta\xE7\xF5es - [DC] Contas (obrigatoriedade de informa\xE7\xF5es de contraparte pela IN BCB n\xBA 371, tratamento de transa\xE7\xF5es e casos de borda), esta \xFAltima n\xE3o versionada e v\xE1lida para todo o major v2. Complementa accounts-v2-openapi, que traz a spec (endpoints e schemas) do mesmo major \u2014 hoje na 2.5.1, enquanto o PRD do Confluence \xE9 o da 2.5.0. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
892
881
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
893
882
  interRequestDelayMs: 2e3,
894
883
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
884
+ // A árvore [DC] API - Contas foi reorganizada: as páginas "Informações Gerais -
885
+ // [DC] Contas - vX" foram para "Histórico de Especificações" (subárvore arquivada,
886
+ // fora da convenção do projeto) e o container v2.5.0 só guarda swagger e changelogs.
887
+ // O conteúdo normativo passou a ser o PRD, sob "Documentação Negocial - API de Contas".
888
+ // Fora da lista: "Diagrama de Sequencia da Jornada - API Contas" (1739063297), que é
889
+ // só uma imagem, sem headings nem texto.
895
890
  pages: [
896
- { pageId: "979566625", title: "Informa\xE7\xF5es Gerais - [DC] Contas - v2.4.2" },
891
+ { pageId: "1738965008", title: "Documento de Requisito do Produto (PRD) - API de Contas v2.5.0" },
897
892
  { pageId: "1739096252", title: "Orienta\xE7\xF5es - [DC] Contas" }
898
893
  ]
899
894
  };
@@ -906,9 +901,12 @@ var accountsV2BusinessRulesDomain = createConfluenceSectionsDomain(
906
901
  // src/domains/pcm-openapi/config.ts
907
902
  var pcmOpenapiConfig = {
908
903
  specName: "pcm",
909
- // A spec da PCM não declara `info.version` (o campo `openapi:` traz um valor
910
- // fora do padrão). Identificar pelo commit é o único rótulo verificável — e
911
- // deixa explícito, em list_domains, que este domínio está congelado no SHA.
904
+ // A spec da PCM declara `info.version: 1.0.0`, um placeholder que nunca muda —
905
+ // a versão real da PCM vai no campo `openapi:` (3.9.2 neste commit), fora do
906
+ // padrão. Identificar pelo commit é o único rótulo verificável — e deixa
907
+ // explícito, em list_domains, que este domínio está congelado no SHA.
908
+ // Não mover o pin sem checar o conteúdo: o head atual do branch (48e7632) troca
909
+ // `openapi: 3.9.2` por `3.0.0`, ou seja, apaga o único sinal de versão da PCM.
912
910
  specVersion: "commit 8a7f7b0",
913
911
  url: "https://raw.githubusercontent.com/OpenBanking-Brasil/pcm-specs/8a7f7b03ddfab7eaf97bcfe68e67fac22a5eeb68/PCM-current.openapi.yaml",
914
912
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3]
@@ -926,8 +924,8 @@ var pcmOpenapiDomain = createOpenApiDomain({
926
924
  // src/domains/pcm-business-rules/config.ts
927
925
  var pcmBusinessRulesConfig = {
928
926
  id: "pcm-business-rules",
929
- title: "PCM \u2014 Regras de neg\xF3cio (Reporte, Processamento, Diverg\xEAncias)",
930
- description: "Regras de neg\xF3cio da PCM (Plataforma de Coleta de M\xE9tricas) do Open Finance Brasil \u2014 como funcionam reporte, processamento, fechamento e diverg\xEAncias \u2014, extra\xEDdas das p\xE1ginas Confluence: Especifica\xE7\xE3o T\xE9cnica, Reporte, Processamento, Diverg\xEAncias e Manual de Integra\xE7\xE3o. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. Outras facetas da PCM: o swagger dos endpoints de reporte em pcm-openapi; as tabelas de obrigatoriedade do campo additionalInfo em pcm-additional-info. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
927
+ title: "PCM \u2014 Regras de neg\xF3cio e gest\xE3o operacional",
928
+ description: "Regras de neg\xF3cio da PCM (Plataforma de Coleta de M\xE9tricas) do Open Finance Brasil \u2014 como funcionam reporte, processamento, fechamento, diverg\xEAncias, dropReason e gest\xE3o operacional de descartes, n\xE3o pareamento, qualidade e SLAs \u2014, extra\xEDdas das p\xE1ginas funcionais e operacionais do Confluence. Cada item \xE9 uma se\xE7\xE3o (heading) da p\xE1gina. Outras facetas da PCM: o swagger dos endpoints de reporte em pcm-openapi; as tabelas de obrigatoriedade do campo additionalInfo em pcm-additional-info. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
931
929
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
932
930
  interRequestDelayMs: 2e3,
933
931
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
@@ -936,7 +934,14 @@ var pcmBusinessRulesConfig = {
936
934
  { pageId: "37945368", title: "Reporte, Processamento e Diverg\xEAncias" },
937
935
  { pageId: "37879861", title: "Reporte" },
938
936
  { pageId: "37912631", title: "Processamento" },
939
- { pageId: "37945515", title: "Manual de Integra\xE7\xE3o" }
937
+ { pageId: "37945515", title: "Manual de Integra\xE7\xE3o" },
938
+ { pageId: "1989836847", title: "Campo dropReason \u2014 Documenta\xE7\xE3o Funcional para Organiza\xE7\xF5es" },
939
+ { pageId: "1212088347", title: "Reportes Descartados" },
940
+ { pageId: "1212252161", title: "Reportes N\xE3o Pareados" },
941
+ { pageId: "1212219393", title: "Qualidade de Dados" },
942
+ { pageId: "1212186625", title: "SLA de Envio de Reportes - 95% at\xE9 08:00h de D+1" },
943
+ { pageId: "1506934785", title: "SLA de Envio de Reportes - 99% at\xE9 7 dias da transa\xE7\xE3o" },
944
+ { pageId: "1558675457", title: "SLA de Envio - Estados de Pagamento - SV" }
940
945
  ]
941
946
  };
942
947
 
@@ -966,13 +971,18 @@ var jornadaOtimizadaDomain = createConfluenceSectionsDomain(jornadaOtimizadaConf
966
971
  var mqdConfig = {
967
972
  id: "mqd",
968
973
  title: "Motor de Qualidade de Dados (MQD)",
969
- description: "Conhecimento regulat\xF3rio do Motor de Qualidade de Dados (MQD) do Open Finance Brasil, extra\xEDdo das p\xE1ginas Confluence: Especifica\xE7\xE3o T\xE9cnica, Arquitetura, Documenta\xE7\xE3o da API, Manual de Instala\xE7\xE3o, Tabela de Endpoints Validados, FAQ e Troubleshooting. Cada item \xE9 uma se\xE7\xE3o (heading) de uma p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o. A spec OpenAPI do MQD est\xE1 inclu\xEDda como conte\xFAdo da se\xE7\xE3o da p\xE1gina Documenta\xE7\xE3o da API.",
974
+ description: "Conhecimento regulat\xF3rio do Motor de Qualidade de Dados (MQD) do Open Finance Brasil, extra\xEDdo das p\xE1ginas Confluence de especifica\xE7\xE3o t\xE9cnica, arquitetura (incluindo proxy reverso e fluxos de envio de resultados, atualiza\xE7\xE3o de configura\xE7\xE3o, valida\xE7\xE3o e receptora), documenta\xE7\xE3o da API, instala\xE7\xE3o, endpoints validados, FAQ e troubleshooting. Cada item \xE9 uma se\xE7\xE3o (heading) de uma p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o. A spec OpenAPI do MQD est\xE1 inclu\xEDda como conte\xFAdo da se\xE7\xE3o da p\xE1gina Documenta\xE7\xE3o da API.",
970
975
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
971
976
  interRequestDelayMs: 2e3,
972
977
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
973
978
  pages: [
974
979
  { pageId: "362578617", title: "Especifica\xE7\xE3o T\xE9cnica" },
975
980
  { pageId: "362578657", title: "Arquitetura" },
981
+ { pageId: "362578698", title: "MQD - Proxy reverso" },
982
+ { pageId: "362578754", title: "MQD - Fluxo de Envio de Resultados" },
983
+ { pageId: "362578786", title: "MQD - Fluxo de Atualiza\xE7\xE3o de Configura\xE7\xE3o" },
984
+ { pageId: "362578818", title: "MQD - Fluxo de Valida\xE7\xE3o" },
985
+ { pageId: "362578884", title: "MQD - Fluxo da Receptora" },
976
986
  { pageId: "362578918", title: "Documenta\xE7\xE3o da API" },
977
987
  { pageId: "362578967", title: "Manual de Instala\xE7\xE3o" },
978
988
  { pageId: "619413971", title: "Tabela de Endpoints Validados" },
@@ -1003,20 +1013,30 @@ var webhookDomain = createOpenApiDomain(webhookConfig);
1003
1013
  var segurancaConfig = {
1004
1014
  id: "seguranca",
1005
1015
  title: "Seguran\xE7a",
1006
- description: "Conhecimento regulat\xF3rio de Seguran\xE7a do Open Finance Brasil, extra\xEDdo das p\xE1ginas Confluence sob a \xE1rvore Seguran\xE7a: Vis\xE3o Geral, Introdu\xE7\xE3o, Guia do Usu\xE1rio, Perfil de Seguran\xE7a (DCR, FAPI, CIBA, criptografia de ID_TOKEN), Padr\xE3o de Certificados e diretrizes de valida\xE7\xE3o, Assinaturas, Casos de Erro, Redirecionamento App-to-App, Gloss\xE1rio e Pol\xEDtica de Versionamento. Cada item \xE9 uma se\xE7\xE3o (heading) de uma p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
1016
+ description: "Conhecimento regulat\xF3rio de Seguran\xE7a do Open Finance Brasil, extra\xEDdo das p\xE1ginas Confluence sob a \xE1rvore Seguran\xE7a: Vis\xE3o Geral, Introdu\xE7\xE3o, guias para transmissoras e receptoras/iniciadoras, Perfil de Seguran\xE7a, DCR-BR 2.1.0, FAPI-BR 2.2.1, refer\xEAncias de CIBA, criptografia de ID_TOKEN, Padr\xE3o de Certificados 2.1 e diretrizes de valida\xE7\xE3o, Assinaturas, Casos de Erro, Redirecionamento App-to-App, Gloss\xE1rio e Pol\xEDtica de Versionamento. Cada item \xE9 uma se\xE7\xE3o (heading) de uma p\xE1gina. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
1007
1017
  confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
1008
1018
  interRequestDelayMs: 2e3,
1009
1019
  retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
1010
1020
  pages: [
1011
1021
  { pageId: "240648227", title: "Vis\xE3o Geral" },
1012
1022
  { pageId: "240648385", title: "Introdu\xE7\xE3o" },
1013
- { pageId: "240648471", title: "Guia do Usu\xE1rio" },
1023
+ {
1024
+ pageId: "240648513",
1025
+ title: "[PT] Guia do Usu\xE1rio para Entidades Transmissoras de Dados (ASPSP)"
1026
+ },
1027
+ {
1028
+ pageId: "240648607",
1029
+ title: "[PT] Guia do Usu\xE1rio para Institui\xE7\xF5es Receptores de Dados e Iniciadores de Pagamento (TTP/PISP)"
1030
+ },
1014
1031
  { pageId: "240648789", title: "Perfil de Seguran\xE7a" },
1015
- { pageId: "240649257", title: "DCR - Dynamic Client Registration" },
1016
- { pageId: "1799421990", title: "FAPI - Financial-grade API Security Profile" },
1032
+ { pageId: "1334116369", title: "[PT] Open Finance Brasil Dynamic Client Registration - v2.1.0" },
1033
+ {
1034
+ pageId: "1957625902",
1035
+ title: "[PT] Open Finance Brasil Financial-grade API Security Profile - v2.2.1"
1036
+ },
1017
1037
  { pageId: "1799946241", title: "CIBA - Client Initiated Backchannel Authentication" },
1018
1038
  { pageId: "240649215", title: "Requisitos de criptografia ID_TOKEN" },
1019
- { pageId: "240649813", title: "Padr\xE3o de Certificados" },
1039
+ { pageId: "245694518", title: "[PT] Padr\xE3o de Certificados Open Finance Brasil 2.1" },
1020
1040
  { pageId: "1799946375", title: "Diretrizes para valida\xE7\xE3o de certificados digitais" },
1021
1041
  { pageId: "240650189", title: "Assinaturas" },
1022
1042
  { pageId: "240650255", title: "Casos de Erro" },
@@ -1024,14 +1044,182 @@ var segurancaConfig = {
1024
1044
  { pageId: "240650381", title: "Gloss\xE1rio de Seguran\xE7a" },
1025
1045
  { pageId: "240650571", title: "Versionamento - Tipos" },
1026
1046
  { pageId: "240650601", title: "Versionamento - Ciclo de Vida" },
1027
- { pageId: "240650643", title: "Versionamento - Fluxo de especifica\xE7\xE3o" },
1028
- { pageId: "240650712", title: "Versionamento - Change log" }
1047
+ { pageId: "240650643", title: "Versionamento - Fluxo de especifica\xE7\xE3o" }
1029
1048
  ]
1030
1049
  };
1031
1050
 
1032
1051
  // src/domains/seguranca/index.ts
1033
1052
  var segurancaDomain = createConfluenceSectionsDomain(segurancaConfig);
1034
1053
 
1054
+ // src/domains/requisitos-nao-funcionais/config.ts
1055
+ var requisitosNaoFuncionaisConfig = {
1056
+ id: "requisitos-nao-funcionais",
1057
+ title: "Requisitos n\xE3o Funcionais \u2014 SLA, disponibilidade e limites (Manual de APIs)",
1058
+ description: "Requisitos n\xE3o funcionais que valem para todas as APIs do Open Finance Brasil, extra\xEDdos das p\xE1ginas Confluence do Manual de APIs: Desempenho (SLA do percentil 95 do tempo de resposta por faixa de frequ\xEAncia do endpoint), Disponibilidade (m\xEDnimos por 24h e por trimestre), Timeout, Limites de tr\xE1fego (TPM por origem e TPS globais), Limites operacionais (teto de consultas por m\xEAs, por endpoint e por recurso, e pagina\xE7\xE3o com pagination-key) e Indisponibilidade Programada. Os n\xFAmeros por endpoint (SLA, timeout, TPM, TPS e limite operacional de cada rota) est\xE3o em limites-por-endpoint, um registro por endpoint. Cada item aqui \xE9 uma se\xE7\xE3o (heading) da p\xE1gina \u2014 as p\xE1ginas Desempenho e Timeout n\xE3o t\xEAm headings e viram um \xFAnico item `intro` cada, ent\xE3o nelas filtre por page ou contains, n\xE3o por heading. search devolve um snippet do conte\xFAdo; use get_item para o texto completo da se\xE7\xE3o.",
1059
+ confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
1060
+ interRequestDelayMs: 2e3,
1061
+ retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
1062
+ // Fora da lista: a página-mãe "Requisitos não Funcionais" (17956981), que só
1063
+ // nomeia as quatro faixas de frequência sem defini-las (página índice), e a
1064
+ // página "Referência" (17957025), cujas tabelas de limites por endpoint têm
1065
+ // parser próprio no domínio limites-por-endpoint.
1066
+ pages: [
1067
+ { pageId: "17891396", title: "Desempenho" },
1068
+ { pageId: "17891406", title: "Disponibilidade" },
1069
+ { pageId: "17891413", title: "Timeout" },
1070
+ { pageId: "17989722", title: "Limites de tr\xE1fego" },
1071
+ { pageId: "17924220", title: "Limites operacionais" },
1072
+ { pageId: "1808269313", title: "Indisponibilidade Programada" }
1073
+ ]
1074
+ };
1075
+
1076
+ // src/domains/requisitos-nao-funcionais/index.ts
1077
+ var requisitosNaoFuncionaisDomain = createConfluenceSectionsDomain(
1078
+ requisitosNaoFuncionaisConfig
1079
+ );
1080
+
1081
+ // src/domains/limites-por-endpoint/config.ts
1082
+ var limitesPorEndpointConfig = {
1083
+ confluenceBaseUrl: "https://openfinancebrasil.atlassian.net",
1084
+ retryDelaysMs: [2e3, 4e3, 8e3, 16e3],
1085
+ // Página única: a tabela "Referência" do Manual de APIs, com uma tabela por
1086
+ // família de API e uma linha por endpoint.
1087
+ pageId: "17957025",
1088
+ pageTitle: "Refer\xEAncia"
1089
+ };
1090
+
1091
+ // src/domains/limites-por-endpoint/parser.ts
1092
+ import * as cheerio3 from "cheerio";
1093
+ var HTTP_METHODS2 = /* @__PURE__ */ new Set(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]);
1094
+ function cellText3($, el) {
1095
+ const clone = $(el).clone();
1096
+ clone.find("br").replaceWith("\n");
1097
+ return clone.text().replace(/[​‌‍]/g, "").replace(/ /g, " ").replace(/\s+/g, " ").trim();
1098
+ }
1099
+ function headerKey(raw) {
1100
+ const h = raw.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase().trim();
1101
+ if (h.startsWith("endpoint")) return "path";
1102
+ if (h.startsWith("frequencia")) return "frequencia";
1103
+ if (h.startsWith("sla")) return "slaMs";
1104
+ if (h.startsWith("timeout")) return "timeoutS";
1105
+ if (h.startsWith("limite operacional")) return "limiteOperacional";
1106
+ if (h === "tpm") return "tpm";
1107
+ if (h === "tps") return "tps";
1108
+ return null;
1109
+ }
1110
+ function splitEndpoint(cell) {
1111
+ const [first, ...rest] = cell.split(" ");
1112
+ if (HTTP_METHODS2.has(first.toUpperCase()) && rest.length > 0) {
1113
+ return { metodo: first.toUpperCase(), path: rest.join(" ") };
1114
+ }
1115
+ return { metodo: null, path: cell };
1116
+ }
1117
+ function parseEndpointLimits(html) {
1118
+ const $ = cheerio3.load(html);
1119
+ $("style, script").remove();
1120
+ const limits = [];
1121
+ for (const table of $("table").toArray()) {
1122
+ const rows = $(table).find("tr").toArray();
1123
+ const cellsOf = (tr) => $(tr).find("th, td").toArray().map((c) => cellText3($, c));
1124
+ const headerIdx = rows.findIndex(
1125
+ (tr) => cellsOf(tr).some((c) => headerKey(c) === "path")
1126
+ );
1127
+ if (headerIdx === -1) continue;
1128
+ const api = rows.slice(0, headerIdx).map((tr) => cellsOf(tr).filter(Boolean).join(" ")).filter(Boolean).join(" ").trim();
1129
+ const keys = cellsOf(rows[headerIdx]).map(headerKey);
1130
+ for (const tr of rows.slice(headerIdx + 1)) {
1131
+ const cells = cellsOf(tr);
1132
+ const limit = {
1133
+ api,
1134
+ metodo: null,
1135
+ path: "",
1136
+ frequencia: null,
1137
+ slaMs: null,
1138
+ timeoutS: null,
1139
+ tpm: null,
1140
+ tps: null,
1141
+ limiteOperacional: null
1142
+ };
1143
+ cells.forEach((text2, i) => {
1144
+ const key = keys[i];
1145
+ if (!key || !text2) return;
1146
+ if (key === "path") {
1147
+ const { metodo, path } = splitEndpoint(text2);
1148
+ limit.metodo = metodo;
1149
+ limit.path = path;
1150
+ } else {
1151
+ limit[key] = text2;
1152
+ }
1153
+ });
1154
+ if (limit.path) limits.push(limit);
1155
+ }
1156
+ }
1157
+ return limits;
1158
+ }
1159
+
1160
+ // src/domains/limites-por-endpoint/index.ts
1161
+ function slugify3(text2) {
1162
+ return text2.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
1163
+ }
1164
+ function buildItems3(page, limits) {
1165
+ const items = [];
1166
+ const seen = /* @__PURE__ */ new Map();
1167
+ for (const limit of limits) {
1168
+ const base = `${page.pageId}:${slugify3(`${limit.api} ${limit.metodo ?? ""} ${limit.path}`)}`;
1169
+ const count = (seen.get(base) ?? 0) + 1;
1170
+ seen.set(base, count);
1171
+ items.push({ ...limit, id: count > 1 ? `${base}-${count}` : base, page });
1172
+ }
1173
+ return items;
1174
+ }
1175
+ var limitesPorEndpointDomain = {
1176
+ id: "limites-por-endpoint",
1177
+ title: "Limites por endpoint \u2014 SLA, timeout, TPM, TPS e limite operacional",
1178
+ description: 'Tabela de refer\xEAncia do Manual de APIs do Open Finance Brasil com os limites de cada endpoint de todas as fam\xEDlias de API (Dados Abertos, Dados Cadastrais e Transacionais, Servi\xE7os de Inicia\xE7\xE3o, Portabilidade de Cr\xE9dito, Webhook, Admin e Discovery). Um item por endpoint, com a faixa de frequ\xEAncia (alta, m\xE9dia-alta, m\xE9dia ou baixa), o SLA em ms do percentil 95 do tempo de resposta, o timeout em segundos, os limites de tr\xE1fego TPM e TPS e o limite operacional de consultas por m\xEAs. Responde perguntas do tipo "qual o SLA e o timeout do GET /resources". O texto normativo por tr\xE1s desses n\xFAmeros (como o SLA \xE9 medido e apurado, disponibilidade m\xEDnima, regras de limites de tr\xE1fego e operacionais) est\xE1 em requisitos-nao-funcionais. search devolve o registro completo \u2014 em TPM algumas linhas trazem a tabela de faixas QCA\u2192TPM como texto.',
1179
+ ttlHours: 72,
1180
+ filters: [
1181
+ { name: "endpoint", description: "Substring na rota (ex.: /resources)" },
1182
+ { name: "api", description: "Substring no nome da fam\xEDlia de API (ex.: Recursos, [SV] API Pagamentos)" },
1183
+ { name: "method", description: "Verbo HTTP exato (ex.: GET)" },
1184
+ { name: "frequencia", description: "Substring na faixa de frequ\xEAncia (ex.: Alta, Baixa)" }
1185
+ ],
1186
+ async extract(ctx) {
1187
+ ctx?.onProgress?.(0, 1, `Extraindo "${limitesPorEndpointConfig.pageTitle}"`);
1188
+ const { html, url } = await fetchConfluencePage(
1189
+ limitesPorEndpointConfig.confluenceBaseUrl,
1190
+ limitesPorEndpointConfig.pageId,
1191
+ limitesPorEndpointConfig.retryDelaysMs,
1192
+ ctx?.signal
1193
+ );
1194
+ ctx?.onProgress?.(1, 1);
1195
+ const page = {
1196
+ pageId: limitesPorEndpointConfig.pageId,
1197
+ title: limitesPorEndpointConfig.pageTitle,
1198
+ url
1199
+ };
1200
+ return { items: buildItems3(page, parseEndpointLimits(html)) };
1201
+ },
1202
+ search(data, query, filters = {}) {
1203
+ const endpoint = filters.endpoint ? normalize(filters.endpoint) : void 0;
1204
+ const api = filters.api ? normalize(filters.api) : void 0;
1205
+ const metodo = filters.method?.trim().toUpperCase();
1206
+ const frequencia = filters.frequencia ? normalize(filters.frequencia) : void 0;
1207
+ return data.items.filter((item) => {
1208
+ if (endpoint && !normalize(item.path).includes(endpoint)) return false;
1209
+ if (api && !normalize(item.api).includes(api)) return false;
1210
+ if (metodo && item.metodo !== metodo) return false;
1211
+ if (frequencia && !normalize(item.frequencia ?? "").includes(frequencia)) return false;
1212
+ if (query?.trim() && !matchesQuery(`${item.api} ${item.metodo ?? ""} ${item.path}`, query)) {
1213
+ return false;
1214
+ }
1215
+ return true;
1216
+ });
1217
+ },
1218
+ getItem(data, id) {
1219
+ return data.items.find((i) => i.id === id) ?? null;
1220
+ }
1221
+ };
1222
+
1035
1223
  // src/domains/participantes/config.ts
1036
1224
  var participantesConfig = {
1037
1225
  id: "participantes",
@@ -1186,7 +1374,6 @@ var portalDomain = {
1186
1374
  // src/core/registry.ts
1187
1375
  var domains = [
1188
1376
  pcmDomain,
1189
- paymentsDomain,
1190
1377
  paymentsV5Domain,
1191
1378
  paymentsV5BusinessRulesDomain,
1192
1379
  enrollmentsV2Domain,
@@ -1206,6 +1393,8 @@ var domains = [
1206
1393
  mqdDomain,
1207
1394
  webhookDomain,
1208
1395
  segurancaDomain,
1396
+ requisitosNaoFuncionaisDomain,
1397
+ limitesPorEndpointDomain,
1209
1398
  participantesDomain,
1210
1399
  portalDomain
1211
1400
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opf-br-mcp",
3
- "version": "0.9.3",
3
+ "version": "1.1.0",
4
4
  "description": "MCP server local com as regras do Open Finance Brasil (PCM additionalInfo, specs OpenAPI de Pagamentos)",
5
5
  "type": "module",
6
6
  "license": "MIT",