diff --git a/README.md b/README.md index cb458d0..8fdb6fb 100644 --- a/README.md +++ b/README.md @@ -51,16 +51,18 @@ O alvo do CGIBS tem uma limitação que vale declarar: `www.cgibs.gov.br` não a A severidade é por alvo: portal e api-split reprovam o run tanto em divergência quanto em indisponibilidade; o piloto sinaliza sem reprovar, porque é infraestrutura de teste com janela até 31/12/2026 e mudar antes do portal é o comportamento esperado dele. -### O contrato da Plataforma está em v1.1.0; os pacotes ainda geram do v0.0.10 +### O contrato da Plataforma está na v1.1.0, e os pacotes acompanham -Em 24/08/2026 o CGIBS publicou o **OpenAPI v1.1.0** da Plataforma Pública, pareado com o Manual de Integração v1.1.0, e moveu o v0.0.10 para "versões anteriores". A mudança quebra o contrato: +Em 24/08/2026 o CGIBS publicou o **OpenAPI v1.1.0** da Plataforma Pública, pareado com o Manual de Integração v1.1.0, e moveu a v0.0.10 para "versões anteriores". Desde a **0.2.0**, `@splitbr/client` e `@splitbr/mock` são gerados desse contrato. +A mudança quebra compatibilidade com a linha 0.1.x: + +- os quatro headers obrigatórios (`messageId`, `correlationId`, `tenantId`, `timestamp`) **deixaram de existir**, e entrou a assinatura `X-JWS-Signature` em todas as 43 operações; - as 12 rotas de stream trocaram `{idPsp}/tributos` por `{cnpjRaizPspRecDir}/transacoes`; - entraram 3 rotas do Mecanismo de Ocorrências (`/api/v1/moc/*`); -- o header `X-JWS-Signature` virou obrigatório nas 43 operações; - os schemas foram de 57 para 78, com 33 dos 55 comuns alterados. -O v1.1.0 está vendorado aqui (`vendor/swagger/openapi-v1_1_0.json`), mas **ainda não alimenta o codegen**: `@splitbr/client` e `@splitbr/mock` continuam gerados do v0.0.10 e, portanto, implementam o contrato anterior. Migrar é um major bump nos dois pacotes e tem task própria. Até lá, quem integra a plataforma real deve ler o v1.1.0 como fonte da verdade. +O [guia de migração](https://mozurok.github.io/splitbr/migracao) cobre campo a campo. Sobre a assinatura, a escolha de desenho: **o client canonicaliza, monta o JWS e chama um callback seu para a operação RS256.** A chave privada nunca entra no pacote, e o corpo enviado é byte a byte o que foi assinado, que é o que faz a assinatura validar do outro lado. **Correção de rota, registrada de propósito**: até 04/09/2026 este README afirmava que não existia fonte pública para esse contrato e que por isso ele não era monitorável. Era falso. O CGIBS publica o OAS numa página aberta, sem login e sem mTLS, e o zip de lá é byte-idêntico ao que já estava vendorado. O custo do engano foi medido: o v1.1.0 ficou 11 dias sem detecção. O detector agora observa aquela página como quarto alvo. @@ -78,7 +80,7 @@ Monorepo pnpm: `pnpm install && pnpm -r build && pnpm -r test` (Node >= 22). Con Engineering notes: - The official contracts are vendored with a **pinned SHA-256**; a weekly CI diffs four targets against the vendored copies and **opens an issue on drift** instead of updating silently: the three live Calculadora contracts, by normalised content, plus the artifact inventory of the [CGIBS Split Payment page](https://www.cgibs.gov.br/split-payment), which is where the Platform contract itself is published. Severity is per target: the production endpoints fail the run, the pilot one reports without failing (it is test infrastructure and moving ahead is its job). The CGIBS target carries a stated limitation: `www.cgibs.gov.br` refuses connections from the GitHub Actions runner, so in CI it reports unreachable without failing the run, and it only really compares when run from a network that can reach the host. Drift there still fails when reachable. -- **The Platform contract moved to v1.1.0 on 2026-08-24; the packages still generate from v0.0.10.** The new spec renames all 12 stream routes (`{idPsp}/tributos` to `{cnpjRaizPspRecDir}/transacoes`), adds 3 Mechanism-of-Occurrences routes, makes the `X-JWS-Signature` header required on all 43 operations, and grows the schema set from 57 to 78. v1.1.0 is vendored here but does not feed codegen yet: migrating is a major bump for both packages and has its own task. Until then, treat v1.1.0 as the source of truth if you integrate the real platform. Until 2026-09-04 this README claimed that spec had no public endpoint and so could not be monitored; that was false, and the error cost 11 days of undetected drift. +- **The Platform contract moved to v1.1.0 on 2026-08-24, and the packages followed in 0.2.0.** The new spec renames all 12 stream routes (`{idPsp}/tributos` to `{cnpjRaizPspRecDir}/transacoes`), adds 3 Mechanism-of-Occurrences routes, replaces the four mandatory headers with a required `X-JWS-Signature` on all 43 operations, and grows the schema set from 57 to 78. See the [migration guide](https://mozurok.github.io/splitbr/migracao). On signing: the client canonicalises (JCS, RFC 8785), builds the detached JWS, and calls a callback you provide for the RS256 operation, so the private key never enters the package and the bytes sent are exactly the bytes signed. Until 2026-09-04 this README claimed that spec had no public endpoint and so could not be monitored; that was false, and the error cost 11 days of undetected drift. - Money math is **integer cents only** (BigInt), never floating point, truncated toward zero to match the official rounding. - The interactive [demo](https://mozurok.github.io/splitbr/) computes every figure with the **same published function the SDK ships**, so it doubles as a live validation of the packages. diff --git a/docs/site/.vitepress/config.mts b/docs/site/.vitepress/config.mts index 5dbb941..8bd97fa 100644 --- a/docs/site/.vitepress/config.mts +++ b/docs/site/.vitepress/config.mts @@ -64,6 +64,7 @@ export default defineConfig({ items: [ { text: "@splitbr/client", link: "/referencia/client" }, { text: "@splitbr/mock", link: "/referencia/mock" }, + { text: "Guia de migração", link: "/migracao" }, ], }, { diff --git a/docs/site/estado-regulacao.md b/docs/site/estado-regulacao.md index 38323fc..e2f8585 100644 --- a/docs/site/estado-regulacao.md +++ b/docs/site/estado-regulacao.md @@ -32,7 +32,7 @@ As siglas do quadro: **IBS** (Imposto sobre Bens e Serviços) e **CBS** (Contrib | IT 2026.001 (tabela de meios de pagamento) | v1.01 | 25/08/2026 | [Portal NF-e, Informes Técnicos](https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=hXzemuyNHW4=) | | Resolução CGIBS nº 6/2026 (regulamenta o IBS) | 6/2026 | 30/04/2026 | [PDF na CGIBS](https://www.cgibs.gov.br/upload/arquivos/202604/30084927-res-cgibs-n-6-30-abr-2026-regulamenta-o-ibs.pdf) | -A distribuição offline da Calculadora vendorada no repositório (componente `api-regime-geral` 1.2.4, banco V0039, obtida em 10/07/2026) está atrás da produção desde 31/08/2026. O `@splitbr/client` e o `@splitbr/mock` continuam gerados do OpenAPI **v0.0.10**, não do v1.1.0: a migração é uma quebra de contrato e está em aberto. +A distribuição offline da Calculadora vendorada no repositório (componente `api-regime-geral` 1.2.4, banco V0039, obtida em 10/07/2026) está atrás da produção desde 31/08/2026. Desde a versão 0.2.0, o `@splitbr/client` e o `@splitbr/mock` são gerados do OpenAPI **v1.1.0**. O [guia de migração](/migracao) cobre o que mudou para quem estava na 0.1.x. ## O que ainda não existe diff --git a/docs/site/migracao.md b/docs/site/migracao.md new file mode 100644 index 0000000..2b032c5 --- /dev/null +++ b/docs/site/migracao.md @@ -0,0 +1,163 @@ +--- +title: Guia de migração +--- + +# Guia de migração + +Registro das mudanças que quebram compatibilidade entre versões do `@splitbr/client` e do `@splitbr/mock`, com o que fazer em cada caso. Mais recente primeiro. + +## 0.1.x para 0.2.0: o contrato oficial foi de v0.0.10 para v1.1.0 + +Em 24/08/2026 o CGIBS publicou o **OpenAPI v1.1.0** da Plataforma Pública de Split Payment, junto com o Manual de Integração v1.1.0, e moveu a v0.0.10 para "versões anteriores". Os pacotes 0.2.0 são gerados desse contrato novo. + +**A migração não é opcional se você integra a plataforma real.** O contrato antigo saiu do ar como referência corrente, e as rotas que a 0.1.x chama foram renomeadas. + +::: warning Antes de começar +Uma parte do contrato v1.1.0 depende do **Manual de Segurança**, que ainda não foi publicado. É dele que sai o fluxo de JWKS por trás da assinatura, ou seja, como sua chave pública chega à plataforma. O que está aqui cobre o que os artefatos oficiais já definem. +::: + +### Resumo das mudanças + +| | v0.0.10 (0.1.x) | v1.1.0 (0.2.0) | +|---|---|---| +| Rotas | 32 | 35 | +| Schemas | 57 | 78 | +| Autenticação de mensagem | 4 headers | assinatura `X-JWS-Signature` | +| Rotas de stream | `{idPsp}/tributos/...` | `{cnpjRaizPspRecDir}/transacoes/...` | +| Mecanismo de Ocorrências | não existia | 3 rotas | +| Pix Automático em transação atualizada | existia | removido | + +### 1. Os quatro headers obrigatórios deixaram de existir + +Esta é a mudança de maior impacto no código, e a mais fácil de aplicar. + +O contrato v0.0.10 exigia `messageId`, `correlationId`, `tenantId` e `timestamp` em toda requisição. **Nenhum dos quatro existe no v1.1.0**: eles saíram de `components.parameters` e não são citados uma única vez no Manual de Integração v1.1.0. No lugar entrou um só, o `X-JWS-Signature`, obrigatório nas 43 operações. + +```ts +// antes (0.1.x) +const client = createSplitClient({ + baseUrl: "https://...", + tenantId: "12345678000199", +}); + +// depois (0.2.0) +const client = createSplitClient({ + baseUrl: "https://...", + kid: "id-da-sua-chave", + assinar: async (bytes) => assinarRS256(bytes), +}); +``` + +`gerarCorrelationId` foi removido, e a validação de `tenantId` junto. `gerarTimestampSplit` **continua exportado**: deixou de ser header, mas o formato segue valendo para `infRequisicao.dtHrMsg`, que é campo de corpo obrigatório. + +### 2. A assinatura `X-JWS-Signature` + +Toda requisição passa a carregar uma assinatura JWS Compact Detached (RFC 7515) sobre o corpo canonicalizado em JCS (RFC 8785), com sete atributos obrigatórios no protected header: `alg` (RS256), `typ` (JWS), `kid`, `jti` (UUID v4), `iat` (NumericDate), `b64` (false) e `crit` (`["b64"]`). + +**O client faz a parte difícil e você fica com a chave.** A canonicalização, o protected header, a montagem do formato detached e a garantia de que o corpo enviado é byte a byte o que foi assinado são responsabilidade do pacote. A operação RS256 sai por um callback: + +```ts +import { createSign } from "node:crypto"; +import { createSplitClient } from "@splitbr/client"; + +const client = createSplitClient({ + baseUrl: process.env.SPLIT_BASE_URL, + kid: "minha-chave-01", + assinar: (bytes) => { + const s = createSign("RSA-SHA256"); + s.update(bytes); + s.end(); + return new Uint8Array(s.sign(process.env.CHAVE_PRIVADA_PEM)); + }, +}); +``` + +Num HSM ou KMS, o callback vira a chamada do serviço e a chave privada nunca entra no processo: + +```ts +assinar: async (bytes) => kms.sign({ KeyId, Message: bytes, SigningAlgorithm: "RSASSA_PKCS1_V1_5_SHA_256" }), +``` + +::: danger O erro que custa caro aqui +O `b64: false` da RFC 7797 significa que a assinatura cobre o **payload cru**, não uma versão em Base64URL. Se você montar a assinatura por fora e serializar o corpo por conta própria, as duas serializações divergem (ordem de chave, formato de número, escaping) e a plataforma rejeita uma assinatura que parece correta. É exatamente por isso que o client não aceita a assinatura pronta: existe uma serialização só, e é a que vai na rede. +::: + +Se você precisa das peças isoladas, elas são públicas: `canonicalizarJcs`, `assinarRequisicao`, `montarProtectedHeader`, `montarEntradaDeAssinatura` e `conferirFormaDoHeader`. + +### 3. As 12 rotas de stream foram renomeadas + +O parâmetro de rota `{idPsp}` virou `{cnpjRaizPspRecDir}` (8 posições, a raiz do CNPJ, não mais um identificador opaco), e o segmento `/tributos/` virou `/transacoes/`. + +```diff +- /api/v1/out/boleto/{idPsp}/tributos/stream/start ++ /api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start +``` + +Vale para os três arranjos com stream (boleto, Pix Automático, Pix Dinâmico), nos modos `out` e `retroativo`, em `start`, consumo por token e `DELETE`. + +O corpo da resposta acompanhou: a chave **`tributos` virou `transacoes`**. + +Na consulta retroativa, os parâmetros `fromNsu` e `toNsu` viraram **`nsuInicial` e `nsuFinal`**. + +### 4. Campos renomeados e tipos alterados + +| Onde | Antes | Depois | +|---|---|---| +| Transação iniciada (boleto, Pix Automático, Pix Dinâmico) | `cnpjCpfPagOrig` | `cnpjPagOrig` | +| Finalização da segregação | `valorTotalCbs`, `valorTotalIbs` | `vlTotalCbs`, `vlTotalIbs` | +| Consulta retroativa | `fromNsu`, `toNsu` | `nsuInicial`, `nsuFinal` | +| Super Inteligente | `tributos` | `transacoes` | + +**`cnpjCpfPagOrig` para `cnpjPagOrig` não é só um rename.** O campo antigo aceitava CPF de 11 dígitos ou CNPJ de 14; o novo aceita **apenas CNPJ de 14 posições**. Se você informava pagador pessoa física na transação iniciada, esse caminho deixou de existir no contrato. + +Dois campos mudaram de tipo, de `integer` para `string`: + +- `numIdentcBaixa` (pattern `^\d{1,19}$`) +- `nsuId` (pattern `^\d{1,19}$`) + +::: tip Cuidado com comparação de NSU +Como `nsuId` virou string, `a > b` passa a comparar lexicograficamente. `"9" > "10"` é verdadeiro. Converta para número, ou compare com padding, antes de ordenar ou paginar. +::: + +Dois campos ganharam formato fixo: + +- **`numCodBarras`**: era 1 a 44 dígitos, agora são exatamente 44. +- **`idLote`**: era livre (1 a 16 posições), agora é `idInfSegr` seguido de um sequencial de 6 dígitos, 40 posições. Isso amarra o lote ao informe no próprio identificador. + +E um campo novo, obrigatório no Retorno Super Inteligente: **`dtHrDisp`**, o instante em que a plataforma disponibilizou a mensagem para consumo. + +### 5. `PATCH /api/v1/pix-automatico` deixou de existir + +O Informe de Transação Atualizada passou a contemplar apenas Boleto e Pix Dinâmico. O Pix Automático saiu, e com ele os schemas `InformeDeTransacaoAtualizadaPixAutomaticoRequest` e `InformeDeTransacaoAtualizadaPixAutomaticoTransacao`. O `POST` da mesma rota continua existindo. + +### 6. Mecanismo de Ocorrências (MOC): três rotas novas + +Recurso novo, nada a migrar. São três rotas: + +- `POST /api/v1/moc/solicitacao`, para solicitar estorno +- `POST /api/v1/moc/notificacao`, para notificar +- `GET /api/v1/moc/{cnpjRaizPspRecDir}/ocorrencias`, para consultar as que já receberam resposta da RFB ou do CGIBS + +A diferença entre solicitação e notificação é **por presença de campo**, não por rota: a solicitação exige `codMotOcor`, `vlCbsEst` e `vlIbsEst` e proíbe os campos de processo administrativo; a notificação proíbe os três de estorno. Mandar o corpo errado na rota errada dá 400. + +O mock simula a resposta da RFB/CGIBS de forma determinística, para o ciclo fechar sem depender da plataforma real. + +## Migrando o `@splitbr/mock` + +O mock 0.2.0 serve o contrato v1.1.0. Duas mudanças afetam quem já tem teste escrito contra ele: + +**Os quatro headers antigos não são mais exigidos.** Ele continua aceitando os quatro e ecoando o `correlationId` na resposta, que é útil para depurar uma jornada, mas nenhum deles é obrigatório. Testes que os enviavam continuam passando; testes que verificavam o 400 por ausência deles precisam mudar. + +**A assinatura é conferida na forma, não exigida.** Se o header `X-JWS-Signature` vier, o mock decodifica o protected header e cobra os sete atributos com os valores fixos. Se não vier, deixa passar. Isso mantém o `npx splitbr-mock` utilizável sem par de chaves, e ainda pega o erro mais provável em produção, que é mandar um JWS bem-formado com `b64` errado ou com o payload anexado em vez de detached. + +Para o comportamento fiel ao contrato, ligue a exigência: + +```ts +buildServer({ exigirAssinatura: true }); +``` + +## Compatibilidade + +`^0.1.1` **não** puxa a 0.2.0 automaticamente: em versões `0.x`, o caret do npm não atravessa o minor. Quem depende assim continua na linha antiga até subir de propósito. + +A linha 0.1.x segue no npm e implementa a v0.0.10, que a fonte oficial aposentou. Ela serve para quem ainda integra um ambiente preso ao contrato antigo, não para trabalho novo. diff --git a/docs/site/novidades.md b/docs/site/novidades.md index 6d483cb..6763ed6 100644 --- a/docs/site/novidades.md +++ b/docs/site/novidades.md @@ -15,6 +15,12 @@ Ordem: mais recente primeiro. Semana sem mudança não gera entrada. Registro, em ordem cronológica inversa, das mudanças oficiais que afetam o Split Payment e a Reforma Tributária do Consumo: notas técnicas e informes do Portal NF-e, manuais e resoluções do Comitê Gestor do IBS (CGIBS), publicações da Receita Federal e versões da Calculadora de Tributos. Fontes oficiais verificadas toda segunda-feira às 9h (horário de Brasília); semanas sem mudança não geram entrada. +## 2026-09-04: splitbr 0.2.0 acompanha o contrato v1.1.0 + +- O que mudou: o `@splitbr/client` e o `@splitbr/mock` passaram a ser gerados do OpenAPI **v1.1.0**, publicado pelo CGIBS em 24/08/2026. É quebra de compatibilidade: os quatro headers obrigatórios deixaram de existir e entrou a assinatura `X-JWS-Signature` em todas as operações, as 12 rotas de stream mudaram de caminho, entraram as três rotas do Mecanismo de Ocorrências e vários campos foram renomeados ou mudaram de tipo. O mock agora simula o ciclo do MOC, incluindo a resposta da RFB/CGIBS. +- Impacto: quem está na linha 0.1.x precisa migrar para integrar a plataforma real, porque o contrato antigo saiu da lista de versões correntes. O `^0.1.1` não puxa a 0.2.0 sozinho, então a atualização é deliberada. O passo a passo campo a campo está no [guia de migração](/migracao). +- Fonte: https://www.cgibs.gov.br/split-payment + ## 2026-08-31: Calculadora vai para o banco V0043 e sai o Pacote de Liberação 010f - O que mudou: o endpoint público de versão da Calculadora passou a responder `versaoApp` 1.3.1 e `versaoDb` V0043, datado de 31/08/2026, com a descrição oficial "Ajustes na vigência das tabelas CLASSIF_NBS_INDOP_LC e INDICADOR_OPERACAO_IBS_CBS". A referência anterior registrada aqui era o componente 1.2.4 com o banco V0039. No mesmo dia, o Portal NF-e publicou o Pacote de Liberação 010f (NT 2025.002 v1.50 e NT 2026.007 v1.00) e moveu o 010e v1.02 para a lista de versões em desuso. diff --git a/docs/site/referencia/client.md b/docs/site/referencia/client.md index 8e5c230..c76fd70 100644 --- a/docs/site/referencia/client.md +++ b/docs/site/referencia/client.md @@ -14,14 +14,15 @@ Esta página é gerada do README do pacote a cada build. > Client TypeScript tipado para a Plataforma Pública do Split Payment (IBS/CBS, os dois tributos novos da Reforma Tributária, LC 214/2025), gerado a partir do OpenAPI oficial com hash pinado. -**Avisos:** esta biblioteca não é aconselhamento jurídico nem tributário. Não tem afiliação com RFB, CGIBS, Serpro ou Núclea. O comportamento deriva de especificações oficiais públicas (spec v0.0.10, pré-1.0) e pode mudar; confira sempre a fonte primária. +**Avisos:** esta biblioteca não é aconselhamento jurídico nem tributário. Não tem afiliação com RFB, CGIBS, Serpro ou Núclea. O comportamento deriva de especificações oficiais públicas (spec v1.1.0) e pode mudar; confira sempre a fonte primária. -> ⚠️ **O contrato oficial está na v1.1.0; este pacote ainda gera da v0.0.10.** Em 24/08/2026 o CGIBS publicou o OpenAPI v1.1.0 da Plataforma e moveu a v0.0.10 para "versões anteriores". A mudança quebra o contrato: as 12 rotas de stream trocaram `{idPsp}/tributos` por `{cnpjRaizPspRecDir}/transacoes`, entraram 3 rotas do Mecanismo de Ocorrências, o header `X-JWS-Signature` virou obrigatório em todas as operações e os schemas foram de 57 para 78. **Se você integra a plataforma real, leia a [v1.1.0](https://www.cgibs.gov.br/split-payment) como fonte da verdade.** A migração deste pacote é um major bump e está em aberto; acompanhe pelo [repositório](https://github.com/Mozurok/splitbr). +> **Migrando da 0.1.x?** Esta versão acompanha o contrato oficial **v1.1.0**, publicado em 24/08/2026, e quebra compatibilidade com a anterior: os quatro headers obrigatórios sumiram, entrou a assinatura `X-JWS-Signature`, e as rotas de stream foram renomeadas. O [guia de migração](https://mozurok.github.io/splitbr/migracao) tem o passo a passo. ## O que vem dentro -- **Client tipado** para os 32 endpoints da plataforma (todos os arranjos da Etapa 1: boleto, Pix Dinâmico/Automático/Estático, TED, TEF), sobre [openapi-fetch]. -- **Headers obrigatórios automáticos** em toda requisição: `messageId` (UUID v4 único), `correlationId` (19 posições, propagado verbatim quando você fornece), `tenantId` (CNPJ alfanumérico, 14 posições) e `timestamp` (ISO 8601 com offset `-03:00`), nos formatos exatos do Manual de Integração v1.0. +- **Client tipado** para os 35 endpoints da plataforma (todos os arranjos da Etapa 1: boleto, Pix Dinâmico/Automático/Estático, TED, TEF, mais o Mecanismo de Ocorrências), sobre [openapi-fetch]. +- **Assinatura `X-JWS-Signature` automática** em toda requisição: canonicalização JCS (RFC 8785), protected header com os sete atributos obrigatórios e JWS Compact Detached (RFC 7515), como manda o capítulo 8 do Manual de Integração v1.1.0. **A chave privada não entra no pacote**: você fornece um callback que faz a operação RS256, e ele pode ser um HSM ou um KMS. +- **O corpo enviado é o corpo assinado.** O `b64: false` do contrato faz a assinatura cobrir o payload cru, então o client serializa uma vez só e manda exatamente aqueles bytes. É o erro mais caro dessa integração, e ele fica resolvido por construção. - **Erros RFC 7807 tipados**: corpos `application/problem+json` viram `ProblemDetail`, com `Retry-After` (segundos), `X-Circuit-Breaker`, `X-Retry-Allowed` e `X-Error-Type` expostos como campos. - **Fórmula de segregação** como função pura standalone: `R = min((Vp/Vt) × C; C; A)` por tributo, aritmética inteira em centavos (BigInt), truncamento sempre PARA BAIXO em 2 casas, sem ponto flutuante no caminho de cálculo. - **Tipos de domínio**: as 5 categorias de valor (Informado, Corrigido, Em Aberto, Segregado, Aplicado), papéis de PSP e tributos. @@ -33,7 +34,8 @@ import { createSplitClient, calcularSegregacao } from "@splitbr/client"; const client = createSplitClient({ baseUrl: "https://", - tenantId: "12345678000199", // CNPJ do PSP (alfanumérico suportado) + kid: "minha-chave-01", // identificador da sua chave de assinatura + assinar: assinarComRS256, // (bytes) => assinatura crua; a chave é sua }); const { data, error } = await client.POST("/api/v1/boleto", { body: /* tipado */ }); @@ -53,7 +55,7 @@ const segregadoCbs = calcularSegregacao({ ## Regeneração de tipos -Os tipos são gerados de `vendor/swagger/openapi-v0_0_10.json` (hash pinado em `vendor/MANIFEST.md`); o script de codegen recusa rodar se o spec em disco divergir do hash. Nada aqui busca a API viva em tempo de build. +Os tipos são gerados de `vendor/swagger/openapi-v1_1_0.json` (hash pinado em `vendor/MANIFEST.md`); o script de codegen recusa rodar se o spec em disco divergir do hash. Nada aqui busca a API viva em tempo de build. ## Licença diff --git a/docs/site/referencia/mock.md b/docs/site/referencia/mock.md index d284c39..043c24c 100644 --- a/docs/site/referencia/mock.md +++ b/docs/site/referencia/mock.md @@ -12,11 +12,11 @@ Esta página é gerada do README do pacote a cada build. Mock local da **Plataforma Pública do Split Payment** (IBS/CBS, LC 214/2025) para qualquer dev entender e testar o comportamento da plataforma. Você não precisa ser um PSP homologado (banco ou instituição de pagamento autorizada) para usar isto: o mock roda local, sem licença nenhuma. -A plataforma real é restrita a PSPs homologados. Este mock reproduz o contrato oficial na sua máquina: os sete fluxos documentados, os quatro headers obrigatórios, a taxonomia de erros RFC 7807, a segregação em 3 passos e o streaming do Super Inteligente, mais um motor de caos e cenários que a plataforma real nunca vai te dar em homologação. +A plataforma real é restrita a PSPs homologados. Este mock reproduz o contrato oficial na sua máquina: os sete fluxos documentados, o Mecanismo de Ocorrências, a assinatura `X-JWS-Signature`, a taxonomia de erros RFC 7807, a segregação em 3 passos e o streaming do Super Inteligente, mais um motor de caos e cenários que a plataforma real nunca vai te dar em homologação. -> **Aviso**: projeto independente e não oficial. Não é afiliado à RFB, ao Comitê Gestor do IBS, ao Serpro ou à Núclea. A fonte da verdade é o contrato oficial (OAS v0.0.10), embarcado com hash pinado. Quando o contrato mudar, o mock recusa subir com uma cópia adulterada. +> **Aviso**: projeto independente e não oficial. Não é afiliado à RFB, ao Comitê Gestor do IBS, ao Serpro ou à Núclea. A fonte da verdade é o contrato oficial (OAS v1.1.0), embarcado com hash pinado. Quando o contrato mudar, o mock recusa subir com uma cópia adulterada. -> ⚠️ **O contrato oficial está na v1.1.0; este mock ainda reproduz a v0.0.10.** Em 24/08/2026 o CGIBS publicou o OpenAPI v1.1.0 da Plataforma e moveu a v0.0.10 para "versões anteriores": 12 rotas de stream renomeadas (`{idPsp}/tributos` virou `{cnpjRaizPspRecDir}/transacoes`), 3 rotas novas do Mecanismo de Ocorrências, `X-JWS-Signature` obrigatório em todas as operações e o Pix Automático retirado do Informe de Transação Atualizada. O que o mock simula continua fiel à v0.0.10, e serve para aprender o mecanismo; para integrar a plataforma real, leia a [v1.1.0](https://www.cgibs.gov.br/split-payment). A migração é um major bump e está em aberto. +> **Migrando da 0.1.x?** Esta versão serve o contrato oficial **v1.1.0**. As rotas de stream mudaram de caminho, os quatro headers antigos deixaram de ser exigidos e entrou o Mecanismo de Ocorrências. O [guia de migração](https://mozurok.github.io/splitbr/migracao) tem o passo a passo. ## Instalação e uso @@ -50,7 +50,9 @@ const { data } = await client.POST("/api/v1/boleto", { // data.resourceId, data.numValidos, data.numErros ``` -Os quatro headers obrigatórios (messageId, correlationId, tenantId, timestamp) são injetados pelo client e validados pelo mock exatamente como na tabela do Manual de Integração. +A assinatura `X-JWS-Signature` é injetada pelo client e conferida pelo mock. Por padrão ele **valida a forma sem exigir a presença**: se o header vier, cobra os sete atributos do protected header com os valores fixos do capítulo 8; se não vier, deixa passar, para o `npx splitbr-mock` funcionar sem par de chaves. Para o comportamento fiel ao contrato, suba com `buildServer({ exigirAssinatura: true })`. + +Os quatro headers do contrato anterior (messageId, correlationId, tenantId, timestamp) não existem mais no v1.1.0. O mock continua aceitando e ecoando o `correlationId` na resposta, por utilidade de depuração, mas nenhum deles é obrigatório. ## O que o mock cobre @@ -87,7 +89,7 @@ Cenários de divergência: `cbs-correcao`, `ibs-correcao`, `cbs-em-aberto`, `ibs ## Limitações conhecidas -- A semântica por dígito dos códigos RSUP (1 = CBS correção, 2 = IBS correção, 3 = CBS em aberto, 4 = IBS em aberto) é interpretação deste mock; o spec v0.0.10 publica só o enum. Será ajustada quando o Manual de Operações detalhar código a código. +- A semântica por dígito dos códigos RSUP (1 = CBS correção, 2 = IBS correção, 3 = CBS em aberto, 4 = IBS em aberto) é interpretação deste mock; o spec v1.1.0 publica só o enum. Será ajustada quando o Manual de Operações detalhar código a código. - Limites de rate (429) e a janela do long polling não são fixados pelas fontes oficiais; aqui são configuráveis. - Os percentuais do Split Payment Simplificado não têm valores oficiais publicados (jul/2026); o default é placeholder rotulado, não uma tabela real. - Autenticação é simulada (token fake + variantes de erro por flag). Não há mTLS real. diff --git a/docs/site/tutorial.md b/docs/site/tutorial.md index c15ee78..4d3204c 100644 --- a/docs/site/tutorial.md +++ b/docs/site/tutorial.md @@ -108,10 +108,6 @@ Na vida real, quando um boleto é registrado, o banco avisa a plataforma: "exist ```bash curl -X POST http://127.0.0.1:8377/api/v1/boleto \ -H 'content-type: application/json' \ - -H 'messageId: 1a2b3c4d-0000-4000-8000-000000000001' \ - -H 'correlationId: TUTORIAL-0000000001' \ - -H 'tenantId: 12345678000199' \ - -H 'timestamp: 2026-07-20T10:00:00-03:00' \ -d '{ "infRequisicao": { "dtHrMsg": "2026-07-20T10:00:00-03:00" }, "transacoes": [ @@ -119,13 +115,13 @@ curl -X POST http://127.0.0.1:8377/api/v1/boleto \ "index": 1, "idDda": "DDA1", "numCtrlOrig": "CTRL000001", - "numCodBarras": "83660001", + "numCodBarras": "83660001000000000000000000000000000000000001", "vlInf": 1000.00, "vlCbsInf": 9.00, "vlIbsInf": 1.00, "cnpjRaizPspRecDir": "12345678", "cnpjRec": "12345678000199", - "cnpjCpfPagOrig": "98765432000188", + "cnpjPagOrig": "98765432000188", "dtHrIni": "2026-07-20T10:00:00-03:00", "dtVenc": "2026-08-01", "dtHrLimPgto": "2026-08-01T23:59:59-03:00" @@ -140,9 +136,11 @@ Resposta esperada: {"title":"Sucesso","status":201,"detail":"Solicitacao processada com sucesso","numValidos":1,"numErros":0,"errors":[],"resourceId":"RES0000000001001"} ``` -**O que acabou de acontecer:** a plataforma aceitou a transação (`status: 201`, 1 item válido, 0 erros) e devolveu um protocolo, o `resourceId`. As quatro linhas `-H` são os headers obrigatórios do contrato oficial: `messageId` (identificador único desta mensagem), `correlationId` (código que amarra a jornada toda), `tenantId` (o CNPJ de quem chama) e `timestamp` (a hora do envio). +**O que acabou de acontecer:** a plataforma aceitou a transação (`status: 201`, 1 item válido, 0 erros) e devolveu um protocolo, o `resourceId`. -**Se deu errado:** se veio um erro `400` como `Header 'messageId' ausente ou invalido`, algum pedaço do comando se perdeu ao colar. Cole o bloco inteiro de uma vez, do `curl` até a última aspa, e tente de novo. +**Sobre a assinatura:** o contrato oficial v1.1.0 exige o header `X-JWS-Signature` em toda requisição, uma assinatura RS256 sobre o corpo canonicalizado. Um `curl` copiável não dá conta disso, e por isso o mock **não exige** a assinatura por padrão: assim você vê o mecanismo funcionar antes de montar chave. Quando o header vem, ele confere a forma; para o comportamento fiel ao contrato, suba o mock com `exigirAssinatura`. No código de verdade, o `@splitbr/client` monta a assinatura para você. + +**Se deu errado:** se veio um erro `400` do tipo `Corpo em desacordo com o contrato oficial`, algum pedaço do comando se perdeu ao colar. Cole o bloco inteiro de uma vez, do `curl` até a última aspa, e tente de novo. ## Passo 7: Pague a transação @@ -151,10 +149,6 @@ O boleto existe; agora alguém paga. O banco então manda o informe preliminar d ```bash curl -X POST http://127.0.0.1:8377/api/v1/boleto/informe-preliminar-pagamento \ -H 'content-type: application/json' \ - -H 'messageId: 1a2b3c4d-0000-4000-8000-000000000002' \ - -H 'correlationId: TUTORIAL-0000000001' \ - -H 'tenantId: 12345678000199' \ - -H 'timestamp: 2026-07-20T10:05:00-03:00' \ -d '{ "infRequisicao": { "dtHrMsg": "2026-07-20T10:05:00-03:00" }, "transacoes": [ @@ -219,10 +213,6 @@ O aviso do passo 8 está na fila. Na vida real, o PSP puxa esses avisos de tempo ```bash curl -i http://127.0.0.1:8377/api/v1/out/boleto/PSP00001/tributos/stream/start \ - -H 'messageId: 1a2b3c4d-0000-4000-8000-000000000003' \ - -H 'correlationId: TUTORIAL-0000000001' \ - -H 'tenantId: 12345678000199' \ - -H 'timestamp: 2026-07-20T10:10:00-03:00' ``` Resposta esperada (a linha `Date` vai mostrar a hora do seu computador): diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 2aa7583..9f35262 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 0.2.0 (2026-09-04) + +**Quebra compatibilidade.** Migra para o contrato oficial **OpenAPI v1.1.0**, publicado pelo CGIBS em 24/08/2026. Veja o [guia de migração](https://mozurok.github.io/splitbr/migracao). + +- Tipos gerados do v1.1.0: 35 rotas, 78 schemas. +- **Os quatro headers obrigatórios saíram.** `messageId`, `correlationId`, `tenantId` e `timestamp` não existem no contrato novo. `splitHeadersMiddleware` e `gerarCorrelationId` foram removidos; `gerarTimestampSplit` continua, porque o formato segue valendo para `infRequisicao.dtHrMsg`. +- **Assinatura `X-JWS-Signature`**, obrigatória nas 43 operações: canonicalização JCS (RFC 8785), protected header com os sete atributos do capítulo 8 do manual e JWS Compact Detached (RFC 7515). A operação RS256 é um callback seu, então a chave privada nunca entra no pacote. +- O corpo enviado passa a ser o corpo canonicalizado que foi assinado, byte a byte. O `b64: false` do contrato torna isso condição de a assinatura validar. +- `createSplitClient` troca `tenantId` por `kid` e `assinar`. +- Novos exports: `canonicalizarJcs`, `canonicalizarJcsBytes`, `assinarRequisicao`, `montarProtectedHeader`, `montarEntradaDeAssinatura`, `conferirFormaDoHeader`, `base64url`. +- `PATCH /api/v1/pix-automatico` deixou de existir (o Informe de Transação Atualizada perdeu o Pix Automático). +- Campos: `cnpjCpfPagOrig` virou `cnpjPagOrig` e passou a aceitar **só CNPJ**; `valorTotalCbs`/`valorTotalIbs` viraram `vlTotalCbs`/`vlTotalIbs`; `numIdentcBaixa` e `nsuId` viraram string; `numCodBarras` exige 44 dígitos; `idLote` passou a ser `idInfSegr` mais sequencial (40 posições). +- O codegen ganhou um pós-processamento para os tipos do MOC: o `allOf` com `not` do spec faz o openapi-typescript emitir tipos inconstruíveis, e a reescrita fica no gerador para sumir sozinha quando o upstream corrigir. + ## 0.1.1 (2026-09-04) Release de vigilância: nenhuma mudança de comportamento ou de API. O que muda é o que o pacote diz sobre si. diff --git a/packages/client/README.md b/packages/client/README.md index a837e70..831ccbd 100644 --- a/packages/client/README.md +++ b/packages/client/README.md @@ -6,14 +6,15 @@ > Client TypeScript tipado para a Plataforma Pública do Split Payment (IBS/CBS, os dois tributos novos da Reforma Tributária, LC 214/2025), gerado a partir do OpenAPI oficial com hash pinado. -**Avisos:** esta biblioteca não é aconselhamento jurídico nem tributário. Não tem afiliação com RFB, CGIBS, Serpro ou Núclea. O comportamento deriva de especificações oficiais públicas (spec v0.0.10, pré-1.0) e pode mudar; confira sempre a fonte primária. +**Avisos:** esta biblioteca não é aconselhamento jurídico nem tributário. Não tem afiliação com RFB, CGIBS, Serpro ou Núclea. O comportamento deriva de especificações oficiais públicas (spec v1.1.0) e pode mudar; confira sempre a fonte primária. -> ⚠️ **O contrato oficial está na v1.1.0; este pacote ainda gera da v0.0.10.** Em 24/08/2026 o CGIBS publicou o OpenAPI v1.1.0 da Plataforma e moveu a v0.0.10 para "versões anteriores". A mudança quebra o contrato: as 12 rotas de stream trocaram `{idPsp}/tributos` por `{cnpjRaizPspRecDir}/transacoes`, entraram 3 rotas do Mecanismo de Ocorrências, o header `X-JWS-Signature` virou obrigatório em todas as operações e os schemas foram de 57 para 78. **Se você integra a plataforma real, leia a [v1.1.0](https://www.cgibs.gov.br/split-payment) como fonte da verdade.** A migração deste pacote é um major bump e está em aberto; acompanhe pelo [repositório](https://github.com/Mozurok/splitbr). +> **Migrando da 0.1.x?** Esta versão acompanha o contrato oficial **v1.1.0**, publicado em 24/08/2026, e quebra compatibilidade com a anterior: os quatro headers obrigatórios sumiram, entrou a assinatura `X-JWS-Signature`, e as rotas de stream foram renomeadas. O [guia de migração](https://mozurok.github.io/splitbr/migracao) tem o passo a passo. ## O que vem dentro -- **Client tipado** para os 32 endpoints da plataforma (todos os arranjos da Etapa 1: boleto, Pix Dinâmico/Automático/Estático, TED, TEF), sobre [openapi-fetch]. -- **Headers obrigatórios automáticos** em toda requisição: `messageId` (UUID v4 único), `correlationId` (19 posições, propagado verbatim quando você fornece), `tenantId` (CNPJ alfanumérico, 14 posições) e `timestamp` (ISO 8601 com offset `-03:00`), nos formatos exatos do Manual de Integração v1.0. +- **Client tipado** para os 35 endpoints da plataforma (todos os arranjos da Etapa 1: boleto, Pix Dinâmico/Automático/Estático, TED, TEF, mais o Mecanismo de Ocorrências), sobre [openapi-fetch]. +- **Assinatura `X-JWS-Signature` automática** em toda requisição: canonicalização JCS (RFC 8785), protected header com os sete atributos obrigatórios e JWS Compact Detached (RFC 7515), como manda o capítulo 8 do Manual de Integração v1.1.0. **A chave privada não entra no pacote**: você fornece um callback que faz a operação RS256, e ele pode ser um HSM ou um KMS. +- **O corpo enviado é o corpo assinado.** O `b64: false` do contrato faz a assinatura cobrir o payload cru, então o client serializa uma vez só e manda exatamente aqueles bytes. É o erro mais caro dessa integração, e ele fica resolvido por construção. - **Erros RFC 7807 tipados**: corpos `application/problem+json` viram `ProblemDetail`, com `Retry-After` (segundos), `X-Circuit-Breaker`, `X-Retry-Allowed` e `X-Error-Type` expostos como campos. - **Fórmula de segregação** como função pura standalone: `R = min((Vp/Vt) × C; C; A)` por tributo, aritmética inteira em centavos (BigInt), truncamento sempre PARA BAIXO em 2 casas, sem ponto flutuante no caminho de cálculo. - **Tipos de domínio**: as 5 categorias de valor (Informado, Corrigido, Em Aberto, Segregado, Aplicado), papéis de PSP e tributos. @@ -25,7 +26,8 @@ import { createSplitClient, calcularSegregacao } from "@splitbr/client"; const client = createSplitClient({ baseUrl: "https://", - tenantId: "12345678000199", // CNPJ do PSP (alfanumérico suportado) + kid: "minha-chave-01", // identificador da sua chave de assinatura + assinar: assinarComRS256, // (bytes) => assinatura crua; a chave é sua }); const { data, error } = await client.POST("/api/v1/boleto", { body: /* tipado */ }); @@ -45,7 +47,7 @@ const segregadoCbs = calcularSegregacao({ ## Regeneração de tipos -Os tipos são gerados de `vendor/swagger/openapi-v0_0_10.json` (hash pinado em `vendor/MANIFEST.md`); o script de codegen recusa rodar se o spec em disco divergir do hash. Nada aqui busca a API viva em tempo de build. +Os tipos são gerados de `vendor/swagger/openapi-v1_1_0.json` (hash pinado em `vendor/MANIFEST.md`); o script de codegen recusa rodar se o spec em disco divergir do hash. Nada aqui busca a API viva em tempo de build. ## Licença diff --git a/packages/client/package.json b/packages/client/package.json index d85ef03..f0a464c 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@splitbr/client", - "version": "0.1.1", + "version": "0.2.0", "description": "Client TypeScript tipado para a Plataforma Publica do Split Payment (IBS/CBS, LC 214/2025)", "license": "MIT", "type": "module", @@ -29,6 +29,7 @@ "codegen": "node scripts/codegen.mjs" }, "devDependencies": { + "@types/node": "^26.1.1", "tsdown": "^0.22.12", "typescript": "^7.0.2", "vitest": "^4.1.10" diff --git a/packages/client/scripts/codegen.mjs b/packages/client/scripts/codegen.mjs index ad981b8..78e6662 100644 --- a/packages/client/scripts/codegen.mjs +++ b/packages/client/scripts/codegen.mjs @@ -9,13 +9,13 @@ import { dirname, resolve } from "node:path"; const here = dirname(fileURLToPath(import.meta.url)); const repoRoot = resolve(here, "../../.."); -const specPath = resolve(repoRoot, "vendor/swagger/openapi-v0_0_10.json"); +const specPath = resolve(repoRoot, "vendor/swagger/openapi-v1_1_0.json"); const manifestPath = resolve(repoRoot, "vendor/MANIFEST.md"); const outPath = resolve(here, "../src/generated/platform.ts"); const manifest = readFileSync(manifestPath, "utf8"); -const row = manifest.split("\n").find((l) => l.includes("swagger/openapi-v0_0_10.json")); -if (!row) throw new Error("MANIFEST.md row for swagger/openapi-v0_0_10.json not found"); +const row = manifest.split("\n").find((l) => l.includes("swagger/openapi-v1_1_0.json")); +if (!row) throw new Error("MANIFEST.md row for swagger/openapi-v1_1_0.json not found"); const pinned = row.match(/\b([0-9a-f]{64})\b/)?.[1]; if (!pinned) throw new Error("pinned sha256 not found in the manifest row"); @@ -59,6 +59,76 @@ execFileSync( console.log(`deep-ref postprocess: ${hits} occurrence(s) rewritten`); } +// Quirk 2 (v1.1.0): MocOcorrenciaSol e MocOcorrenciaNot sao +// `allOf: [$ref MocOcorrencia, {required: [...], not: {anyOf: [...]}}]`, e o +// openapi-typescript 7.13.0 erra duas vezes no mesmo tipo: transforma o +// discriminador no literal com o NOME do schema (`arrj: "MocOcorrenciaSol"`, +// quando os valores validos sao BOL/PXE/PXD/PXA/TED/TEF) e traduz o `not` para +// `Record`, que zera todas as demais propriedades. Resultado: as +// duas rotas POST do MOC ficam sem corpo tipavel. +// +// A regra que o spec expressa e discriminacao por presenca de campo: a +// Solicitacao de estorno EXIGE codMotOcor/vlCbsEst/vlIbsEst e PROIBE os campos +// de processo administrativo; a Notificacao proibe os tres de estorno. Isso o +// TypeScript escreve bem, com interseccao e `?: never`. +// +// Preferimos reescrever a saida a manter os tipos a mao: quando o upstream +// corrigir, some este bloco e o gerado continua igual. Um override manual, nao. +{ + let src = readFileSync(outPath, "utf8"); + const campo = (nome) => + `NonNullable`; + + const substituicoes = [ + { + nome: "MocOcorrenciaSol", + corpo: [ + `components["schemas"]["MocOcorrencia"] & {`, + ` /** @description Solicitacao de estorno: os tres valores abaixo sao obrigatorios (spec: allOf[1].required). */`, + ` codMotOcor: ${campo("codMotOcor")};`, + ` vlCbsEst: ${campo("vlCbsEst")};`, + ` vlIbsEst: ${campo("vlIbsEst")};`, + ` /** @description Proibidos na solicitacao (spec: allOf[1].not.anyOf). */`, + ` orgRespProcAdm?: never;`, + ` numProcAdm?: never;`, + ` }`, + ].join("\n"), + }, + { + nome: "MocOcorrenciaNot", + corpo: [ + `components["schemas"]["MocOcorrencia"] & {`, + ` /** @description Notificacao: os campos de estorno sao proibidos (spec: allOf[1].not.anyOf). */`, + ` codMotOcor?: never;`, + ` vlCbsEst?: never;`, + ` vlIbsEst?: never;`, + ` }`, + ].join("\n"), + }, + ]; + + let trocados = 0; + for (const { nome, corpo } of substituicoes) { + // Casa o tipo inteiro que o gerador emitiu numa linha so, ate o ; final. + const re = new RegExp( + `( {8}${nome}: )\\{\\s*arrj: "${nome}";\\s*\\} & \\(Omit & Record\\);`, + ); + if (!re.test(src)) continue; + src = src.replace(re, `$1${corpo};`); + trocados += 1; + } + + if (trocados !== substituicoes.length) { + console.error( + `REFUSING: esperava reescrever ${substituicoes.length} tipos do MOC, reescrevi ${trocados}. ` + + `Se o openapi-typescript corrigiu o allOf+not, remova este bloco; se mudou a forma da saida, ajuste o padrao.`, + ); + process.exit(1); + } + writeFileSync(outPath, src); + console.log(`MOC allOf+not postprocess: ${trocados} tipo(s) reescrito(s)`); +} + const spec = JSON.parse(readFileSync(specPath, "utf8")); const expected = Object.keys(spec.paths).length; const generated = readFileSync(outPath, "utf8"); diff --git a/packages/client/src/assinatura.ts b/packages/client/src/assinatura.ts new file mode 100644 index 0000000..846c87d --- /dev/null +++ b/packages/client/src/assinatura.ts @@ -0,0 +1,199 @@ +/** + * Assinatura `X-JWS-Signature` do contrato v1.1.0. + * + * O Manual de Integração v1.1.0, capítulo 8, exige que toda requisição carregue + * uma assinatura JWS Compact Detached (RFC 7515) sobre o corpo canonicalizado + * em JCS (RFC 8785), com sete atributos obrigatórios no protected header. + * + * **Este módulo não assina nada.** Ele canonicaliza, monta o protected header, + * calcula os bytes exatos que devem ser assinados e remonta o resultado no + * formato detached. A operação RS256 em si sai por um callback que você fornece, + * então a chave privada nunca entra neste pacote e pode ficar onde deve estar, + * num HSM ou num KMS. + * + * A divisão não é só de segurança, é de correção. O `b64: false` da RFC 7797 + * significa que a assinatura cobre os bytes crus do payload, não uma versão em + * Base64URL. Se a assinatura viesse pronta de fora, quem assina teria que + * serializar o corpo por conta própria, e duas serializações do mesmo objeto + * divergem com facilidade (ordem de chave, formato de número, escaping). O + * resultado seria uma assinatura válida sobre bytes que não são os enviados, + * que a plataforma rejeita sem dizer por quê. Aqui só existe uma serialização. + */ +import { canonicalizarJcs } from "./jcs.js"; + +/** Assina os bytes com RS256 e devolve a assinatura crua (não codificada). */ +export type AssinadorRs256 = (dadosParaAssinar: Uint8Array) => Promise | Uint8Array; + +export interface OpcoesDeAssinatura { + /** Identificador da chave, vai no `kid` e permite ao receptor selecioná-la. */ + kid: string; + /** A operação RS256. Recebe os bytes exatos; devolve a assinatura crua. */ + assinar: AssinadorRs256; + /** Relógio, em segundos epoch. Injetável para teste. */ + agora?: () => number; + /** Gerador do `jti` (UUID v4). Injetável para teste. */ + gerarJti?: () => string; +} + +/** O protected header exigido pelo capítulo 8 do manual. */ +export interface ProtectedHeader { + alg: "RS256"; + typ: "JWS"; + kid: string; + jti: string; + iat: number; + b64: false; + crit: ["b64"]; +} + +export class ErroDeAssinatura extends Error { + constructor(mensagem: string) { + super(mensagem); + this.name = "ErroDeAssinatura"; + } +} + +/** Base64URL sem padding, como manda a RFC 7515. */ +export function base64url(bytes: Uint8Array): string { + let binario = ""; + for (const b of bytes) binario += String.fromCharCode(b); + return btoa(binario).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", ""); +} + +/** + * Monta o protected header. O `iat` é NumericDate (segundos epoch, RFC 7519) e + * o `jti` é um UUID v4 novo por requisição: o manual usa os dois para garantir + * unicidade e permitir validação temporal, então reaproveitar um `jti` entre + * requisições derruba justamente a proteção anti-replay que ele existe para dar. + */ +export function montarProtectedHeader(opcoes: OpcoesDeAssinatura): ProtectedHeader { + if (!opcoes.kid) throw new ErroDeAssinatura("kid é obrigatório no protected header"); + const agora = opcoes.agora ?? (() => Math.floor(Date.now() / 1000)); + const gerarJti = opcoes.gerarJti ?? (() => crypto.randomUUID()); + + return { + alg: "RS256", + typ: "JWS", + kid: opcoes.kid, + jti: gerarJti(), + iat: agora(), + b64: false, + crit: ["b64"], + }; +} + +/** + * Os bytes que vão para a assinatura. + * + * Com `b64: false`, a RFC 7797 define a entrada como + * `ASCII(BASE64URL(protected) || '.') || payload`, ou seja, o payload entra + * cru, sem passar por Base64URL. É o ponto em que uma implementação distraída + * codifica o payload por hábito e produz uma assinatura que nunca valida. + */ +export function montarEntradaDeAssinatura( + protectedB64: string, + payloadCanonico: Uint8Array, +): Uint8Array { + const prefixo = new TextEncoder().encode(`${protectedB64}.`); + const entrada = new Uint8Array(prefixo.length + payloadCanonico.length); + entrada.set(prefixo, 0); + entrada.set(payloadCanonico, prefixo.length); + return entrada; +} + +export interface ResultadoDaAssinatura { + /** O valor pronto para o header `X-JWS-Signature`. */ + header: string; + /** Os bytes canonicalizados: é este corpo que precisa ser enviado. */ + corpoCanonico: Uint8Array; + /** + * O mesmo corpo, em texto. Passar esta string ao `fetch` produz exatamente os + * bytes de `corpoCanonico`, porque o `fetch` codifica em UTF-8, e é a forma + * que `BodyInit` aceita sem conversão. + */ + corpoCanonicoTexto: string; + /** O protected header usado, útil para log e diagnóstico. */ + protegido: ProtectedHeader; +} + +/** + * Canonicaliza o corpo, assina e devolve o header no formato Compact Detached. + * + * O retorno traz `corpoCanonico` de propósito: **é esse corpo que precisa ir na + * requisição.** Enviar o objeto original re-serializado invalida a assinatura, + * porque os bytes seriam outros. + */ +export async function assinarRequisicao( + corpo: unknown, + opcoes: OpcoesDeAssinatura, +): Promise { + const protegido = montarProtectedHeader(opcoes); + const corpoCanonicoTexto = canonicalizarJcs(corpo); + const corpoCanonico = new TextEncoder().encode(corpoCanonicoTexto); + + const protectedB64 = base64url(new TextEncoder().encode(JSON.stringify(protegido))); + const entrada = montarEntradaDeAssinatura(protectedB64, corpoCanonico); + + const assinatura = await opcoes.assinar(entrada); + if (!(assinatura instanceof Uint8Array) || assinatura.length === 0) { + throw new ErroDeAssinatura( + "o callback assinar() deve devolver a assinatura RS256 crua, como Uint8Array não vazio", + ); + } + + // Detached: o payload sai do meio, sobrando `protected..signature`. + return { + header: `${protectedB64}..${base64url(assinatura)}`, + corpoCanonico, + corpoCanonicoTexto, + protegido, + }; +} + +/** + * Lê o protected header de um `X-JWS-Signature` e confere os sete atributos. + * + * Serve para diagnóstico e para o mock: não verifica a assinatura, só a forma. + * Devolve a lista de problemas, vazia quando o header está conforme. + */ +export function conferirFormaDoHeader(valor: string): { + protegido?: ProtectedHeader; + problemas: string[]; +} { + const problemas: string[] = []; + const partes = valor.split("."); + + if (partes.length !== 3) { + return { problemas: [`esperado formato compact com 3 partes, veio ${partes.length}`] }; + } + const [cabecalhoB64 = "", payload = "", assinaturaB64 = ""] = partes; + if (payload !== "") { + problemas.push("o payload deveria estar ausente (formato detached), mas veio preenchido"); + } + if (!assinaturaB64) problemas.push("assinatura ausente"); + + let protegido: ProtectedHeader; + try { + const json = atob(cabecalhoB64.replaceAll("-", "+").replaceAll("_", "/")); + protegido = JSON.parse(json) as ProtectedHeader; + } catch { + return { problemas: [...problemas, "protected header não é Base64URL de um JSON válido"] }; + } + + if (protegido.alg !== "RS256") problemas.push(`alg deve ser RS256, veio ${String(protegido.alg)}`); + if (protegido.typ !== "JWS") problemas.push(`typ deve ser JWS, veio ${String(protegido.typ)}`); + if (!protegido.kid) problemas.push("kid é obrigatório"); + if (protegido.b64 !== false) problemas.push(`b64 deve ser false, veio ${String(protegido.b64)}`); + if (!Array.isArray(protegido.crit) || protegido.crit.length !== 1 || protegido.crit[0] !== "b64") { + problemas.push('crit deve ser ["b64"]'); + } + if (typeof protegido.iat !== "number" || !Number.isFinite(protegido.iat)) { + problemas.push("iat deve ser NumericDate (segundos epoch)"); + } + const uuidV4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + if (typeof protegido.jti !== "string" || !uuidV4.test(protegido.jti)) { + problemas.push("jti deve ser UUID v4"); + } + + return { protegido, problemas }; +} diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index d1f398a..f7bae6a 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -1,23 +1,37 @@ import createClient, { type Client } from "openapi-fetch"; import type { paths } from "./generated/platform.js"; -import { splitHeadersMiddleware, type SplitHeadersOptions } from "./headers.js"; +import { assinaturaMiddleware } from "./headers.js"; +import type { AssinadorRs256 } from "./assinatura.js"; -export interface SplitClientOptions extends SplitHeadersOptions { +export interface SplitClientOptions { /** Base URL da plataforma (ambiente do PSP). */ baseUrl: string; - /** fetch customizado (testes, instrumentacao). */ + /** Identificador da chave de assinatura; vai no `kid` do protected header. */ + kid: string; + /** + * A operação RS256 sobre os bytes que o client monta. + * + * Recebe a entrada de assinatura já pronta (protected header mais o payload + * canonicalizado) e devolve a assinatura crua. A chave privada fica com você: + * este pacote nunca a vê, e o callback é o ponto natural para um HSM, um KMS + * ou o `node:crypto`. + */ + assinar: AssinadorRs256; + /** fetch customizado (testes, instrumentação). */ fetch?: typeof globalThis.fetch; + /** Relógio do `iat`, em segundos epoch. Injetável para teste. */ + agora?: () => number; + /** Gerador do `jti`. Injetável para teste. */ + gerarJti?: () => string; } /** - * Client tipado da Plataforma Publica do Split Payment: openapi-fetch sobre os - * tipos gerados do spec vendorado, com os 4 headers obrigatorios injetados. + * Client tipado da Plataforma Pública do Split Payment, gerado do OpenAPI + * v1.1.0, com a assinatura `X-JWS-Signature` aplicada a cada requisição. */ export function createSplitClient(options: SplitClientOptions): Client { - const { baseUrl, fetch: customFetch, ...headerOpts } = options; - const client = createClient( - customFetch ? { baseUrl, fetch: customFetch } : { baseUrl }, - ); - client.use(splitHeadersMiddleware(headerOpts)); + const { baseUrl, fetch: customFetch, ...assinatura } = options; + const client = createClient(customFetch ? { baseUrl, fetch: customFetch } : { baseUrl }); + client.use(assinaturaMiddleware(assinatura)); return client; } diff --git a/packages/client/src/generated/platform.ts b/packages/client/src/generated/platform.ts index 8fa7787..5f88cbe 100644 --- a/packages/client/src/generated/platform.ts +++ b/packages/client/src/generated/platform.ts @@ -45,11 +45,7 @@ export interface paths { delete?: never; options?: never; head?: never; - /** - * PATCH - Informe de Transação Atualizada - * @description Processa Informe de Transação Atualizada para arranjo(s): Pix Automático - */ - patch: operations["patchapiv1pix_automatico"]; + patch?: never; trace?: never; }; "/api/v1/pix-dinamico": { @@ -147,7 +143,7 @@ export interface paths { put?: never; /** * POST - Informe Preliminar de Pagamento - * @description Processa Informe Preliminar de Pagamento para arranjo(s): PIX estático + * @description Processa Informe Preliminar de Pagamento para arranjo(s): Pix estático */ post: operations["postapiv1pix_estaticoinforme_preliminar_pagamento"]; delete?: never; @@ -256,7 +252,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/out/boleto/{idPsp}/tributos/stream/start": { + "/api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start": { parameters: { query?: never; header?: never; @@ -265,9 +261,9 @@ export interface paths { }; /** * GET - Retorno Super Inteligente - * @description Inicia o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens. + * @description Inicia o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado. */ - get: operations["getapiv1outboleto{idPsp}tributosstreamstart"]; + get: operations["getapiv1outboleto{cnpjRaizPspRecDir}transacoesstreamstart"]; put?: never; post?: never; delete?: never; @@ -276,7 +272,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/out/boleto/{idPsp}/tributos/stream/{token}": { + "/api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { parameters: { query?: never; header?: never; @@ -285,22 +281,22 @@ export interface paths { }; /** * GET - Retorno Super Inteligente - * @description Continua o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens. + * @description Continua o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado. */ - get: operations["getapiv1outboleto{idPsp}tributosstream{token}"]; + get: operations["getapiv1outboleto{cnpjRaizPspRecDir}transacoesstream{token}"]; put?: never; post?: never; /** * DELETE - Retorno Super Inteligente * @description Finaliza o stream do Retorno Super Inteligente. */ - delete: operations["deleteapiv1outboleto{idPsp}tributosstream{token}"]; + delete: operations["deleteapiv1outboleto{cnpjRaizPspRecDir}transacoesstream{token}"]; options?: never; head?: never; patch?: never; trace?: never; }; - "/api/v1/out/pix-automatico/{idPsp}/tributos/stream/start": { + "/api/v1/out/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/start": { parameters: { query?: never; header?: never; @@ -309,9 +305,9 @@ export interface paths { }; /** * GET - Retorno Super Inteligente - * @description Inicia o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens. + * @description Inicia o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado. */ - get: operations["getapiv1outpix_automatico{idPsp}tributosstreamstart"]; + get: operations["getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstreamstart"]; put?: never; post?: never; delete?: never; @@ -320,7 +316,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/out/pix-automatico/{idPsp}/tributos/stream/{token}": { + "/api/v1/out/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { parameters: { query?: never; header?: never; @@ -329,22 +325,22 @@ export interface paths { }; /** * GET - Retorno Super Inteligente - * @description Continua o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens. + * @description Continua o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado. */ - get: operations["getapiv1outpix_automatico{idPsp}tributosstream{token}"]; + get: operations["getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstream{token}"]; put?: never; post?: never; /** * DELETE - Retorno Super Inteligente * @description Finaliza o stream do Retorno Super Inteligente. */ - delete: operations["deleteapiv1outpix_automatico{idPsp}tributosstream{token}"]; + delete: operations["deleteapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstream{token}"]; options?: never; head?: never; patch?: never; trace?: never; }; - "/api/v1/out/pix-dinamico/{idPsp}/tributos/stream/start": { + "/api/v1/out/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/start": { parameters: { query?: never; header?: never; @@ -353,9 +349,9 @@ export interface paths { }; /** * GET - Retorno Super Inteligente - * @description Inicia o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens. + * @description Inicia o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado. */ - get: operations["getapiv1outpix_dinamico{idPsp}tributosstreamstart"]; + get: operations["getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstreamstart"]; put?: never; post?: never; delete?: never; @@ -364,7 +360,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/out/pix-dinamico/{idPsp}/tributos/stream/{token}": { + "/api/v1/out/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { parameters: { query?: never; header?: never; @@ -373,22 +369,22 @@ export interface paths { }; /** * GET - Retorno Super Inteligente - * @description Continua o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens. + * @description Continua o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado. */ - get: operations["getapiv1outpix_dinamico{idPsp}tributosstream{token}"]; + get: operations["getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstream{token}"]; put?: never; post?: never; /** * DELETE - Retorno Super Inteligente * @description Finaliza o stream do Retorno Super Inteligente. */ - delete: operations["deleteapiv1outpix_dinamico{idPsp}tributosstream{token}"]; + delete: operations["deleteapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstream{token}"]; options?: never; head?: never; patch?: never; trace?: never; }; - "/api/v1/retroativo/boleto/{idPsp}/tributos/stream/start": { + "/api/v1/retroativo/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start": { parameters: { query?: never; header?: never; @@ -399,7 +395,7 @@ export interface paths { * GET - Consulta Retroativa Super Inteligente * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto */ - get: operations["getapiv1outboleto{idPsp}tributosretroativostreamstart"]; + get: operations["getapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostreamstart"]; put?: never; post?: never; delete?: never; @@ -408,7 +404,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/retroativo/boleto/{idPsp}/tributos/stream/{token}": { + "/api/v1/retroativo/boleto/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { parameters: { query?: never; header?: never; @@ -417,22 +413,22 @@ export interface paths { }; /** * GET - Consulta Retroativa Super Inteligente - * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto + * @description Continua a Consulta Retroativa Super Inteligente para arranjo(s): Boleto */ - get: operations["getapiv1outboleto{idPsp}tributosretroativostream{token}"]; + get: operations["getapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostream{token}"]; put?: never; post?: never; /** * DELETE - Consulta Retroativa Super Inteligente - * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto + * @description Finaliza a Consulta Retroativa Super Inteligente para arranjo(s): Boleto */ - delete: operations["deleteapiv1outboleto{idPsp}tributosretroativostream{token}"]; + delete: operations["deleteapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostream{token}"]; options?: never; head?: never; patch?: never; trace?: never; }; - "/api/v1/retroativo/pix-automatico/{idPsp}/tributos/stream/start": { + "/api/v1/retroativo/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/start": { parameters: { query?: never; header?: never; @@ -443,7 +439,7 @@ export interface paths { * GET - Consulta Retroativa Super Inteligente * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático */ - get: operations["getapiv1outpix_automatico{idPsp}tributosretroativostreamstart"]; + get: operations["getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostreamstart"]; put?: never; post?: never; delete?: never; @@ -452,7 +448,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/retroativo/pix-automatico/{idPsp}/tributos/stream/{token}": { + "/api/v1/retroativo/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { parameters: { query?: never; header?: never; @@ -461,22 +457,22 @@ export interface paths { }; /** * GET - Consulta Retroativa Super Inteligente - * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático + * @description Continua a Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático */ - get: operations["getapiv1outpix_automatico{idPsp}tributosretroativostream{token}"]; + get: operations["getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostream{token}"]; put?: never; post?: never; /** * DELETE - Consulta Retroativa Super Inteligente - * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático + * @description Finaliza a Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático */ - delete: operations["deleteapiv1outpix_automatico{idPsp}tributosretroativostream{token}"]; + delete: operations["deleteapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostream{token}"]; options?: never; head?: never; patch?: never; trace?: never; }; - "/api/v1/retroativo/pix-dinamico/{idPsp}/tributos/stream/start": { + "/api/v1/retroativo/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/start": { parameters: { query?: never; header?: never; @@ -487,7 +483,7 @@ export interface paths { * GET - Consulta Retroativa Super Inteligente * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico */ - get: operations["getapiv1outpix_dinamico{idPsp}tributosretroativostreamstart"]; + get: operations["getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostreamstart"]; put?: never; post?: never; delete?: never; @@ -496,7 +492,7 @@ export interface paths { patch?: never; trace?: never; }; - "/api/v1/retroativo/pix-dinamico/{idPsp}/tributos/stream/{token}": { + "/api/v1/retroativo/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { parameters: { query?: never; header?: never; @@ -505,16 +501,16 @@ export interface paths { }; /** * GET - Consulta Retroativa Super Inteligente - * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico + * @description Continua a Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico */ - get: operations["getapiv1outpix_dinamico{idPsp}tributosretroativostream{token}"]; + get: operations["getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostream{token}"]; put?: never; post?: never; /** * DELETE - Consulta Retroativa Super Inteligente - * @description Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico + * @description Finaliza a Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico */ - delete: operations["deleteapiv1outpix_dinamico{idPsp}tributosretroativostream{token}"]; + delete: operations["deleteapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostream{token}"]; options?: never; head?: never; patch?: never; @@ -531,7 +527,7 @@ export interface paths { put?: never; /** * POST - Informe de Segregação - * @description Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, PIX estático, TED, TEF + * @description Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, Pix estático, TED, TEF */ post: operations["postapiv1segregacao"]; delete?: never; @@ -551,7 +547,7 @@ export interface paths { put?: never; /** * POST - Informe de Segregação - * @description Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, PIX estático, TED, TEF + * @description Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, Pix estático, TED, TEF */ post: operations["postapiv1segregacaofinalizacao"]; delete?: never; @@ -631,7 +627,7 @@ export interface paths { put?: never; /** * POST - Informe de Segregação - * @description Processa Informe de Segregação para arranjo(s): PIX estático + * @description Processa Informe de Segregação para arranjo(s): Pix estático */ post: operations["postapiv1pix_estaticosegregacao{idInfSegr}lotes"]; delete?: never; @@ -680,16 +676,80 @@ export interface paths { patch?: never; trace?: never; }; + "/api/v1/moc/solicitacao": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * POST - Requisição de MOC (Solicitação) + * @description Abre Solicitação de Estorno para um máximo de 1.000 ocorrências por requisição. + */ + post: operations["postapiv1mocsolicitacao"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/moc/notificacao": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * POST - Requisição de MOC (Notificação) + * @description Envia Notificação de transações em Análise no máximo de 1.000 ocorrências por requisicao. + */ + post: operations["postapiv1mocnotificacao"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/moc/{cnpjRaizPspRecDir}/ocorrencias": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * GET - Consulta de MOC + * @description Consulta paginada (polling) das ocorrências do MOC com resposta para o PSP. A Plataforma responde imediatamente com as ocorrências disponíveis no momento (até 1.000 por página). O parâmetro 'nsuInicial' deve ser utilizado para continuar a paginação a partir do último NSU já recebido, a primeira consulta deve usar o valor inicial: 1. O parâmetro opcional 'limite' permite definir a quantidade máxima de ocorrências retornadas por página, respeitado o limite de 1.000 itens. O retorno HTTP 204 indica que não há mais ocorrências disponíveis no momento — seja porque todas as ocorrências já foram retornadas, seja porque não há ocorrências. Nesse caso o PSP deve aguardar 30 minutos antes de realizar uma nova consulta. A Plataforma não mantém a conexão aberta aguardando ocorrências (estratégia de polling). + */ + get: operations["getapiv1moc{cnpjRaizPspRecDir}ocorrencias"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; } export type webhooks = Record; export interface components { schemas: { InfoRequest: { infRequisicao: { - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** * Format: date-time + * @description Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública. * @example 2026-03-22T12:00:00-03:00 */ dtHrMsg: string; @@ -700,6 +760,7 @@ export interface components { infRequisicao: { /** * Format: date-time + * @description Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública. * @example 2026-03-22T12:00:00-03:00 */ dtHrMsg: string; @@ -708,10 +769,14 @@ export interface components { }; InfoSegRequest: { infRequisicao: { - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** * Format: date-time + * @description Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública. * @example 2026-03-22T12:00:00-03:00 */ dtHrMsg: string; @@ -721,75 +786,132 @@ export interface components { dadosFinalSeg: components["schemas"]["DadosFinalSegRequest"]; }; DadosInfoSegRequest: { - /** @example ABC123DEF456GHI7PXD20260423001 */ + /** + * @description Identificador do Repasse Financeiro associado à transação. Formato: ISPB do PSP Recebedor Direto (8) + ISPB da instituição do repasse efetivo (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data definida para realização do Repasse Financeiro (AAAAMMDD) + 3 caracteres para o sequencial. Gerado pelo PSP Recebedor Direto. Um mesmo idRepasse é utilizado para os dois tributos do Repasse Financeiro: CBS (via TES) e IBS (via STR), sendo comum a ambos. + * @example ABC123DEF456GHI7PXD20260423001 + */ idRepasse: string; /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. * @example PXD * @enum {string} */ arrj: "PXA" | "PXD" | "PXE" | "BOL" | "TED" | "TEF"; - /** @example ABC123DEF456GHI7PXD202604231930001 */ + /** + * @description Identificador do informe de segregação, gerado pelo responsável pela comunicação. Formato: ISPB do PSP Recebedor Direto (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA/PXD/PXE/BOL/TED/TEF) + data de envio (AAAAMMDD) + hora de corte HHMM (horário de corte do arranjo, conforme o Manual de Tempos) + sequencial (3). + * @example ABC123DEF456GHI7PXD202604231930001 + */ idInfSegr: string; }; DadosLoteSegRequest: { /** - * @example LOTE202603250001 - * @example 0001 - * @example 0002 + * @description Identificador do lote enviado no informe de segregação. Formato: IdInfSegr + sequencial + * @example ZZ99YY88XX77WW66VV55UU44TT33SS22RR000001 + * @example ZZ99YY88XX77WW66VV55UU44TT33SS22RR000002 */ idLote: string; }; DadosFinalSegRequest: { - /** @example ABC123DEF456GHI7PXD202604231930001 */ + /** + * @description Identificador do informe de segregação, gerado pelo responsável pela comunicação. Formato: ISPB do PSP Recebedor Direto (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA/PXD/PXE/BOL/TED/TEF) + data de envio (AAAAMMDD) + hora de corte HHMM (horário de corte do arranjo, conforme o Manual de Tempos) + sequencial (3). + * @example ABC123DEF456GHI7PXD202604231930001 + */ idInfSegr: string; /** * Format: int64 + * @description Número total de transações enviadas no Informe de Segregação * @example 100 - * @example 100000000000000000 + * @example 99 + * @example 0 */ totalTrans: number; - /** @example 1500.5 */ - valorTotalCbs: number; - /** @example 750.25 */ - valorTotalIbs: number; + /** + * @description Valor total de CBS enviado no Informe de Segregação + * @example 1500.5 + */ + vlTotalCbs: number; + /** + * @description Valor total de IBS enviado no Informe de Segregação + * @example 750.25 + */ + vlTotalIbs: number; }; InformeDeTransacaoIniciadaBoletoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador único do documento de cobrança no sistema DDA. + * @example 123A512312312312FAS1 + */ idDda: string; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador utilizado pela Núclea para controle interno da transação. + * @example 123A512312312312FAS1 + */ numCtrlOrig: string; - /** @example 12345678901234567891123456789012345678911234 */ + /** + * @description Número correspondente ao código de barras do boleto. + * @example 12345678901234567891123456789012345678911234 + */ numCodBarras: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlCbsInf: number; - /** @example 10.02 */ + /** + * @description Valor de IBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlIbsInf: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ - cnpjCpfPagOrig: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; /** * Format: date-time + * @description Data e hora de emissão da transação após processamento pelo PSP/Núclea. * @example 2026-03-20T10:33:46-03:00 */ dtHrIni: string; /** * Format: date + * @description Data de vencimento da transação. * @example 2026-03-20 */ dtVenc: string; /** * Format: date-time + * @description Data e hora limite para realização do pagamento da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrLimPgto: string; @@ -798,38 +920,71 @@ export interface components { transacoes?: components["schemas"]["InformeDeTransacaoIniciadaBoletoTransacao"][]; }; InformeDeTransacaoIniciadaPixAutomaticoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlCbsInf: number; - /** @example 10.02 */ + /** + * @description Valor de IBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlIbsInf: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ - cnpjCpfPagOrig?: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig?: string; /** * Format: date-time + * @description Data e hora de emissão da transação após processamento pelo PSP/Núclea. * @example 2026-03-20T10:33:46-03:00 */ dtHrIni: string; /** * Format: date + * @description Data de vencimento da transação. * @example 2026-03-20 */ dtVenc?: string; /** * Format: date-time + * @description Data e hora limite para realização do pagamento da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrLimPgto: string; @@ -838,38 +993,71 @@ export interface components { transacoes?: components["schemas"]["InformeDeTransacaoIniciadaPixAutomaticoTransacao"][]; }; InformeDeTransacaoIniciadaPixDinamicoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlCbsInf: number; - /** @example 10.02 */ + /** + * @description Valor de IBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlIbsInf: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ - cnpjCpfPagOrig?: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig?: string; /** * Format: date-time + * @description Data e hora de emissão da transação após processamento pelo PSP/Núclea. * @example 2026-03-20T10:33:46-03:00 */ dtHrIni: string; /** * Format: date + * @description Data de vencimento da transação. * @example 2026-03-20 */ dtVenc?: string; /** * Format: date-time + * @description Data e hora limite para realização do pagamento da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrLimPgto: string; @@ -878,36 +1066,66 @@ export interface components { transacoes?: components["schemas"]["InformeDeTransacaoIniciadaPixDinamicoTransacao"][]; }; InformeDeTransacaoAtualizadaBoletoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador único do documento de cobrança no sistema DDA. + * @example 123A512312312312FAS1 + */ idDda: string; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador utilizado pela Núclea para controle interno da transação. + * @example 123A512312312312FAS1 + */ numCtrlOrig: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlCbsInf: number; - /** @example 10.02 */ + /** + * @description Valor de IBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlIbsInf: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** * Format: date-time + * @description Data e hora da atualização da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrAtu: string; /** * Format: date + * @description Data de vencimento da transação. * @example 2026-03-20 */ dtVenc: string; /** * Format: date-time + * @description Data e hora limite para realização do pagamento da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrLimPgto: string; @@ -915,79 +1133,72 @@ export interface components { InformeDeTransacaoAtualizadaBoletoRequest: components["schemas"]["InfoRequestSemCnpj"] & { transacoes?: components["schemas"]["InformeDeTransacaoAtualizadaBoletoTransacao"][]; }; - InformeDeTransacaoAtualizadaPixAutomaticoTransacao: { - /** @example 1 */ - index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ - txId: string; - /** @example 10.02 */ - vlInf: number; - /** @example 10.02 */ - vlCbsInf: number; - /** @example 10.02 */ - vlIbsInf: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ - docFiscal?: string; - /** @example 87654321 */ - cnpjRaizPspRecInd?: string; - /** @example 12345678 */ - cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ - cnpjRec: string; - /** @example 11444777000142 */ - cnpjCpfPagOrig?: string; + InformeDeTransacaoAtualizadaPixDinamicoTransacao: { /** - * Format: date-time - * @example 2026-03-20T10:33:46-03:00 + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 */ - dtHrAtu: string; + index: number; /** - * Format: date - * @example 2026-03-20 + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 */ - dtVenc?: string; + txId: string; /** - * Format: date-time - * @example 2026-03-20T10:33:46-03:00 + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 */ - dtHrLimPgto: string; - }; - InformeDeTransacaoAtualizadaPixAutomaticoRequest: components["schemas"]["InfoRequestSemCnpj"] & { - transacoes?: components["schemas"]["InformeDeTransacaoAtualizadaPixAutomaticoTransacao"][]; - }; - InformeDeTransacaoAtualizadaPixDinamicoTransacao: { - /** @example 1 */ - index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ - txId: string; - /** @example 10.02 */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlCbsInf: number; - /** @example 10.02 */ + /** + * @description Valor de IBS informado pelo originador no preenchimento da transação. + * @example 10.02 + */ vlIbsInf: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ - cnpjCpfPagOrig?: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig?: string; /** * Format: date-time + * @description Data e hora da atualização da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrAtu: string; /** * Format: date + * @description Data de vencimento da transação. * @example 2026-03-20 */ dtVenc?: string; /** * Format: date-time + * @description Data e hora limite para realização do pagamento da transação. * @example 2026-03-20T10:33:46-03:00 */ dtHrLimPgto: string; @@ -996,45 +1207,86 @@ export interface components { transacoes?: components["schemas"]["InformeDeTransacaoAtualizadaPixDinamicoTransacao"][]; }; InformePreliminarDePagamentoBoletoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador único do documento de cobrança no sistema DDA. + * @example 123A512312312312FAS1 + */ idDda: string; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador utilizado pela Núclea para controle interno da transação. + * @example 123A512312312312FAS1 + */ numCtrlOrig: string; - /** @example 1 */ + /** + * @description Indica a sequência do pagamento no arranjo (ex.: quantidade de pagamentos do boleto). + * @example 1 + */ numPgto: number; /** - * Format: int64 - * @example 1234567890123456800 - * @example 9223372036854776000 + * @description Identificador específico do evento de baixa da transação. + * @example 1234567890123456789 + * @example 9999999999999999999 + */ + numIdentcBaixa: string; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 */ - numIdentcBaixa: number; - /** @example 10.02 */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** + * @description Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral. * @example 1 * @enum {string} */ indPgtoIntegral: "0" | "1"; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet?: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; @@ -1043,42 +1295,81 @@ export interface components { transacoes?: components["schemas"]["InformePreliminarDePagamentoBoletoTransacao"][]; }; InformePreliminarDePagamentoPixAutomaticoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação no arranjo de pagamentos Pix (E2EID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ e2eId: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; /** + * @description Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral. * @example 1 * @enum {string} */ indPgtoIntegral: "0" | "1"; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; @@ -1087,42 +1378,81 @@ export interface components { transacoes?: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"][]; }; InformePreliminarDePagamentoPixDinamicoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação no arranjo de pagamentos Pix (E2EID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ e2eId: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; /** + * @description Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral. * @example 1 * @enum {string} */ indPgtoIntegral: "0" | "1"; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; @@ -1131,35 +1461,70 @@ export interface components { transacoes?: components["schemas"]["InformePreliminarDePagamentoPixDinamicoTransacao"][]; }; InformePreliminarDePagamentoPixEstaticoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação no arranjo de pagamentos Pix (E2EID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ e2eId: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; @@ -1168,28 +1533,59 @@ export interface components { transacoes?: components["schemas"]["InformePreliminarDePagamentoPixEstaticoTransacao"][]; }; InformePreliminarDePagamentoTedTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação TED gerado na liquidação (NumCtrlSTR ou NumCtrlPAG). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ numCtrlTED: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; @@ -1198,33 +1594,60 @@ export interface components { transacoes?: components["schemas"]["InformePreliminarDePagamentoTedTransacao"][]; }; InformePreliminarDePagamentoTefTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador da transação TEF gerado pelo PSP. + * @example 1234ABDOASD11231234ABDOASD112312345 + */ numCtrlTEF: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal: string; - /** @example 87654321 */ - cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; @@ -1233,20 +1656,34 @@ export interface components { transacoes?: components["schemas"]["InformePreliminarDePagamentoTefTransacao"][]; }; InformeDeBaixaExcetoPorPagamentoBoletoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador único do documento de cobrança no sistema DDA. + * @example 123A512312312312FAS1 + */ idDda: string; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador utilizado pela Núclea para controle interno da transação. + * @example 123A512312312312FAS1 + */ numCtrlOrig: string; - /** @example 1 */ - numPgto: number; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** * Format: date-time + * @description Data e hora da baixa da transação sem ocorrência de pagamento. * @example 2026-03-20T10:33:46-03:00 */ dtHrBaixa: string; @@ -1255,16 +1692,29 @@ export interface components { transacoes?: components["schemas"]["InformeDeBaixaExcetoPorPagamentoBoletoTransacao"][]; }; InformeDeBaixaExcetoPorPagamentoPixAutomaticoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** * Format: date-time + * @description Data e hora da baixa da transação sem ocorrência de pagamento. * @example 2026-03-20T10:33:46-03:00 */ dtHrBaixa: string; @@ -1273,16 +1723,29 @@ export interface components { transacoes?: components["schemas"]["InformeDeBaixaExcetoPorPagamentoPixAutomaticoTransacao"][]; }; InformeDeBaixaExcetoPorPagamentoPixDinamicoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; /** * Format: date-time + * @description Data e hora da baixa da transação sem ocorrência de pagamento. * @example 2026-03-20T10:33:46-03:00 */ dtHrBaixa: string; @@ -1291,6 +1754,7 @@ export interface components { transacoes?: components["schemas"]["InformeDeBaixaExcetoPorPagamentoPixDinamicoTransacao"][]; }; /** + * @description Código identificador da mensagem, conforme o arranjo aplicável (ex.: RSUP101, RSUP102). * @example RSUP101 * @example RSUP203 * @enum {string} @@ -1299,150 +1763,295 @@ export interface components { RetornoSuperInteligenteBoletoTransacao: { codMsg: components["schemas"]["CodMsgEnum"]; /** - * Format: int64 - * @description Número sequencial único do retorno - * @example 1234567890123456800 + * @description Número Sequencial Único da mensagem (Super Inteligente) + * @example 1234567890123456789 + */ + nsuId: string; + /** + * Format: date-time + * @description Data e hora em que a Plataforma Pública disponibilizou a mensagem do Retorno Super Inteligente para consumo. + * @example 2026-03-20T10:33:46-03:00 + */ + dtHrDisp: string; + /** + * @description Identificador único do documento de cobrança no sistema DDA. + * @example 123A512312312312FAS1 */ - nsuId: number; - /** @example 123A512312312312FAS1 */ idDda: string; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador utilizado pela Núclea para controle interno da transação. + * @example 123A512312312312FAS1 + */ numCtrlOrig: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS corrigido pela RFB, quando divergente do Documento Fiscal vinculado. + * @example 10.02 + */ vlCbsCorr?: number; - /** @example 10.02 */ + /** + * @description Valor de IBS corrigido pelo Comitê Gestor do IBS, quando divergente do Documento Fiscal vinculado. + * @example 10.02 + */ vlIbsCorr?: number; - /** @example 10.02 */ + /** + * @description Valor de CBS não extinto do Documento Fiscal vinculado à transação, conforme retorno da RFB. + * @example 10.02 + */ vlCbsAberto?: number; - /** @example 10.02 */ + /** + * @description Valor de IBS não extinto do Documento Fiscal vinculado à transação, conforme retorno do Comitê Gestor do IBS. + * @example 10.02 + */ vlIbsAberto?: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; }; RetornoSuperInteligenteBoletoRequest: { - tributos: components["schemas"]["RetornoSuperInteligenteBoletoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligenteBoletoTransacao"][]; }; RetornoSuperInteligentePixAutomaticoTransacao: { codMsg: components["schemas"]["CodMsgEnum"]; /** - * Format: int64 - * @description Número sequencial único do retorno - * @example 1234567890123456800 + * @description Número Sequencial Único da mensagem (Super Inteligente) + * @example 1234567890123456789 + */ + nsuId: string; + /** + * Format: date-time + * @description Data e hora em que a Plataforma Pública disponibilizou a mensagem do Retorno Super Inteligente para consumo. + * @example 2026-03-20T10:33:46-03:00 + */ + dtHrDisp: string; + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 */ - nsuId: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ txId: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS corrigido pela RFB, quando divergente do Documento Fiscal vinculado. + * @example 10.02 + */ vlCbsCorr?: number; - /** @example 10.02 */ + /** + * @description Valor de IBS corrigido pelo Comitê Gestor do IBS, quando divergente do Documento Fiscal vinculado. + * @example 10.02 + */ vlIbsCorr?: number; - /** @example 10.02 */ + /** + * @description Valor de CBS não extinto do Documento Fiscal vinculado à transação, conforme retorno da RFB. + * @example 10.02 + */ vlCbsAberto?: number; - /** @example 10.02 */ + /** + * @description Valor de IBS não extinto do Documento Fiscal vinculado à transação, conforme retorno do Comitê Gestor do IBS. + * @example 10.02 + */ vlIbsAberto?: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; }; RetornoSuperInteligentePixAutomaticoRequest: { - tributos: components["schemas"]["RetornoSuperInteligentePixAutomaticoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligentePixAutomaticoTransacao"][]; }; RetornoSuperInteligentePixDinamicoTransacao: { codMsg: components["schemas"]["CodMsgEnum"]; /** - * Format: int64 - * @description Número sequencial único do retorno - * @example 1234567890123456800 + * @description Número Sequencial Único da mensagem (Super Inteligente) + * @example 1234567890123456789 + */ + nsuId: string; + /** + * Format: date-time + * @description Data e hora em que a Plataforma Pública disponibilizou a mensagem do Retorno Super Inteligente para consumo. + * @example 2026-03-20T10:33:46-03:00 + */ + dtHrDisp: string; + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 */ - nsuId: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ txId: string; - /** @example 10.02 */ + /** + * @description Valor da transação informado pelo originador ao preencher (emitir) a transação. + * @example 10.02 + */ vlInf: number; - /** @example 10.02 */ + /** + * @description Valor de CBS corrigido pela RFB, quando divergente do Documento Fiscal vinculado. + * @example 10.02 + */ vlCbsCorr?: number; - /** @example 10.02 */ + /** + * @description Valor de IBS corrigido pelo Comitê Gestor do IBS, quando divergente do Documento Fiscal vinculado. + * @example 10.02 + */ vlIbsCorr?: number; - /** @example 10.02 */ + /** + * @description Valor de CBS não extinto do Documento Fiscal vinculado à transação, conforme retorno da RFB. + * @example 10.02 + */ vlCbsAberto?: number; - /** @example 10.02 */ + /** + * @description Valor de IBS não extinto do Documento Fiscal vinculado à transação, conforme retorno do Comitê Gestor do IBS. + * @example 10.02 + */ vlIbsAberto?: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 12345678 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ cnpjRaizPspRecDir: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; }; RetornoSuperInteligentePixDinamicoRequest: { - tributos: components["schemas"]["RetornoSuperInteligentePixDinamicoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligentePixDinamicoTransacao"][]; }; InfoSegregacaoRequest: components["schemas"]["InfoSegRequest"] & { dadosInfoSeg: components["schemas"]["DadosInfoSegRequest"]; }; InformeDeSegregacaoBoletoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador único do documento de cobrança no sistema DDA. + * @example 123A512312312312FAS1 + */ idDda: string; - /** @example 123A512312312312FAS1 */ + /** + * @description Identificador utilizado pela Núclea para controle interno da transação. + * @example 123A512312312312FAS1 + */ numCtrlOrig: string; - /** @example 1 */ + /** + * @description Indica a sequência do pagamento no arranjo (ex.: quantidade de pagamentos do boleto). + * @example 1 + */ numPgto: number; /** - * Format: int64 - * @example 1234567890123456800 - * @example 9223372036854776000 + * @description Identificador específico do evento de baixa da transação. + * @example 1234567890123456789 + * @example 9999999999999999999 + */ + numIdentcBaixa: string; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 */ - numIdentcBaixa: number; - /** @example 10.02 */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; /** + * @description Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral. * @example 1 * @enum {string} */ indPgtoIntegral: "0" | "1"; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet?: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; /** * Format: date-time + * @description Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2). * @example 2026-03-20T10:33:46-03:00 */ dtHrRepasse: string; @@ -1452,45 +2061,82 @@ export interface components { transacoes: components["schemas"]["InformeDeSegregacaoBoletoTransacao"][]; }; InformeDeSegregacaoPixAutomaticoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação no arranjo de pagamentos Pix (E2EID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ e2eId: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; /** + * @description Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral. * @example 1 * @enum {string} */ indPgtoIntegral: "0" | "1"; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; /** * Format: date-time + * @description Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2). * @example 2026-03-20T10:33:46-03:00 */ dtHrRepasse: string; @@ -1500,45 +2146,82 @@ export interface components { transacoes: components["schemas"]["InformeDeSegregacaoPixAutomaticoTransacao"][]; }; InformeDeSegregacaoPixDinamicoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação Pix (TxID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ txId: string; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação no arranjo de pagamentos Pix (E2EID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ e2eId: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal?: string; /** + * @description Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral. * @example 1 * @enum {string} */ indPgtoIntegral: "0" | "1"; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; /** * Format: date-time + * @description Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2). * @example 2026-03-20T10:33:46-03:00 */ dtHrRepasse: string; @@ -1548,38 +2231,71 @@ export interface components { transacoes: components["schemas"]["InformeDeSegregacaoPixDinamicoTransacao"][]; }; InformeDeSegregacaoPixEstaticoTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example 1234ABDOASD11231234ABDOASD112312345 */ + /** + * @description Identificador único da transação no arranjo de pagamentos Pix (E2EID). + * @example 1234ABDOASD11231234ABDOASD112312345 + */ e2eId: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta. + * @example 87654321 + */ cnpjRaizPspRecInd?: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; /** * Format: date-time + * @description Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2). * @example 2026-03-20T10:33:46-03:00 */ dtHrRepasse: string; @@ -1589,31 +2305,60 @@ export interface components { transacoes: components["schemas"]["InformeDeSegregacaoPixEstaticoTransacao"][]; }; InformeDeSegregacaoTedTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example TED123456789 */ + /** + * @description Identificador único da transação TED gerado na liquidação (NumCtrlSTR ou NumCtrlPAG). + * @example TED123456789 + */ numCtrlTED: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal: string; - /** @example 87654321 */ + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 87654321 + */ cnpjRaizPspPag: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; /** * Format: date-time + * @description Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2). * @example 2026-03-20T10:33:46-03:00 */ dtHrRepasse: string; @@ -1623,36 +2368,61 @@ export interface components { transacoes: components["schemas"]["InformeDeSegregacaoTedTransacao"][]; }; InformeDeSegregacaoTefTransacao: { - /** @example 1 */ + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ index: number; - /** @example TEF123456789 */ + /** + * @description Identificador da transação TEF gerado pelo PSP. + * @example TEF123456789 + */ numCtrlTEF: string; - /** @example 10.02 */ + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ vlPago: number; - /** @example 10.02 */ + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlCbsSegr: number; - /** @example 10.02 */ + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ vlIbsSegr: number; - /** @example 1234567890123456789B123A5678901234567891123412345 */ + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ docFiscal: string; - /** @example 87654321 */ - cnpjRaizPspRecInd?: string; - /** @example 11444777000142 */ + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ cnpjRec: string; - /** @example 11444777000142 */ + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ cnpjCpfPagEfet: string; /** * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. * @example 2026-03-20T10:33:46-03:00 */ dtHrPgto: string; /** * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. * @example 2026-03-20T10:33:46-03:00 */ dtHrLiq: string; /** * Format: date-time + * @description Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2). * @example 2026-03-20T10:33:46-03:00 */ dtHrRepasse: string; @@ -1661,120 +2431,1432 @@ export interface components { dadosLoteSeg: components["schemas"]["DadosLoteSegRequest"]; transacoes: components["schemas"]["InformeDeSegregacaoTefTransacao"][]; }; - }; - responses: { - /** @description PP Recebido */ - PPResponseOk: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": { - /** @example Sucesso */ - title?: string; - /** @example 201 */ - status?: number; - /** @example Solicitação processada com sucesso */ - detail?: string; - /** @example 997 */ - numValidos?: number; - /** @example 3 */ - numErros?: number; - errors?: { - /** @example 10 */ - index?: number; - /** @example field1 */ - field?: string; - /** @example Campo obrigatório */ - message?: string; - }[]; - /** @example UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur */ - resourceId?: string; - }; - }; - }; - /** @description Stream iniciado com sucesso. Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação; o consumidor poderá realizar nova chamada com o token vigente. */ - PPResponseNoContentStreamStart: { - headers: { - streamId: components["headers"]["StreamIdHeader"]; - proximoToken: components["headers"]["ProximoTokenHeader"]; - [name: string]: unknown; - }; - content?: never; - }; - /** @description A consulta não retornou resultados */ - PPResponseNoContentRetroativoStart: { - headers: { - proximoToken: components["headers"]["ProximoTokenHeader"]; - [name: string]: unknown; - }; - content?: never; + /** @description Ocorrência do MOC. O discriminador principal e arrj (arranjo): cada arranjo exige o(s) identificador(es) de transacao correspondente(s). */ + MocOcorrencia: components["schemas"]["MocOcorrenciaBoleto"] | components["schemas"]["MocOcorrenciaPixEstatico"] | components["schemas"]["MocOcorrenciaPixDinamico"] | components["schemas"]["MocOcorrenciaPixAutomatico"] | components["schemas"]["MocOcorrenciaTed"] | components["schemas"]["MocOcorrenciaTef"]; + /** @description Retorno de ocorrência do MOC (resposta da RFB/CGIBS), na consulta paginada. O discriminador é arrj: cada arranjo exige o(s) identificador(es) de transação correspondente(s), conforme a matriz 3.9.4.1. */ + MocOcorrenciaRetorno: components["schemas"]["MocOcorrenciaRetornoBoleto"] | components["schemas"]["MocOcorrenciaRetornoPixAutomatico"] | components["schemas"]["MocOcorrenciaRetornoPixDinamico"] | components["schemas"]["MocOcorrenciaRetornoPixEstatico"] | components["schemas"]["MocOcorrenciaRetornoTed"] | components["schemas"]["MocOcorrenciaRetornoTef"]; + MocOcorrenciasConsultaResponse: { + /** @description Página de ocorrências com resposta. Máximo de 1.000 itens por página. */ + ocorrencias: components["schemas"]["MocOcorrenciaRetorno"][]; }; - /** @description Fim do resultado da consulta */ - PPResponseNoContentRetroativoToken: { - headers: { - proximoToken: components["headers"]["ProximoTokenHeader"]; - [name: string]: unknown; - }; - content?: never; + /** @description Ocorrência do arranjo Boleto (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos. */ + MocOcorrenciaBoleto: { + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. (enum property replaced by openapi-typescript) + * @enum {string} + */ + arrj: "BOL"; + idDda: components["schemas"]["InformePreliminarDePagamentoBoletoTransacao"]["idDda"]; + numIdentcBaixa?: components["schemas"]["InformePreliminarDePagamentoBoletoTransacao"]["numIdentcBaixa"]; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ + vlPago: number; + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlCbsSegr: number; + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlIbsSegr: number; + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ + docFiscal?: string; + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ + cnpjRaizPspRecDir: string; + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 12345678 + */ + cnpjRaizPspPag: string; + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ + cnpjRec: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfPagEfet?: string; + /** + * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. + * @example 2026-06-23T09:00:00-03:00 + */ + dtHrPgto: string; + /** + * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. + * @example 2026-06-23T10:00:00-03:00 + */ + dtHrLiq: string; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ + index: number; + codMotOcor?: components["schemas"]["CodMotOcorEnum"]; + /** + * @description Texto livre complementar ao motivo da ocorrência. + * @example Transação retida para análise de segurança + */ + descOcor?: string; + /** + * @description Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise). + * @example RFB + */ + orgRespProcAdm?: string; + /** + * @description Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise). + * @example PROC2026000123 + */ + numProcAdm?: string; + /** + * @description Valor de CBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlCbsEst?: number; + /** + * @description Valor de IBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlIbsEst?: number; + /** + * @description Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfDest: string; }; - /** @description Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação; o consumidor poderá realizar nova chamada com o token vigente. */ - PPResponseNoContentStreamToken: { - headers: { - proximoToken: components["headers"]["ProximoTokenHeader"]; - [name: string]: unknown; - }; - content?: never; + /** @description Ocorrência do arranjo Pix Estático (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos. */ + MocOcorrenciaPixEstatico: { + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. (enum property replaced by openapi-typescript) + * @enum {string} + */ + arrj: "PXE"; + e2eId: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["e2eId"]; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ + vlPago: number; + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlCbsSegr: number; + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlIbsSegr: number; + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ + docFiscal?: string; + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ + cnpjRaizPspRecDir: string; + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 12345678 + */ + cnpjRaizPspPag: string; + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ + cnpjRec: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfPagEfet: string; + /** + * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. + * @example 2026-06-23T09:00:00-03:00 + */ + dtHrPgto: string; + /** + * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. + * @example 2026-06-23T10:00:00-03:00 + */ + dtHrLiq: string; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ + index: number; + codMotOcor?: components["schemas"]["CodMotOcorEnum"]; + /** + * @description Texto livre complementar ao motivo da ocorrência. + * @example Transação retida para análise de segurança + */ + descOcor?: string; + /** + * @description Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise). + * @example RFB + */ + orgRespProcAdm?: string; + /** + * @description Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise). + * @example PROC2026000123 + */ + numProcAdm?: string; + /** + * @description Valor de CBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlCbsEst?: number; + /** + * @description Valor de IBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlIbsEst?: number; + /** + * @description Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfDest: string; }; - /** @description Bad Request */ - PPResponseBadRequest: { - headers: { - [name: string]: unknown; - }; - content: { - "application/problem+json": { - /** @example Bad Request */ - title?: string; - /** @example 400 */ - status?: number; - /** @example Todas as transações do informe estão inválidas */ - detail?: string; - errors?: { - /** @example 1 */ - index?: number; - /** @example field1 */ - field?: string; - /** @example field1: propriedade obrigatória 'field1' não encontrada */ - message?: string; - }[]; - }; + /** @description Ocorrência do arranjo Pix Dinâmico (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos. */ + MocOcorrenciaPixDinamico: { + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. (enum property replaced by openapi-typescript) + * @enum {string} + */ + arrj: "PXD"; + txId: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["txId"]; + e2eId?: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["e2eId"]; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ + vlPago: number; + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlCbsSegr: number; + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlIbsSegr: number; + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ + docFiscal?: string; + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ + cnpjRaizPspRecDir: string; + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 12345678 + */ + cnpjRaizPspPag: string; + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ + cnpjRec: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfPagEfet: string; + /** + * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. + * @example 2026-06-23T09:00:00-03:00 + */ + dtHrPgto: string; + /** + * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. + * @example 2026-06-23T10:00:00-03:00 + */ + dtHrLiq: string; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ + index: number; + codMotOcor?: components["schemas"]["CodMotOcorEnum"]; + /** + * @description Texto livre complementar ao motivo da ocorrência. + * @example Transação retida para análise de segurança + */ + descOcor?: string; + /** + * @description Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise). + * @example RFB + */ + orgRespProcAdm?: string; + /** + * @description Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise). + * @example PROC2026000123 + */ + numProcAdm?: string; + /** + * @description Valor de CBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlCbsEst?: number; + /** + * @description Valor de IBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlIbsEst?: number; + /** + * @description Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfDest: string; + }; + /** @description Ocorrência do arranjo Pix Automático (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos. */ + MocOcorrenciaPixAutomatico: { + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. (enum property replaced by openapi-typescript) + * @enum {string} + */ + arrj: "PXA"; + txId: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["txId"]; + e2eId?: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["e2eId"]; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ + vlPago: number; + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlCbsSegr: number; + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlIbsSegr: number; + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ + docFiscal?: string; + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ + cnpjRaizPspRecDir: string; + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 12345678 + */ + cnpjRaizPspPag: string; + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ + cnpjRec: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfPagEfet: string; + /** + * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. + * @example 2026-06-23T09:00:00-03:00 + */ + dtHrPgto: string; + /** + * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. + * @example 2026-06-23T10:00:00-03:00 + */ + dtHrLiq: string; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ + index: number; + codMotOcor?: components["schemas"]["CodMotOcorEnum"]; + /** + * @description Texto livre complementar ao motivo da ocorrência. + * @example Transação retida para análise de segurança + */ + descOcor?: string; + /** + * @description Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise). + * @example RFB + */ + orgRespProcAdm?: string; + /** + * @description Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise). + * @example PROC2026000123 + */ + numProcAdm?: string; + /** + * @description Valor de CBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlCbsEst?: number; + /** + * @description Valor de IBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlIbsEst?: number; + /** + * @description Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfDest: string; + }; + /** @description Ocorrência do arranjo TED (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos. */ + MocOcorrenciaTed: { + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. (enum property replaced by openapi-typescript) + * @enum {string} + */ + arrj: "TED"; + numCtrlTED: components["schemas"]["InformePreliminarDePagamentoTedTransacao"]["numCtrlTED"]; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ + vlPago: number; + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlCbsSegr: number; + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlIbsSegr: number; + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ + docFiscal?: string; + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ + cnpjRaizPspRecDir: string; + /** + * @description Raiz do CNPJ do PSP Pagador. + * @example 12345678 + */ + cnpjRaizPspPag: string; + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ + cnpjRec: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfPagEfet: string; + /** + * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. + * @example 2026-06-23T10:00:00-03:00 + */ + dtHrLiq: string; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ + index: number; + codMotOcor?: components["schemas"]["CodMotOcorEnum"]; + /** + * @description Texto livre complementar ao motivo da ocorrência. + * @example Transação retida para análise de segurança + */ + descOcor?: string; + /** + * @description Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise). + * @example RFB + */ + orgRespProcAdm?: string; + /** + * @description Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise). + * @example PROC2026000123 + */ + numProcAdm?: string; + /** + * @description Valor de CBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlCbsEst?: number; + /** + * @description Valor de IBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlIbsEst?: number; + /** + * @description Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfDest: string; + }; + /** @description Ocorrência do arranjo TEF (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos. */ + MocOcorrenciaTef: { + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. (enum property replaced by openapi-typescript) + * @enum {string} + */ + arrj: "TEF"; + numCtrlTEF: components["schemas"]["InformePreliminarDePagamentoTefTransacao"]["numCtrlTEF"]; + /** + * @description Valor efetivamente pago na transação. + * @example 10.02 + */ + vlPago: number; + /** + * @description Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlCbsSegr: number; + /** + * @description Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação. + * @example 10.02 + */ + vlIbsSegr: number; + /** + * @description Identificador do Documento Fiscal vinculado à transação. + * @example 1234567890123456789B123A5678901234567891123412345 + */ + docFiscal?: string; + /** + * @description Raiz do CNPJ do PSP Recebedor Direto. + * @example 12345678 + */ + cnpjRaizPspRecDir: string; + /** + * @description Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos). + * @example 11444777000142 + */ + cnpjRec: string; + /** + * @description Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjPagOrig: string; + /** + * @description Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfPagEfet: string; + /** + * Format: date-time + * @description Data e hora em que o pagamento foi realizado pelo Pagador. + * @example 2026-06-23T09:00:00-03:00 + */ + dtHrPgto: string; + /** + * Format: date-time + * @description Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo. + * @example 2026-06-23T10:00:00-03:00 + */ + dtHrLiq: string; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * @description Número sequencial do item na lista enviada, iniciando em 1. + * @example 1 + */ + index: number; + codMotOcor?: components["schemas"]["CodMotOcorEnum"]; + /** + * @description Texto livre complementar ao motivo da ocorrência. + * @example Transação retida para análise de segurança + */ + descOcor?: string; + /** + * @description Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise). + * @example RFB + */ + orgRespProcAdm?: string; + /** + * @description Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise). + * @example PROC2026000123 + */ + numProcAdm?: string; + /** + * @description Valor de CBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlCbsEst?: number; + /** + * @description Valor de IBS solicitado para estorno (Solicitação de Estorno). + * @example 10.02 + */ + vlIbsEst?: number; + /** + * @description Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos. + * @example 11444777000142 + */ + cnpjCpfDest: string; + }; + MocOcorrenciaSol: components["schemas"]["MocOcorrencia"] & { + /** @description Solicitacao de estorno: os tres valores abaixo sao obrigatorios (spec: allOf[1].required). */ + codMotOcor: NonNullable; + vlCbsEst: NonNullable; + vlIbsEst: NonNullable; + /** @description Proibidos na solicitacao (spec: allOf[1].not.anyOf). */ + orgRespProcAdm?: never; + numProcAdm?: never; + }; + MocOcorrenciaNot: components["schemas"]["MocOcorrencia"] & { + /** @description Notificacao: os campos de estorno sao proibidos (spec: allOf[1].not.anyOf). */ + codMotOcor?: never; + vlCbsEst?: never; + vlIbsEst?: never; + }; + /** @description Requisicao MOC contendo exclusivamente ocorrencias de solicitacao. */ + MecanismoDeOcorrenciasSolRequest: { + infRequisicao: { + /** + * Format: date-time + * @description Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrMsg: string; + }; + /** @description Lista de ocorrências do MOC. Máximo de 1.000 por requisição. */ + ocorrencias: components["schemas"]["MocOcorrenciaSol"][]; + }; + /** @description Requisicao MOC contendo exclusivamente ocorrencias de notificacao. */ + MecanismoDeOcorrenciasNotRequest: { + infRequisicao: { + /** + * Format: date-time + * @description Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrMsg: string; + }; + /** @description Lista de ocorrências do MOC. Máximo de 1.000 por requisição. */ + ocorrencias: components["schemas"]["MocOcorrenciaNot"][]; + }; + /** + * @description Código do parecer sobre a solicitação de estorno via MOC associada à transação. 01= Aceita, 02 = Aceita Parcialmente, 03 = Não aceita + * @example 01 + * @example 02 + * @example 03 + * @enum {string} + */ + CodParecerEnum: "01" | "02" | "03"; + /** + * @description Código do motivo da ocorrência (Solicitação de Estorno): 01 = Incidente de segurança; 02 = Falha operacional (Atores Financeiros). + * @example 01 + * @example 02 + * @enum {string} + */ + CodMotOcorEnum: "01" | "02"; + /** + * @description Órgão que respondeu à solicitação de estorno: RFB (Receita Federal do Brasil) ou CGIBS (Comitê Gestor do IBS). Presente no Retorno da Solicitação de Estorno. + * @example RFB + * @example CGIBS + * @enum {string} + */ + OrgRespResEnum: "RFB" | "CGIBS"; + /** + * @description Tributo a que se refere o parecer: CBS (Contribuição sobre Bens e Serviços) ou IBS (Imposto sobre Bens e Serviços). Presente no Retorno da Solicitação de Estorno. + * @example CBS + * @example IBS + * @enum {string} + */ + TpTribEnum: "CBS" | "IBS"; + /** @description Retorno de ocorrência do MOC — arranjo Boleto (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02. */ + MocOcorrenciaRetornoBoleto: { + /** + * @description NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC. + * @example 1234567890123456789 + */ + nsuId: string; + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. + * @example BOL + * @constant + */ + arrj: "BOL"; + idDda: components["schemas"]["InformePreliminarDePagamentoBoletoTransacao"]["idDda"]; + numIdentcBaixa?: components["schemas"]["InformePreliminarDePagamentoBoletoTransacao"]["numIdentcBaixa"]; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * Format: date-time + * @description Data e hora de envio da ocorrência pelo responsável da abertura do MOC. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrEnvOcor: string; + /** + * Format: date-time + * @description Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno. + * @example 2026-06-24T15:00:00-03:00 + */ + dtHrRespOcor: string; + orgRespRes: components["schemas"]["OrgRespResEnum"]; + codParecer: components["schemas"]["CodParecerEnum"]; + tpTrib: components["schemas"]["TpTribEnum"]; + /** + * @description Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno. + * @example 10.02 + */ + vlTribEst: number; + /** + * @description Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno. + * @example Ocorrência respondida pelo órgão competente + */ + descParecer?: string; + /** + * @description Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno. + * @example Consultar retorno da ocorrência para acompanhamento + */ + orientSolic?: string; + /** + * @description Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente). + * @example APV20260623000100001 + */ + idAprovEst?: string; + } & (unknown & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + arrj: "BOL"; + }); + /** @description Retorno de ocorrência do MOC — arranjo Pix Automático (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02. */ + MocOcorrenciaRetornoPixAutomatico: { + /** + * @description NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC. + * @example 1234567890123456789 + */ + nsuId: string; + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. + * @example PXA + * @constant + */ + arrj: "PXA"; + txId: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["txId"]; + e2eId?: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["e2eId"]; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * Format: date-time + * @description Data e hora de envio da ocorrência pelo responsável da abertura do MOC. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrEnvOcor: string; + /** + * Format: date-time + * @description Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno. + * @example 2026-06-24T15:00:00-03:00 + */ + dtHrRespOcor: string; + orgRespRes: components["schemas"]["OrgRespResEnum"]; + codParecer: components["schemas"]["CodParecerEnum"]; + tpTrib: components["schemas"]["TpTribEnum"]; + /** + * @description Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno. + * @example 10.02 + */ + vlTribEst: number; + /** + * @description Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno. + * @example Ocorrência respondida pelo órgão competente + */ + descParecer?: string; + /** + * @description Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno. + * @example Consultar retorno da ocorrência para acompanhamento + */ + orientSolic?: string; + /** + * @description Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente). + * @example APV20260623000100001 + */ + idAprovEst?: string; + } & (unknown & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + arrj: "PXA"; + }); + /** @description Retorno de ocorrência do MOC — arranjo Pix Dinâmico (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02. */ + MocOcorrenciaRetornoPixDinamico: { + /** + * @description NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC. + * @example 1234567890123456789 + */ + nsuId: string; + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. + * @example PXD + * @constant + */ + arrj: "PXD"; + txId: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["txId"]; + e2eId?: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["e2eId"]; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * Format: date-time + * @description Data e hora de envio da ocorrência pelo responsável da abertura do MOC. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrEnvOcor: string; + /** + * Format: date-time + * @description Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno. + * @example 2026-06-24T15:00:00-03:00 + */ + dtHrRespOcor: string; + orgRespRes: components["schemas"]["OrgRespResEnum"]; + codParecer: components["schemas"]["CodParecerEnum"]; + tpTrib: components["schemas"]["TpTribEnum"]; + /** + * @description Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno. + * @example 10.02 + */ + vlTribEst: number; + /** + * @description Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno. + * @example Ocorrência respondida pelo órgão competente + */ + descParecer?: string; + /** + * @description Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno. + * @example Consultar retorno da ocorrência para acompanhamento + */ + orientSolic?: string; + /** + * @description Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente). + * @example APV20260623000100001 + */ + idAprovEst?: string; + } & (unknown & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + arrj: "PXD"; + }); + /** @description Retorno de ocorrência do MOC — arranjo Pix Estático (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02. */ + MocOcorrenciaRetornoPixEstatico: { + /** + * @description NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC. + * @example 1234567890123456789 + */ + nsuId: string; + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. + * @example PXE + * @constant + */ + arrj: "PXE"; + e2eId: components["schemas"]["InformePreliminarDePagamentoPixAutomaticoTransacao"]["e2eId"]; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * Format: date-time + * @description Data e hora de envio da ocorrência pelo responsável da abertura do MOC. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrEnvOcor: string; + /** + * Format: date-time + * @description Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno. + * @example 2026-06-24T15:00:00-03:00 + */ + dtHrRespOcor: string; + orgRespRes: components["schemas"]["OrgRespResEnum"]; + codParecer: components["schemas"]["CodParecerEnum"]; + tpTrib: components["schemas"]["TpTribEnum"]; + /** + * @description Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno. + * @example 10.02 + */ + vlTribEst: number; + /** + * @description Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno. + * @example Ocorrência respondida pelo órgão competente + */ + descParecer?: string; + /** + * @description Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno. + * @example Consultar retorno da ocorrência para acompanhamento + */ + orientSolic?: string; + /** + * @description Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente). + * @example APV20260623000100001 + */ + idAprovEst?: string; + } & (unknown & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + arrj: "PXE"; + }); + /** @description Retorno de ocorrência do MOC — arranjo TED (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02. */ + MocOcorrenciaRetornoTed: { + /** + * @description NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC. + * @example 1234567890123456789 + */ + nsuId: string; + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. + * @example TED + * @constant + */ + arrj: "TED"; + numCtrlTED: components["schemas"]["InformePreliminarDePagamentoTedTransacao"]["numCtrlTED"]; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * Format: date-time + * @description Data e hora de envio da ocorrência pelo responsável da abertura do MOC. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrEnvOcor: string; + /** + * Format: date-time + * @description Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno. + * @example 2026-06-24T15:00:00-03:00 + */ + dtHrRespOcor: string; + orgRespRes: components["schemas"]["OrgRespResEnum"]; + codParecer: components["schemas"]["CodParecerEnum"]; + tpTrib: components["schemas"]["TpTribEnum"]; + /** + * @description Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno. + * @example 10.02 + */ + vlTribEst: number; + /** + * @description Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno. + * @example Ocorrência respondida pelo órgão competente + */ + descParecer?: string; + /** + * @description Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno. + * @example Consultar retorno da ocorrência para acompanhamento + */ + orientSolic?: string; + /** + * @description Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente). + * @example APV20260623000100001 + */ + idAprovEst?: string; + } & (unknown & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + arrj: "TED"; + }); + /** @description Retorno de ocorrência do MOC — arranjo TEF (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02. */ + MocOcorrenciaRetornoTef: { + /** + * @description NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC. + * @example 1234567890123456789 + */ + nsuId: string; + /** + * @description Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF. + * @example TEF + * @constant + */ + arrj: "TEF"; + numCtrlTEF: components["schemas"]["InformePreliminarDePagamentoTefTransacao"]["numCtrlTEF"]; + /** + * @description Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto. + * @example SOL12345678PXD202606230000001 + */ + idOcor: string; + /** + * Format: date-time + * @description Data e hora de envio da ocorrência pelo responsável da abertura do MOC. + * @example 2026-06-23T12:00:00-03:00 + */ + dtHrEnvOcor: string; + /** + * Format: date-time + * @description Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno. + * @example 2026-06-24T15:00:00-03:00 + */ + dtHrRespOcor: string; + orgRespRes: components["schemas"]["OrgRespResEnum"]; + codParecer: components["schemas"]["CodParecerEnum"]; + tpTrib: components["schemas"]["TpTribEnum"]; + /** + * @description Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno. + * @example 10.02 + */ + vlTribEst: number; + /** + * @description Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno. + * @example Ocorrência respondida pelo órgão competente + */ + descParecer?: string; + /** + * @description Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno. + * @example Consultar retorno da ocorrência para acompanhamento + */ + orientSolic?: string; + /** + * @description Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente). + * @example APV20260623000100001 + */ + idAprovEst?: string; + } & (unknown & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + arrj: "TEF"; + }); + }; + responses: { + /** @description PP Recebido */ + PPResponseOk: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/json": { + /** @example Sucesso */ + title?: string; + /** @example 201 */ + status?: number; + /** @example Solicitação processada com sucesso */ + detail?: string; + /** @example 997 */ + numValidos?: number; + /** @example 3 */ + numErros?: number; + errors?: { + /** + * @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. + * @example 10 + */ + index?: number; + /** @example field1 */ + field?: string; + /** @example Campo obrigatório */ + message?: string; + }[]; + /** @example UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur */ + resourceId?: string; + }; + }; + }; + /** @description Stream iniciado com sucesso. Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação. No fluxo principal do Retorno Super Inteligente, o 204 (sem corpo) retorna o token de continuação no cabeçalho 'proximoToken' e indica ausência de mensagens no momento: o consumidor deve prosseguir consultando com o proximoToken retornado (não reutilizar o token enviado na requisição). */ + PPResponseNoContentStreamStart: { + headers: { + streamId: components["headers"]["StreamIdHeader"]; + proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content?: never; + }; + /** @description A consulta não retornou resultados Na Consulta Retroativa, o 204 (sem corpo) com o último token no header 'proximoToken' indica fim do stream — o consumidor deve encerrar com DELETE. */ + PPResponseNoContentRetroativoStart: { + headers: { + proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content?: never; + }; + /** @description Fim do resultado da consulta 204 (sem corpo): na Consulta Retroativa, o retorno do último token no header 'proximoToken' indica fim do stream, exigindo DELETE para encerrar. */ + PPResponseNoContentRetroativoToken: { + headers: { + proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content?: never; + }; + /** @description Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação. No fluxo principal do Retorno Super Inteligente, o 204 (sem corpo) retorna o token de continuação no cabeçalho 'proximoToken' e indica ausência de mensagens no momento: o consumidor deve prosseguir consultando com o proximoToken retornado (não reutilizar o token enviado na requisição). */ + PPResponseNoContentStreamToken: { + headers: { + proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content?: never; + }; + /** @description Stream encerrada. A stream foi encerrada por um DELETE ou automaticamente em função da política de sanitização de streams inativas. O PSP deverá considerar a stream definitivamente extinta e iniciar uma nova stream por meio do endpoint /start. Eventuais mensagens não processadas poderão ser recuperadas por meio da Consulta Retroativa Super Inteligente. */ + PPResponseGoneStream: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Gone */ + title?: string; + /** @example 410 */ + status?: number; + /** @example Stream encerrada. */ + detail?: string; + errors?: { + /** @example token */ + field?: string; + /** @example token pertence a uma stream encerrada */ + message?: string; + }[]; + }; + }; + }; + /** @description Stream encerrada. A stream foi encerrada por um DELETE ou automaticamente em função da política de sanitização de streams inativas. O PSP deverá considerar a stream definitivamente extinta e, se necessário, iniciar uma nova consulta por meio do endpoint /start. */ + PPResponseGoneRetroativoStream: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Gone */ + title?: string; + /** @example 410 */ + status?: number; + /** @example Stream encerrada. */ + detail?: string; + errors?: { + /** @example token */ + field?: string; + /** @example token pertence a uma stream encerrada */ + message?: string; + }[]; + }; + }; + }; + /** @description Bad Request */ + PPResponseBadRequest: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Bad Request */ + title?: string; + /** @example 400 */ + status?: number; + /** @example Todas as transações do informe estão inválidas */ + detail?: string; + errors?: { + /** + * @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. + * @example 1 + */ + index?: number; + /** @example field1 */ + field?: string; + /** @example field1: propriedade obrigatória 'field1' não encontrada */ + message?: string; + }[]; + }; + }; + }; + /** @description Bad Request */ + PPResponseBadRequestSegregacao: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Bad Request */ + title?: string; + /** @example 400 */ + status?: number; + /** @example Dados do informe de segregacao invalidos */ + detail?: string; + errors?: { + /** @example idInfSegr */ + field?: string; + /** @example idInfSegr: formato invalido */ + message?: string; + }[]; + }; + }; + }; + /** @description Bad Request */ + PPResponseBadRequestConsultaStream: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Bad Request */ + title?: string; + /** @example 400 */ + status?: number; + /** @example Parametros invalidos */ + detail?: string; + errors?: { + /** @example token */ + field?: string; + /** @example campoX: parametro obrigatorio nao informado */ + message?: string; + }[]; + }; + }; + }; + /** @description Unprocessable Entity */ + PPResponseUnprocessableEntityConsultaStream: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Unprocessable Entity */ + title?: string; + /** @example 422 */ + status?: number; + /** @example Regras de negocio violadas para consulta de stream */ + detail?: string; + errors?: { + /** + * @example streamId + * @example nsuInicial + */ + field?: string; + /** + * @example streamId inexistente + * @example nsuInicial deve ser menor ou igual a nsuFinal + */ + message?: string; + }[]; + }; + }; + }; + /** @description Forbidden */ + PPResponseForbidden: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Forbidden */ + title?: string; + /** @example 403 */ + status?: number; + /** @example Todas as transações do informe estão inválidas */ + detail?: string; + errors?: { + /** @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. */ + index?: number; + field?: string; + message?: string; + }[]; + }; + }; + }; + /** @description Internal Server Error */ + PPResponseError: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/problem+json": { + /** @example Internal Server Error */ + title?: string; + /** @example 500 */ + status?: number; + /** @example Todas as transações do informe estão inválidas */ + detail?: string; + errors?: { + /** @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. */ + index?: number; + field?: string; + message?: string; + }[]; + }; + }; + }; + /** @description PP Recebido */ + PPResponseCreatedSegregacao: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + /** + * @example { + * "title": "PP Recebido", + * "status": 201, + * "detail": "Informe de segregação iniciado/finalizado com sucesso", + * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + * } + */ + "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; + }; + }; + /** @description Lote criado com sucesso (primeiro envio do idLote). */ + PPResponseCreatedLote: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + /** + * @example { + * "title": "PP Recebido", + * "status": 201, + * "detail": "Lote criado com sucesso", + * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + * } + */ + "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; }; }; - /** @description Bad Request */ - PPResponseBadRequestSegregacao: { + /** @description PP Lote Recebido Anteriormente */ + PPResponseOkLote: { headers: { [name: string]: unknown; }; content: { - "application/problem+json": { - /** @example Bad Request */ - title?: string; - /** @example 400 */ - status?: number; - /** @example Dados do informe de segregacao invalidos */ - detail?: string; - errors?: { - /** @example idInfSegr */ - field?: string; - /** @example idInfSegr: formato invalido */ - message?: string; - }[]; - }; + /** + * @example { + * "title": "PP Lote Recebido Anteriormente", + * "status": 200, + * "detail": "Lote foi recebido anteriormente", + * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + * } + */ + "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; + }; + }; + /** @description Consulta realizada com sucesso, porém sem ocorrências disponíveis no momento. O PSP deve aguardar 30 minutos antes de realizar nova consulta, conforme indicado no header 'Retry-After'. Não representa falha. */ + PPResponseNoContentMocConsultaStart: { + headers: { + /** @description Tempo, em segundos, que o cliente deve aguardar antes de realizar uma nova consulta. */ + "Retry-After"?: number; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; }; + content?: never; + }; + /** @description Não há mais ocorrências disponíveis no momento. O PSP deve aguardar 30 minutos antes de realizar nova consulta, conforme indicado no header 'Retry-After'. Não representa falha. */ + PPResponseNoContentMocConsultaToken: { + headers: { + /** @description Tempo, em segundos, que o cliente deve aguardar antes de realizar uma nova consulta. */ + "Retry-After"?: number; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content?: never; }; /** @description Bad Request */ - PPResponseBadRequestConsultaStream: { + PPResponseBadRequestMocConsulta: { headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -1786,7 +3868,7 @@ export interface components { /** @example Parametros invalidos */ detail?: string; errors?: { - /** @example token */ + /** @example nsuInicial */ field?: string; /** @example campoX: parametro obrigatorio nao informado */ message?: string; @@ -1795,8 +3877,9 @@ export interface components { }; }; /** @description Unprocessable Entity */ - PPResponseUnprocessableEntityConsultaStream: { + PPResponseUnprocessableEntityMocConsulta: { headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -1805,26 +3888,21 @@ export interface components { title?: string; /** @example 422 */ status?: number; - /** @example Regras de negocio violadas para consulta de stream */ + /** @example Regras de negocio violadas para a consulta de ocorrencias do MOC */ detail?: string; errors?: { - /** - * @example streamId - * @example fromNsu - */ + /** @example proximoToken */ field?: string; - /** - * @example streamId inexistente - * @example fromNsu deve ser menor ou igual a toNsu - */ + /** @example proximoToken inexistente ou expirado */ message?: string; }[]; }; }; }; /** @description Unprocessable Entity */ - PPResponseUnprocessableEntity: { + PPResponseUnprocessableEntitySegregacaoIniciada: { headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -1833,200 +3911,125 @@ export interface components { title?: string; /** @example 422 */ status?: number; - /** @example Regras de negócio violadas para o informe de segregação */ + /** @example Regra de negócio violada na abertura do informe de remessa de segregação. */ detail?: string; errors?: { - /** @example 1 */ + /** + * @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. + * @example 1 + */ index?: number; /** @example idInfSegr */ field?: string; - /** @example Remessa não iniciada */ + /** + * @description Mensagem da regra de negócio violada. Valores possíveis nesta etapa listados nos exemplos. + * @example Já existe uma remessa de segregação iniciada para o idInfSegr informado + */ message?: string; }[]; }; }; }; - /** @description Forbidden */ - PPResponseForbidden: { + /** @description Unprocessable Entity */ + PPResponseUnprocessableEntitySegregacaoLote: { headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/problem+json": { - /** @example Forbidden */ + /** @example Unprocessable Entity */ title?: string; - /** @example 403 */ + /** @example 422 */ status?: number; - /** @example Todas as transações do informe estão inválidas */ + /** @example Regra de negócio violada no envio do lote de transações da segregação. */ detail?: string; errors?: { + /** + * @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. + * @example 1 + */ index?: number; + /** @example idInfSegr */ field?: string; + /** + * @description Mensagem da regra de negócio violada. Valores possíveis nesta etapa listados nos exemplos. + * @example Não existe remessa de segregação iniciada para o idInfSegr informado + * @example Já existe uma remessa de segregação finalizada para o idInfSegr informado + * @example O cnpjRaizPspRecDir informado é diferente do cnpjRaizPspRecDir enviado na remessa de segregação iniciada para o idInfSegr informado + */ message?: string; }[]; }; }; }; - /** @description Internal Server Error */ - PPResponseError: { + /** @description Unprocessable Entity */ + PPResponseUnprocessableEntitySegregacaoFinalizacao: { headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/problem+json": { - /** @example Internal Server Error */ + /** @example Unprocessable Entity */ title?: string; - /** @example 500 */ + /** @example 422 */ status?: number; - /** @example Todas as transações do informe estão inválidas */ + /** @example Regra de negócio violada na finalização da remessa de segregação. */ detail?: string; errors?: { + /** + * @description Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição. + * @example 1 + */ index?: number; + /** @example idInfSegr */ field?: string; + /** + * @description Mensagem da regra de negócio violada. Valores possíveis nesta etapa listados nos exemplos. + * @example Não existe remessa de segregação iniciada para o idInfSegr informado + * @example Já existe uma remessa de segregação finalizada para o idInfSegr informado + * @example O valor informado em totalTrans difere da quantidade de transações enviadas + * @example O valor informado em vlTotalCbs difere da soma dos valores de CBS das transações enviadas + * @example O valor informado em vlTotalIbs difere da soma dos valores de IBS das transações enviadas + * @example O cnpjRaizPspRecDir informado é diferente do cnpjRaizPspRecDir enviado na remessa de segregação iniciada para o idInfSegr informado + */ message?: string; }[]; }; }; }; - /** @description Bad Request */ - BadRequest: { - headers: { - [name: string]: unknown; - }; - content: { - "application/problem+json": { - error?: string; - details?: string; - }; - }; - }; - /** @description Unauthorized */ - Unauthorized: { - headers: { - [name: string]: unknown; - }; - content: { - "application/problem+json": { - error?: string; - }; - }; - }; - /** @description Not Found */ - NotFound: { - headers: { - [name: string]: unknown; - }; - content: { - "application/problem+json": { - error?: string; - }; - }; - }; - /** @description PP Recebido */ - PPResponseCreatedSegregacao: { - headers: { - [name: string]: unknown; - }; - content: { - /** - * @example { - * "title": "PP Recebido", - * "status": 201, - * "detail": "Informe de segregação iniciado/finalizado com sucesso", - * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - * } - */ - "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; - }; - }; - /** @description PP Segregação Recebido Anteriormente */ - PPResponseOkSegregacao: { - headers: { - [name: string]: unknown; - }; - content: { - /** - * @example { - * "title": "PP Segregação Recebido Anteriormente", - * "status": 200, - * "detail": "Informe de segregação iniciado/finalizado anteriormente", - * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - * } - */ - "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; - }; - }; - /** @description PP Recebido */ - PPResponseCreatedLote: { + /** @description Lote atualizado com sucesso (reenvio com o mesmo idLote, substituindo o anterior). */ + PPResponseOkLoteAtualizado: { headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { /** * @example { * "title": "PP Recebido", - * "status": 201, - * "detail": "Lote recebido com sucesso", - * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - * } - */ - "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; - }; - }; - /** @description PP Lote Recebido Anteriormente */ - PPResponseOkLote: { - headers: { - [name: string]: unknown; - }; - content: { - /** - * @example { - * "title": "PP Lote Recebido Anteriormente", * "status": 200, - * "detail": "Lote foi recebido anteriormente", + * "detail": "Lote atualizado com sucesso", * "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" * } */ "application/json": components["responses"]["PPResponseOk"]["content"]["application/json"]; }; }; - /** @description Internal Server Error */ - InternalServerError: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": { - error?: string; - requestId?: string; - }; - }; - }; }; parameters: { - /** @description Header: messageId (Formato UUID v4) */ - MessageIdHeaderParam: string; - /** @description Header: correlationId */ - CorrelationIdHeaderParam: string; - /** @description Header: tenantId */ - TenantIdHeaderParam: string; - /** @description Header: timestamp */ - TimestampHeaderParam: string; + /** @description Header: Assinatura JWS da requisição. */ + XJwsSignatureHeaderParam: string; }; requestBodies: never; headers: { - /** @description Header: messageId (UUID v4 format) */ - MessageIdHeader: string; - /** @description Header: correlationId */ - CorrelationIdHeader: string; - /** @description Header: tenantId */ - TenantIdHeader: string; + /** @description Header: Assinatura JWS da resposta. */ + XJwsSignatureResponseHeader: string; /** @description Token de posição da leitura */ ProximoTokenHeader: string; /** @description Identificador do stream */ StreamIdHeader: string; - /** @description Header: timestamp */ - TimestampHeader: string; }; pathItems: never; } @@ -2036,14 +4039,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2064,14 +4061,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2092,14 +4083,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2116,46 +4101,12 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - patchapiv1pix_automatico: { - parameters: { - query?: never; - header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; - }; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["InformeDeTransacaoAtualizadaPixAutomaticoRequest"]; - }; - }; - responses: { - 201: components["responses"]["PPResponseOk"]; - 400: components["responses"]["PPResponseBadRequest"]; - 403: components["responses"]["PPResponseForbidden"]; - 500: components["responses"]["PPResponseError"]; - }; - }; postapiv1pix_dinamico: { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2176,14 +4127,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2204,14 +4149,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2232,14 +4171,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2260,14 +4193,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2288,14 +4215,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2316,14 +4237,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2344,14 +4259,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2372,14 +4281,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2400,14 +4303,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2428,14 +4325,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -2452,22 +4343,16 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outboleto{idPsp}tributosstreamstart": { + "getapiv1outboleto{cnpjRaizPspRecDir}transacoesstreamstart": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; }; cookie?: never; }; @@ -2478,11 +4363,12 @@ export interface operations { headers: { streamId: components["headers"]["StreamIdHeader"]; proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/json": { - tributos: components["schemas"]["RetornoSuperInteligenteBoletoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligenteBoletoTransacao"][]; }; }; }; @@ -2493,23 +4379,17 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outboleto{idPsp}tributosstream{token}": { + "getapiv1outboleto{cnpjRaizPspRecDir}transacoesstream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; @@ -2520,6 +4400,7 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -2529,34 +4410,29 @@ export interface operations { 204: components["responses"]["PPResponseNoContentStreamToken"]; 400: components["responses"]["PPResponseBadRequestConsultaStream"]; 403: components["responses"]["PPResponseForbidden"]; + 410: components["responses"]["PPResponseGoneStream"]; 422: components["responses"]["PPResponseUnprocessableEntityConsultaStream"]; 500: components["responses"]["PPResponseError"]; }; }; - "deleteapiv1outboleto{idPsp}tributosstream{token}": { + "deleteapiv1outboleto{cnpjRaizPspRecDir}transacoesstream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description Stream cancelado com sucesso */ + /** @description Stream finalizado com sucesso */ 204: { headers: { [name: string]: unknown; @@ -2569,22 +4445,16 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_automatico{idPsp}tributosstreamstart": { + "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstreamstart": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; }; cookie?: never; }; @@ -2595,11 +4465,12 @@ export interface operations { headers: { streamId: components["headers"]["StreamIdHeader"]; proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/json": { - tributos: components["schemas"]["RetornoSuperInteligentePixAutomaticoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligentePixAutomaticoTransacao"][]; }; }; }; @@ -2610,23 +4481,17 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_automatico{idPsp}tributosstream{token}": { + "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; @@ -2637,6 +4502,7 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -2646,34 +4512,29 @@ export interface operations { 204: components["responses"]["PPResponseNoContentStreamToken"]; 400: components["responses"]["PPResponseBadRequestConsultaStream"]; 403: components["responses"]["PPResponseForbidden"]; + 410: components["responses"]["PPResponseGoneStream"]; 422: components["responses"]["PPResponseUnprocessableEntityConsultaStream"]; 500: components["responses"]["PPResponseError"]; }; }; - "deleteapiv1outpix_automatico{idPsp}tributosstream{token}": { + "deleteapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description Stream cancelado com sucesso */ + /** @description Stream finalizado com sucesso */ 204: { headers: { [name: string]: unknown; @@ -2686,22 +4547,16 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_dinamico{idPsp}tributosstreamstart": { + "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstreamstart": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; }; cookie?: never; }; @@ -2712,11 +4567,12 @@ export interface operations { headers: { streamId: components["headers"]["StreamIdHeader"]; proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/json": { - tributos: components["schemas"]["RetornoSuperInteligentePixDinamicoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligentePixDinamicoTransacao"][]; }; }; }; @@ -2727,23 +4583,17 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_dinamico{idPsp}tributosstream{token}": { + "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; @@ -2754,6 +4604,7 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -2763,34 +4614,29 @@ export interface operations { 204: components["responses"]["PPResponseNoContentStreamToken"]; 400: components["responses"]["PPResponseBadRequestConsultaStream"]; 403: components["responses"]["PPResponseForbidden"]; + 410: components["responses"]["PPResponseGoneStream"]; 422: components["responses"]["PPResponseUnprocessableEntityConsultaStream"]; 500: components["responses"]["PPResponseError"]; }; }; - "deleteapiv1outpix_dinamico{idPsp}tributosstream{token}": { + "deleteapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description Stream cancelado com sucesso */ + /** @description Stream finalizado com sucesso */ 204: { headers: { [name: string]: unknown; @@ -2803,29 +4649,23 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outboleto{idPsp}tributosretroativostreamstart": { + "getapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostreamstart": { parameters: { query: { - /** @description Query parameter: fromNsu */ - fromNsu: number; - /** @description Query parameter: streamId */ + /** @description Número Sequencial Único da mensagem que se deseja iniciar a consulta retroativa de Super Inteligente. */ + nsuInicial: string; + /** @description Identificador do stream que se deseja consultar. */ streamId?: string; - /** @description Query parameter: toNsu */ - toNsu?: number; + /** @description Número Sequencial Único da mensagem que se deseja finalizar a consulta retroativa de Super Inteligente. */ + nsuFinal?: string; }; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; }; cookie?: never; }; @@ -2835,11 +4675,12 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/json": { - tributos: components["schemas"]["RetornoSuperInteligenteBoletoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligenteBoletoTransacao"][]; }; }; }; @@ -2850,23 +4691,17 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outboleto{idPsp}tributosretroativostream{token}": { + "getapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; @@ -2877,6 +4712,7 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -2886,34 +4722,29 @@ export interface operations { 204: components["responses"]["PPResponseNoContentRetroativoToken"]; 400: components["responses"]["PPResponseBadRequestConsultaStream"]; 403: components["responses"]["PPResponseForbidden"]; + 410: components["responses"]["PPResponseGoneRetroativoStream"]; 422: components["responses"]["PPResponseUnprocessableEntityConsultaStream"]; 500: components["responses"]["PPResponseError"]; }; }; - "deleteapiv1outboleto{idPsp}tributosretroativostream{token}": { + "deleteapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description Stream cancelado com sucesso */ + /** @description Stream finalizado com sucesso */ 204: { headers: { [name: string]: unknown; @@ -2926,29 +4757,23 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_automatico{idPsp}tributosretroativostreamstart": { + "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostreamstart": { parameters: { query: { - /** @description Query parameter: fromNsu */ - fromNsu: number; - /** @description Query parameter: streamId */ + /** @description Número Sequencial Único da mensagem que se deseja iniciar a consulta retroativa de Super Inteligente. */ + nsuInicial: string; + /** @description Identificador do stream que se deseja consultar. */ streamId?: string; - /** @description Query parameter: toNsu */ - toNsu?: number; + /** @description Número Sequencial Único da mensagem que se deseja finalizar a consulta retroativa de Super Inteligente. */ + nsuFinal?: string; }; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; }; cookie?: never; }; @@ -2958,11 +4783,12 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/json": { - tributos: components["schemas"]["RetornoSuperInteligentePixAutomaticoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligentePixAutomaticoTransacao"][]; }; }; }; @@ -2973,23 +4799,17 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_automatico{idPsp}tributosretroativostream{token}": { + "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; @@ -3000,6 +4820,7 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -3009,34 +4830,29 @@ export interface operations { 204: components["responses"]["PPResponseNoContentRetroativoToken"]; 400: components["responses"]["PPResponseBadRequestConsultaStream"]; 403: components["responses"]["PPResponseForbidden"]; + 410: components["responses"]["PPResponseGoneRetroativoStream"]; 422: components["responses"]["PPResponseUnprocessableEntityConsultaStream"]; 500: components["responses"]["PPResponseError"]; }; }; - "deleteapiv1outpix_automatico{idPsp}tributosretroativostream{token}": { + "deleteapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description Stream cancelado com sucesso */ + /** @description Stream finalizado com sucesso */ 204: { headers: { [name: string]: unknown; @@ -3049,29 +4865,23 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_dinamico{idPsp}tributosretroativostreamstart": { + "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostreamstart": { parameters: { query: { - /** @description Query parameter: fromNsu */ - fromNsu: number; - /** @description Query parameter: streamId */ + /** @description Número Sequencial Único da mensagem que se deseja iniciar a consulta retroativa de Super Inteligente. */ + nsuInicial: string; + /** @description Identificador do stream que se deseja consultar. */ streamId?: string; - /** @description Query parameter: toNsu */ - toNsu?: number; + /** @description Número Sequencial Único da mensagem que se deseja finalizar a consulta retroativa de Super Inteligente. */ + nsuFinal?: string; }; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; }; cookie?: never; }; @@ -3081,11 +4891,12 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { "application/json": { - tributos: components["schemas"]["RetornoSuperInteligentePixDinamicoTransacao"][]; + transacoes: components["schemas"]["RetornoSuperInteligentePixDinamicoTransacao"][]; }; }; }; @@ -3096,23 +4907,17 @@ export interface operations { 500: components["responses"]["PPResponseError"]; }; }; - "getapiv1outpix_dinamico{idPsp}tributosretroativostream{token}": { + "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; @@ -3123,6 +4928,7 @@ export interface operations { 200: { headers: { proximoToken: components["headers"]["ProximoTokenHeader"]; + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; [name: string]: unknown; }; content: { @@ -3132,34 +4938,29 @@ export interface operations { 204: components["responses"]["PPResponseNoContentRetroativoToken"]; 400: components["responses"]["PPResponseBadRequestConsultaStream"]; 403: components["responses"]["PPResponseForbidden"]; + 410: components["responses"]["PPResponseGoneRetroativoStream"]; 422: components["responses"]["PPResponseUnprocessableEntityConsultaStream"]; 500: components["responses"]["PPResponseError"]; }; }; - "deleteapiv1outpix_dinamico{idPsp}tributosretroativostream{token}": { + "deleteapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostream{token}": { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idPsp */ - idPsp: string; - /** @description Path parameter: token */ + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + /** @description Token recebido na requisição anterior. */ token: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description Stream cancelado com sucesso */ + /** @description Stream finalizado com sucesso */ 204: { headers: { [name: string]: unknown; @@ -3176,14 +4977,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -3194,11 +4989,10 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkSegregacao"]; 201: components["responses"]["PPResponseCreatedSegregacao"]; 400: components["responses"]["PPResponseBadRequestSegregacao"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoIniciada"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3206,14 +5000,8 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path?: never; cookie?: never; @@ -3224,11 +5012,10 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkSegregacao"]; 201: components["responses"]["PPResponseCreatedSegregacao"]; 400: components["responses"]["PPResponseBadRequestSegregacao"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoFinalizacao"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3236,17 +5023,11 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idInfSegr */ + /** @description Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação. */ idInfSegr: string; }; cookie?: never; @@ -3257,11 +5038,11 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkLote"]; + 200: components["responses"]["PPResponseOkLoteAtualizado"]; 201: components["responses"]["PPResponseCreatedLote"]; 400: components["responses"]["PPResponseBadRequest"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoLote"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3269,17 +5050,11 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idInfSegr */ + /** @description Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação. */ idInfSegr: string; }; cookie?: never; @@ -3290,11 +5065,11 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkLote"]; + 200: components["responses"]["PPResponseOkLoteAtualizado"]; 201: components["responses"]["PPResponseCreatedLote"]; 400: components["responses"]["PPResponseBadRequest"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoLote"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3302,17 +5077,11 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idInfSegr */ + /** @description Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação. */ idInfSegr: string; }; cookie?: never; @@ -3323,11 +5092,11 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkLote"]; + 200: components["responses"]["PPResponseOkLoteAtualizado"]; 201: components["responses"]["PPResponseCreatedLote"]; 400: components["responses"]["PPResponseBadRequest"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoLote"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3335,17 +5104,11 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idInfSegr */ + /** @description Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação. */ idInfSegr: string; }; cookie?: never; @@ -3356,11 +5119,11 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkLote"]; + 200: components["responses"]["PPResponseOkLoteAtualizado"]; 201: components["responses"]["PPResponseCreatedLote"]; 400: components["responses"]["PPResponseBadRequest"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoLote"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3368,17 +5131,11 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idInfSegr */ + /** @description Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação. */ idInfSegr: string; }; cookie?: never; @@ -3389,11 +5146,11 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkLote"]; + 200: components["responses"]["PPResponseOkLoteAtualizado"]; 201: components["responses"]["PPResponseCreatedLote"]; 400: components["responses"]["PPResponseBadRequest"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoLote"]; 500: components["responses"]["PPResponseError"]; }; }; @@ -3401,17 +5158,11 @@ export interface operations { parameters: { query?: never; header: { - /** @description Header: messageId (Formato UUID v4) */ - messageId: components["parameters"]["MessageIdHeaderParam"]; - /** @description Header: correlationId */ - correlationId: components["parameters"]["CorrelationIdHeaderParam"]; - /** @description Header: tenantId */ - tenantId: components["parameters"]["TenantIdHeaderParam"]; - /** @description Header: timestamp */ - timestamp: components["parameters"]["TimestampHeaderParam"]; + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; }; path: { - /** @description Path parameter: idInfSegr */ + /** @description Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação. */ idInfSegr: string; }; cookie?: never; @@ -3422,11 +5173,92 @@ export interface operations { }; }; responses: { - 200: components["responses"]["PPResponseOkLote"]; + 200: components["responses"]["PPResponseOkLoteAtualizado"]; 201: components["responses"]["PPResponseCreatedLote"]; 400: components["responses"]["PPResponseBadRequest"]; 403: components["responses"]["PPResponseForbidden"]; - 422: components["responses"]["PPResponseUnprocessableEntity"]; + 422: components["responses"]["PPResponseUnprocessableEntitySegregacaoLote"]; + 500: components["responses"]["PPResponseError"]; + }; + }; + postapiv1mocsolicitacao: { + parameters: { + query?: never; + header: { + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; + }; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MecanismoDeOcorrenciasSolRequest"]; + }; + }; + responses: { + 201: components["responses"]["PPResponseOk"]; + 400: components["responses"]["PPResponseBadRequest"]; + 403: components["responses"]["PPResponseForbidden"]; + 500: components["responses"]["PPResponseError"]; + }; + }; + postapiv1mocnotificacao: { + parameters: { + query?: never; + header: { + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; + }; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MecanismoDeOcorrenciasNotRequest"]; + }; + }; + responses: { + 201: components["responses"]["PPResponseOk"]; + 400: components["responses"]["PPResponseBadRequest"]; + 403: components["responses"]["PPResponseForbidden"]; + 500: components["responses"]["PPResponseError"]; + }; + }; + "getapiv1moc{cnpjRaizPspRecDir}ocorrencias": { + parameters: { + query: { + /** @description NSU inicial utilizado para a paginação dos resultados de ocorrências do MOC. */ + nsuInicial: string; + /** @description Quantidade máxima de ocorrências retornadas por página. Padrão e máximo: 1.000. */ + limite?: number; + }; + header: { + /** @description Header: Assinatura JWS da requisição. */ + "X-JWS-Signature": components["parameters"]["XJwsSignatureHeaderParam"]; + }; + path: { + /** @description Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos. */ + cnpjRaizPspRecDir: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Consulta realizada com sucesso. Ocorrências disponíveis no momento da consulta. */ + 200: { + headers: { + "X-JWS-Signature": components["headers"]["XJwsSignatureResponseHeader"]; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MocOcorrenciasConsultaResponse"]; + }; + }; + 204: components["responses"]["PPResponseNoContentMocConsultaStart"]; + 400: components["responses"]["PPResponseBadRequestMocConsulta"]; + 403: components["responses"]["PPResponseForbidden"]; + 422: components["responses"]["PPResponseUnprocessableEntityMocConsulta"]; 500: components["responses"]["PPResponseError"]; }; }; diff --git a/packages/client/src/headers.ts b/packages/client/src/headers.ts index fced923..86f59d6 100644 --- a/packages/client/src/headers.ts +++ b/packages/client/src/headers.ts @@ -1,18 +1,14 @@ import type { Middleware } from "openapi-fetch"; - -export interface SplitHeadersOptions { - /** CNPJ (alfanumerico, 14 posicoes) do PSP; vira o header tenantId. */ - tenantId: string; - /** correlationId fixo (19 posicoes) a propagar; ausente = gerado por requisicao. */ - correlationId?: string; -} - -const TENANT_ID = /^[A-Za-z0-9]{14}$/; +import { assinarRequisicao, type OpcoesDeAssinatura } from "./assinatura.js"; /** - * Timestamp exigido pela plataforma: ISO 8601 em horario de Brasilia com - * offset literal -03:00, 25 posicoes, sem milissegundos (tabela de headers do - * Manual de Integracao; exemplo: 2025-12-22T14:30:45-03:00). + * Timestamp no formato que a plataforma usa: ISO 8601 em horário de Brasília + * com offset literal -03:00, 25 posições, sem milissegundos. + * + * No contrato v0.0.10 isto preenchia o header `timestamp`, que não existe mais. + * Continua exportado porque o formato segue valendo para `infRequisicao.dtHrMsg`, + * que é campo de corpo em toda requisição do v1.1.0 (exemplo do spec: + * `2026-03-22T12:00:00-03:00`). */ export function gerarTimestampSplit(date: Date = new Date()): string { const shifted = new Date(date.getTime() - 3 * 3_600_000); @@ -23,34 +19,46 @@ export function gerarTimestampSplit(date: Date = new Date()): string { ); } -/** String unica de 19 posicoes no espirito do exemplo do manual (txn-...). */ -export function gerarCorrelationId(): string { - const alnum = crypto.randomUUID().replaceAll("-", ""); - return `txn-${Date.now().toString(36)}${alnum}`.slice(0, 19); -} - /** - * Middleware openapi-fetch que injeta os 4 headers obrigatorios da plataforma: - * messageId (UUID v4, unico por requisicao), correlationId (19 posicoes, - * propagado verbatim quando fornecido), tenantId (CNPJ alfanumerico) e - * timestamp (-03:00). + * Middleware que assina cada requisição e injeta o `X-JWS-Signature`. + * + * Ele reescreve o corpo com os bytes canonicalizados, e isso é essencial, não + * um detalhe de implementação: a assinatura cobre o payload cru (`b64: false`), + * então enviar o objeto re-serializado pelo `fetch` produziria bytes diferentes + * dos assinados. Assinar e enviar precisam sair da mesma serialização. + * + * Requisição sem corpo (os GET de consulta e os DELETE de stream) assina o + * payload vazio: o header é `required` nas 43 operações do contrato, inclusive + * nessas. */ -export function splitHeadersMiddleware(opts: SplitHeadersOptions): Middleware { - if (!TENANT_ID.test(opts.tenantId)) { - throw new RangeError( - "tenantId deve ter exatamente 14 posicoes alfanumericas (CNPJ, incluindo o formato alfanumerico da IN RFB 2.229/2024)", - ); - } - if (opts.correlationId !== undefined && opts.correlationId.length !== 19) { - throw new RangeError("correlationId deve ter exatamente 19 posicoes"); - } +export function assinaturaMiddleware(opcoes: OpcoesDeAssinatura): Middleware { return { - onRequest({ request }) { - request.headers.set("messageId", crypto.randomUUID()); - request.headers.set("correlationId", opts.correlationId ?? gerarCorrelationId()); - request.headers.set("tenantId", opts.tenantId); - request.headers.set("timestamp", gerarTimestampSplit()); - return request; + async onRequest({ request }) { + const bruto = await request.clone().text(); + const temCorpo = bruto.length > 0; + + const { header, corpoCanonicoTexto } = await assinarRequisicao( + temCorpo ? (JSON.parse(bruto) as unknown) : "", + opcoes, + ); + + const headers = new Headers(request.headers); + headers.set("X-JWS-Signature", header); + if (temCorpo) headers.set("content-type", "application/json"); + + // `body` sai do objeto quando nao ha corpo: com exactOptionalPropertyTypes, + // passar `undefined` explicito nao e o mesmo que omitir a chave. + const init: RequestInit = { + method: request.method, + headers, + signal: request.signal, + credentials: request.credentials, + redirect: request.redirect, + referrer: request.referrer, + }; + if (temCorpo) init.body = corpoCanonicoTexto; + + return new Request(request.url, init); }, }; } diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index f3a972e..8fb398b 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -1,13 +1,23 @@ -export const VERSION = "0.1.0"; +export const VERSION = "0.2.0"; export { calcularSegregacao } from "./domain/segregacao.js"; export type { SegregacaoInput } from "./domain/segregacao.js"; export type { CategoriaValor, PapelPsp, Tributo } from "./domain/types.js"; +export { assinaturaMiddleware, gerarTimestampSplit } from "./headers.js"; export { - gerarCorrelationId, - gerarTimestampSplit, - splitHeadersMiddleware, -} from "./headers.js"; -export type { SplitHeadersOptions } from "./headers.js"; + ErroDeAssinatura, + assinarRequisicao, + base64url, + conferirFormaDoHeader, + montarEntradaDeAssinatura, + montarProtectedHeader, +} from "./assinatura.js"; +export type { + AssinadorRs256, + OpcoesDeAssinatura, + ProtectedHeader, + ResultadoDaAssinatura, +} from "./assinatura.js"; +export { ErroDeCanonicalizacao, canonicalizarJcs, canonicalizarJcsBytes } from "./jcs.js"; export { toProblem } from "./problem.js"; export type { ProblemDetail } from "./problem.js"; export { createSplitClient } from "./client.js"; diff --git a/packages/client/src/jcs.ts b/packages/client/src/jcs.ts new file mode 100644 index 0000000..7d7f812 --- /dev/null +++ b/packages/client/src/jcs.ts @@ -0,0 +1,104 @@ +/** + * JSON Canonicalization Scheme (JCS), RFC 8785. + * + * O contrato v1.1.0 exige que o corpo seja canonicalizado ANTES de assinar + * (Manual de Integração v1.1.0, capítulo 8). Sem isso, dois JSON com o mesmo + * conteúdo e ordem de chaves diferente produzem assinaturas diferentes, e a + * plataforma rejeita. + * + * A implementação é curta porque o JavaScript já faz a maior parte do trabalho + * certo, e vale registrar por quê, senão a próxima pessoa "melhora" isto: + * + * - **Ordenação**: a RFC manda ordenar os nomes de propriedade por unidades de + * código UTF-16, e é exatamente assim que o `<` de JavaScript compara + * strings. Então `Object.keys(x).sort()`, sem comparador, é a ordenação + * pedida. Passar um comparador com `localeCompare` quebraria: ele ordena por + * convenção de idioma, não por code unit. + * - **Números**: a RFC adota o algoritmo `Number::toString` do ECMAScript, que + * é o mesmo que `JSON.stringify` já usa. Daí `1e+30` sair como `1e+30`. + * - **Strings**: o escaping da RFC é o do JSON (RFC 8259), que + * `JSON.stringify` produz, inclusive `\uXXXX` para caracteres de controle. + * + * O que sobra para nós é ordenar as chaves e recusar o que a RFC não admite. + */ + +/** Erro de canonicalização: o valor não tem representação JCS. */ +export class ErroDeCanonicalizacao extends Error { + readonly caminho: string; + + constructor(mensagem: string, caminho: string) { + super(`${mensagem} (em ${caminho})`); + this.name = "ErroDeCanonicalizacao"; + this.caminho = caminho; + } +} + +function serializar(valor: unknown, caminho: string): string { + if (valor === null) return "null"; + + switch (typeof valor) { + case "boolean": + return valor ? "true" : "false"; + + case "number": { + if (!Number.isFinite(valor)) { + // NaN e Infinity não existem em JSON, e um assinante que os aceitasse + // produziria bytes que o outro lado não consegue reproduzir. + throw new ErroDeCanonicalizacao(`número não finito (${valor})`, caminho); + } + // -0 e 0 são o mesmo número em JSON; JSON.stringify(-0) daria "0", mas + // ser explícito deixa a intenção clara para quem lê. + return JSON.stringify(Object.is(valor, -0) ? 0 : valor); + } + + case "string": + return JSON.stringify(valor); + + case "object": { + if (Array.isArray(valor)) { + // Em array a ordem é conteúdo, não apresentação: preservada. E buraco + // de array vira null, como manda o JSON. + const itens = valor.map((item, i) => + item === undefined ? "null" : serializar(item, `${caminho}[${i}]`), + ); + return `[${itens.join(",")}]`; + } + + const registro = valor as Record; + // undefined some, igual ao JSON.stringify: é ausência de campo, não valor. + const chaves = Object.keys(registro) + .filter((k) => registro[k] !== undefined) + .sort(); + + const pares = chaves.map( + (k) => `${JSON.stringify(k)}:${serializar(registro[k], `${caminho}.${k}`)}`, + ); + return `{${pares.join(",")}}`; + } + + default: + // undefined, function, symbol, bigint: nenhum tem forma JSON. + throw new ErroDeCanonicalizacao(`tipo ${typeof valor} não é serializável em JSON`, caminho); + } +} + +/** + * Canonicaliza um valor conforme a RFC 8785 e devolve a string resultante. + * + * Lança `ErroDeCanonicalizacao` para valores sem forma JSON (NaN, Infinity, + * function, symbol, bigint), sempre nomeando o caminho do campo culpado. + */ +export function canonicalizarJcs(valor: unknown): string { + return serializar(valor, "$"); +} + +/** + * O mesmo que `canonicalizarJcs`, em bytes UTF-8. + * + * É esta forma que entra na assinatura: o `b64: false` do contrato significa + * que o payload é assinado cru, não em Base64URL, então quem assina precisa + * exatamente destes bytes. + */ +export function canonicalizarJcsBytes(valor: unknown): Uint8Array { + return new TextEncoder().encode(canonicalizarJcs(valor)); +} diff --git a/packages/client/test/assinatura.test.ts b/packages/client/test/assinatura.test.ts new file mode 100644 index 0000000..f4ea263 --- /dev/null +++ b/packages/client/test/assinatura.test.ts @@ -0,0 +1,252 @@ +// A assinatura é o ponto do contrato v1.1.0 com mais chance de sair quase +// certa: o b64=false da RFC 7797 muda o que entra no cálculo, e uma +// implementação que codifique o payload por hábito produz um header bem +// formado que nunca valida. Estes testes fixam os bytes exatos. +import { describe, expect, it } from "vitest"; +import { createSign, generateKeyPairSync } from "node:crypto"; +import { + ErroDeAssinatura, + assinarRequisicao, + base64url, + conferirFormaDoHeader, + montarEntradaDeAssinatura, + montarProtectedHeader, +} from "../src/assinatura.js"; +import { canonicalizarJcsBytes } from "../src/jcs.js"; + +const JTI = "9f1f4b7e-6a2c-4d3e-8b5a-1c2d3e4f5a6b"; +const IAT = 1_774_000_000; +const fixo = { kid: "chave-01", agora: () => IAT, gerarJti: () => JTI }; + +// Um assinante determinístico: devolve os próprios bytes de entrada como se +// fossem a assinatura. Não é RS256, mas deixa inspecionar exatamente o que foi +// passado para assinar, que é o que estes testes precisam verificar. +const assinanteEspelho = (bytes: Uint8Array) => bytes; + +describe("protected header (manual v1.1.0, capítulo 8)", () => { + it("traz os sete atributos obrigatórios com os valores fixos", () => { + const h = montarProtectedHeader({ ...fixo, assinar: assinanteEspelho }); + expect(h).toEqual({ + alg: "RS256", + typ: "JWS", + kid: "chave-01", + jti: JTI, + iat: IAT, + b64: false, + crit: ["b64"], + }); + }); + + it("exige kid, porque sem ele o receptor não sabe qual chave usar", () => { + expect(() => montarProtectedHeader({ kid: "", assinar: assinanteEspelho })).toThrow( + ErroDeAssinatura, + ); + }); + + it("gera um jti novo por requisição, senão o anti-replay não serve de nada", () => { + const a = montarProtectedHeader({ kid: "k", assinar: assinanteEspelho }); + const b = montarProtectedHeader({ kid: "k", assinar: assinanteEspelho }); + expect(a.jti).not.toBe(b.jti); + expect(a.jti).toMatch( + /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i, + ); + }); +}); + +describe("entrada de assinatura (RFC 7797, b64=false)", () => { + it("o payload entra CRU, não em Base64URL", () => { + const payload = canonicalizarJcsBytes({ a: 1 }); + const entrada = montarEntradaDeAssinatura("UExBQ0VIT0xERVI", payload); + const texto = new TextDecoder().decode(entrada); + + expect(texto).toBe('UExBQ0VIT0xERVI.{"a":1}'); + // O erro clássico seria terminar com o payload em Base64URL: + expect(texto).not.toContain(base64url(payload)); + }); + + it("preserva bytes multibyte sem reencode", () => { + const payload = canonicalizarJcsBytes({ "€": 1 }); + const entrada = montarEntradaDeAssinatura("AA", payload); + expect(entrada.length).toBe(3 + payload.length); + expect(new TextDecoder().decode(entrada)).toBe('AA.{"€":1}'); + }); +}); + +describe("assinarRequisicao", () => { + it("produz o formato detached: protected..signature, com o meio vazio", async () => { + const r = await assinarRequisicao({ b: 2, a: 1 }, { ...fixo, assinar: assinanteEspelho }); + const partes = r.header.split("."); + expect(partes).toHaveLength(3); + expect(partes[1]).toBe(""); + expect(partes[0]).not.toBe(""); + expect(partes[2]).not.toBe(""); + }); + + it("assina exatamente os bytes canonicalizados que devolve como corpo", async () => { + let vistos: Uint8Array | undefined; + const r = await assinarRequisicao( + { b: 2, a: 1 }, + { + ...fixo, + assinar: (bytes) => { + vistos = bytes; + return bytes; + }, + }, + ); + + const [protectedB64 = ""] = r.header.split("."); + const esperado = montarEntradaDeAssinatura(protectedB64, r.corpoCanonico); + expect(vistos).toEqual(esperado); + // E o corpo devolvido é o canônico, com as chaves ordenadas: + expect(new TextDecoder().decode(r.corpoCanonico)).toBe('{"a":1,"b":2}'); + }); + + it("o corpo canônico é o que deve ser enviado, não o objeto original", async () => { + const original = { vlPago: 10.02, arrj: "BOL" }; + const r = await assinarRequisicao(original, { ...fixo, assinar: assinanteEspelho }); + + // JSON.stringify do original preserva a ordem de inserção e divergiria: + expect(JSON.stringify(original)).not.toBe(new TextDecoder().decode(r.corpoCanonico)); + expect(new TextDecoder().decode(r.corpoCanonico)).toBe('{"arrj":"BOL","vlPago":10.02}'); + }); + + it("aceita assinante assíncrono, que é o caso de HSM e KMS", async () => { + const r = await assinarRequisicao( + { a: 1 }, + { ...fixo, assinar: async (b) => Promise.resolve(b) }, + ); + expect(r.header).toContain(".."); + }); + + it("recusa um assinante que devolve lixo, em vez de mandar header inválido", async () => { + await expect( + assinarRequisicao({ a: 1 }, { ...fixo, assinar: () => new Uint8Array(0) }), + ).rejects.toThrow(ErroDeAssinatura); + await expect( + // @ts-expect-error validação de runtime para quem chama de JavaScript + assinarRequisicao({ a: 1 }, { ...fixo, assinar: () => "nao sou bytes" }), + ).rejects.toThrow(ErroDeAssinatura); + }); +}); + +describe("assinatura RS256 de verdade", () => { + it("um verificador independente valida o que produzimos", async () => { + const { privateKey, publicKey } = generateKeyPairSync("rsa", { modulusLength: 2048 }); + + const r = await assinarRequisicao( + { infRequisicao: { dtHrMsg: "2026-03-22T12:00:00-03:00" }, valor: 10.02 }, + { + ...fixo, + assinar: (bytes) => { + const s = createSign("RSA-SHA256"); + s.update(bytes); + s.end(); + return new Uint8Array(s.sign(privateKey)); + }, + }, + ); + + // Reconstrói a entrada do zero, como faria a plataforma ao receber o + // header e o corpo, e verifica com a chave pública. + const [protectedB64 = "", vazio, assinaturaB64 = ""] = r.header.split("."); + expect(vazio).toBe(""); + + const entrada = montarEntradaDeAssinatura(protectedB64, r.corpoCanonico); + const assinatura = Buffer.from( + assinaturaB64.replaceAll("-", "+").replaceAll("_", "/"), + "base64", + ); + + const { createVerify } = await import("node:crypto"); + const v = createVerify("RSA-SHA256"); + v.update(entrada); + v.end(); + expect(v.verify(publicKey, assinatura)).toBe(true); + }); + + it("mexer um byte do corpo invalida a assinatura", async () => { + const { privateKey, publicKey } = generateKeyPairSync("rsa", { modulusLength: 2048 }); + const r = await assinarRequisicao( + { valor: 10.02 }, + { + ...fixo, + assinar: (bytes) => { + const s = createSign("RSA-SHA256"); + s.update(bytes); + s.end(); + return new Uint8Array(s.sign(privateKey)); + }, + }, + ); + + const [protectedB64 = "", , assinaturaB64 = ""] = r.header.split("."); + const adulterado = canonicalizarJcsBytes({ valor: 10.03 }); + const entrada = montarEntradaDeAssinatura(protectedB64, adulterado); + + const { createVerify } = await import("node:crypto"); + const v = createVerify("RSA-SHA256"); + v.update(entrada); + v.end(); + expect( + v.verify(publicKey, Buffer.from(assinaturaB64.replaceAll("-", "+").replaceAll("_", "/"), "base64")), + ).toBe(false); + }); +}); + +describe("conferirFormaDoHeader", () => { + it("aprova um header que nós mesmos produzimos", async () => { + const r = await assinarRequisicao({ a: 1 }, { ...fixo, assinar: assinanteEspelho }); + const { problemas, protegido } = conferirFormaDoHeader(r.header); + expect(problemas).toEqual([]); + expect(protegido?.kid).toBe("chave-01"); + }); + + it("reprova alg errado, que é a tentação de quem usa uma lib genérica", () => { + const cabecalho = base64url( + new TextEncoder().encode( + JSON.stringify({ alg: "HS256", typ: "JWS", kid: "k", jti: JTI, iat: IAT, b64: false, crit: ["b64"] }), + ), + ); + const { problemas } = conferirFormaDoHeader(`${cabecalho}..AAAA`); + expect(problemas).toContain("alg deve ser RS256, veio HS256"); + }); + + it("reprova b64 ausente ou true, que muda o que foi assinado", () => { + const cabecalho = base64url( + new TextEncoder().encode( + JSON.stringify({ alg: "RS256", typ: "JWS", kid: "k", jti: JTI, iat: IAT, b64: true, crit: ["b64"] }), + ), + ); + expect(conferirFormaDoHeader(`${cabecalho}..AAAA`).problemas).toContain( + "b64 deve ser false, veio true", + ); + }); + + it("reprova jti que não é UUID v4", () => { + const cabecalho = base64url( + new TextEncoder().encode( + JSON.stringify({ alg: "RS256", typ: "JWS", kid: "k", jti: "123", iat: IAT, b64: false, crit: ["b64"] }), + ), + ); + expect(conferirFormaDoHeader(`${cabecalho}..AAAA`).problemas).toContain("jti deve ser UUID v4"); + }); + + it("reprova payload presente: detached quer dizer ausente", () => { + const cabecalho = base64url( + new TextEncoder().encode( + JSON.stringify({ alg: "RS256", typ: "JWS", kid: "k", jti: JTI, iat: IAT, b64: false, crit: ["b64"] }), + ), + ); + expect(conferirFormaDoHeader(`${cabecalho}.eyJhIjoxfQ.AAAA`).problemas).toContain( + "o payload deveria estar ausente (formato detached), mas veio preenchido", + ); + }); + + it("reprova o que nem parece um JWS", () => { + expect(conferirFormaDoHeader("qualquer-coisa").problemas[0]).toMatch(/3 partes/); + expect(conferirFormaDoHeader("!!..AAAA").problemas).toContain( + "protected header não é Base64URL de um JSON válido", + ); + }); +}); diff --git a/packages/client/test/headers.test.ts b/packages/client/test/headers.test.ts index fb400de..69a2781 100644 --- a/packages/client/test/headers.test.ts +++ b/packages/client/test/headers.test.ts @@ -1,76 +1,100 @@ +// O contrato v1.1.0 apagou os quatro headers do v0.0.10 (messageId, +// correlationId, tenantId, timestamp) e pôs no lugar um só, o +// X-JWS-Signature, obrigatório nas 43 operações. Este arquivo testava a +// injeção dos quatro; agora testa a assinatura. +// +// O ponto mais delicado do middleware é a reescrita do corpo. A assinatura +// cobre o payload cru (b64=false), então o corpo que vai na rede tem que ser +// byte a byte o mesmo que foi assinado. Deixar o `fetch` re-serializar o objeto +// original produziria uma assinatura válida sobre bytes que ninguém enviou. import { describe, expect, it } from "vitest"; -import { - gerarCorrelationId, - gerarTimestampSplit, - splitHeadersMiddleware, -} from "../src/headers.js"; +import { assinaturaMiddleware, gerarTimestampSplit } from "../src/headers.js"; +import { conferirFormaDoHeader, montarEntradaDeAssinatura } from "../src/assinatura.js"; -// Oraculo: manual vendorado (tabela de headers): messageId UUID v4 (36), -// correlationId 19/19, tenantId alfanumerico 14/14, timestamp 25/25 no formato -// 2025-12-22T14:30:45-03:00. - -const UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/; const TIMESTAMP_SPLIT = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}-03:00$/; +const assinanteEspelho = (bytes: Uint8Array) => bytes; -async function runMiddleware(mw: ReturnType) { - const request = new Request("https://example.invalid/api/v1/boleto", { method: "POST" }); - const result = await mw.onRequest?.({ request, schemaPath: "/api/v1/boleto" } as never); - return (result instanceof Request ? result : request).headers; +async function rodar(corpo?: unknown, metodo = "POST") { + const mw = assinaturaMiddleware({ kid: "chave-01", assinar: assinanteEspelho }); + const init: RequestInit = { method: metodo }; + if (corpo !== undefined) { + init.body = JSON.stringify(corpo); + init.headers = { "content-type": "application/json" }; + } + const request = new Request("https://example.invalid/api/v1/boleto", init); + const saida = await mw.onRequest?.({ request, schemaPath: "/api/v1/boleto" } as never); + return saida instanceof Request ? saida : request; } -describe("splitHeadersMiddleware (C7: messageId)", () => { - it("gera UUID v4 unico por requisicao", async () => { - const mw = splitHeadersMiddleware({ tenantId: "12345678000199" }); - const h1 = await runMiddleware(mw); - const h2 = await runMiddleware(mw); - expect(h1.get("messageId")).toMatch(UUID_V4); - expect(h2.get("messageId")).toMatch(UUID_V4); - expect(h1.get("messageId")).not.toBe(h2.get("messageId")); +describe("assinaturaMiddleware", () => { + it("injeta X-JWS-Signature em formato válido", async () => { + const req = await rodar({ a: 1 }); + const header = req.headers.get("X-JWS-Signature"); + expect(header).toBeTruthy(); + expect(conferirFormaDoHeader(header as string).problemas).toEqual([]); }); -}); -describe("splitHeadersMiddleware (C8: correlationId)", () => { - it("propaga verbatim quando fornecido (19 posicoes)", async () => { - const fixo = "txn-20251222-abc123"; - expect(fixo).toHaveLength(19); - const mw = splitHeadersMiddleware({ tenantId: "12345678000199", correlationId: fixo }); - expect((await runMiddleware(mw)).get("correlationId")).toBe(fixo); + it("reescreve o corpo com os bytes canonicalizados", async () => { + // Entra com as chaves fora de ordem; tem que sair ordenado. + const req = await rodar({ vlPago: 10.02, arrj: "BOL" }); + expect(await req.text()).toBe('{"arrj":"BOL","vlPago":10.02}'); }); - it("gera 19 posicoes quando ausente", async () => { - const mw = splitHeadersMiddleware({ tenantId: "12345678000199" }); - expect((await runMiddleware(mw)).get("correlationId")).toHaveLength(19); + + it("o corpo enviado é exatamente o que foi assinado", async () => { + let assinado: Uint8Array | undefined; + const mw = assinaturaMiddleware({ + kid: "chave-01", + assinar: (bytes) => { + assinado = bytes; + return bytes; + }, + }); + const request = new Request("https://example.invalid/api/v1/boleto", { + method: "POST", + body: JSON.stringify({ b: 2, a: 1 }), + headers: { "content-type": "application/json" }, + }); + const saida = (await mw.onRequest?.({ request, schemaPath: "/x" } as never)) as Request; + + const enviado = new TextEncoder().encode(await saida.text()); + const [protectedB64 = ""] = (saida.headers.get("X-JWS-Signature") as string).split("."); + expect(assinado).toEqual(montarEntradaDeAssinatura(protectedB64, enviado)); }); - it("gerarCorrelationId() sempre tem 19 posicoes", () => { - for (let i = 0; i < 50; i++) expect(gerarCorrelationId()).toHaveLength(19); + + it("assina também requisição sem corpo, porque o header é obrigatório nelas", async () => { + const req = await rodar(undefined, "GET"); + const header = req.headers.get("X-JWS-Signature"); + expect(conferirFormaDoHeader(header as string).problemas).toEqual([]); + expect(await req.text()).toBe(""); }); - it("rejeita correlationId fornecido com tamanho errado", () => { - expect(() => - splitHeadersMiddleware({ tenantId: "12345678000199", correlationId: "curto" }), - ).toThrow(/19/); + + it("cada requisição ganha jti próprio", async () => { + const a = await rodar({ a: 1 }); + const b = await rodar({ a: 1 }); + expect(a.headers.get("X-JWS-Signature")).not.toBe(b.headers.get("X-JWS-Signature")); }); -}); -describe("splitHeadersMiddleware (C9: timestamp)", () => { - it("formato ISO 8601 com offset -03:00, 25 posicoes, sem milissegundos", async () => { - const mw = splitHeadersMiddleware({ tenantId: "12345678000199" }); - const ts = (await runMiddleware(mw)).get("timestamp")!; - expect(ts).toMatch(TIMESTAMP_SPLIT); - expect(ts).toHaveLength(25); + it("não injeta nenhum dos quatro headers do contrato antigo", async () => { + const req = await rodar({ a: 1 }); + for (const extinto of ["messageId", "correlationId", "tenantId", "timestamp"]) { + expect(req.headers.get(extinto)).toBeNull(); + } }); - it("gerarTimestampSplit converte o instante para o relogio de Brasilia", () => { - // 2025-12-22T17:30:45Z == 14:30:45 em -03:00 (exemplo do manual) - expect(gerarTimestampSplit(new Date("2025-12-22T17:30:45Z"))).toBe("2025-12-22T14:30:45-03:00"); + + it("preserva método e URL", async () => { + const req = await rodar({ a: 1 }); + expect(req.method).toBe("POST"); + expect(req.url).toBe("https://example.invalid/api/v1/boleto"); }); }); -describe("splitHeadersMiddleware (C10: tenantId)", () => { - it("passa o CNPJ adiante, tolerando CNPJ alfanumerico", async () => { - const alfanum = "AB345678000199"; // IN RFB 2.229/2024 - const mw = splitHeadersMiddleware({ tenantId: alfanum }); - expect((await runMiddleware(mw)).get("tenantId")).toBe(alfanum); - }); - it("rejeita tenantId fora de 14 posicoes alfanumericas", () => { - expect(() => splitHeadersMiddleware({ tenantId: "123" })).toThrow(/14/); - expect(() => splitHeadersMiddleware({ tenantId: "12345678-00019" })).toThrow(/alfanum/i); +describe("gerarTimestampSplit", () => { + // Sobrevive ao v1.1.0 por outro motivo: deixou de ser header e continua + // sendo o formato de infRequisicao.dtHrMsg, campo de corpo obrigatório. + it("formato ISO 8601 com offset -03:00, 25 posições, sem milissegundos", () => { + const t = gerarTimestampSplit(new Date("2026-03-22T15:00:00Z")); + expect(t).toMatch(TIMESTAMP_SPLIT); + expect(t).toHaveLength(25); + expect(t).toBe("2026-03-22T12:00:00-03:00"); }); }); diff --git a/packages/client/test/jcs.test.ts b/packages/client/test/jcs.test.ts new file mode 100644 index 0000000..fc9f393 Binary files /dev/null and b/packages/client/test/jcs.test.ts differ diff --git a/packages/client/test/moc-tipos.test.ts b/packages/client/test/moc-tipos.test.ts new file mode 100644 index 0000000..29a9a95 --- /dev/null +++ b/packages/client/test/moc-tipos.test.ts @@ -0,0 +1,72 @@ +// Prova de tipo do Mecanismo de Ocorrencias. +// +// Os schemas MocOcorrenciaSol e MocOcorrenciaNot usam `allOf: [$ref, {required, +// not}]`, forma que o openapi-typescript 7.13.0 traduz errado: o discriminador +// vira o literal com o NOME do schema e o `not` vira Record, que +// zera o resto. O codegen reescreve os dois tipos por isso. +// +// Estes testes existem para a reescrita nao poder quebrar em silencio. Sem +// eles, um tipo inconstruivel passa despercebido: nenhum outro codigo do +// pacote toca o MOC, entao `tsc` sai 0 e a suite fica verde com as duas rotas +// POST inutilizaveis. O corpo abaixo e o exemplo `boleto-sol` do proprio spec. +import { describe, expect, it } from "vitest"; +import type { components } from "../src/generated/platform.js"; + +type Sol = components["schemas"]["MocOcorrenciaSol"]; +type Not = components["schemas"]["MocOcorrenciaNot"]; + +describe("tipos do MOC sobrevivem ao codegen", () => { + it("uma solicitacao de estorno de boleto e construivel", () => { + const solicitacao: Sol = { + index: 1, + idOcor: "SOL12345678BOL202606230000001", + arrj: "BOL", + vlPago: 10.02, + vlCbsSegr: 5.01, + vlIbsSegr: 5.01, + dtHrPgto: "2026-03-22T11:30:00-03:00", + dtHrLiq: "2026-03-22T11:31:00-03:00", + cnpjCpfPagEfet: "11444777000142", + cnpjRaizPspPag: "12345678", + cnpjRaizPspRecDir: "87654321", + cnpjRec: "11444777000142", + cnpjCpfDest: "11444777000142", + idDda: "123A512312312312FAS1", + codMotOcor: "02", + vlCbsEst: 5.01, + vlIbsEst: 5.01, + descOcor: "Solicitação de estorno para boleto", + cnpjPagOrig: "11444777000142", + }; + + // O discriminador tem que ser o valor do arranjo, nao o nome do schema. + expect(solicitacao.arrj).toBe("BOL"); + expect(solicitacao.vlCbsEst).toBe(5.01); + }); + + it("uma notificacao de boleto e construivel sem os campos de estorno", () => { + const notificacao: Not = { + index: 1, + idOcor: "NOT12345678BOL202606230000001", + arrj: "BOL", + vlPago: 10.02, + vlCbsSegr: 5.01, + vlIbsSegr: 5.01, + dtHrPgto: "2026-03-22T11:30:00-03:00", + dtHrLiq: "2026-03-22T11:31:00-03:00", + cnpjRaizPspPag: "12345678", + cnpjRaizPspRecDir: "87654321", + cnpjRec: "11444777000142", + cnpjCpfDest: "11444777000142", + idDda: "123A512312312312FAS1", + cnpjPagOrig: "11444777000142", + }; + + expect(notificacao.arrj).toBe("BOL"); + }); + + it("o discriminador aceita os seis arranjos, nao o nome do schema", () => { + const arranjos: Array = ["BOL", "PXE", "PXD", "PXA", "TED", "TEF"]; + expect(arranjos).toHaveLength(6); + }); +}); diff --git a/packages/client/test/smoke.test.ts b/packages/client/test/smoke.test.ts index bf68b0a..f2112c1 100644 --- a/packages/client/test/smoke.test.ts +++ b/packages/client/test/smoke.test.ts @@ -3,6 +3,6 @@ import { VERSION } from "../src/index.js"; describe("scaffold smoke", () => { it("exports the package version", () => { - expect(VERSION).toBe("0.1.0"); + expect(VERSION).toBe("0.2.0"); }); }); diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json index 7680f99..8089056 100644 --- a/packages/client/tsconfig.json +++ b/packages/client/tsconfig.json @@ -1,4 +1,12 @@ { "extends": "../../tsconfig.base.json", - "include": ["src", "test"] + "include": [ + "src", + "test" + ], + "compilerOptions": { + "types": [ + "node" + ] + } } diff --git a/packages/mock/CHANGELOG.md b/packages/mock/CHANGELOG.md index 64acc61..8cb6fbe 100644 --- a/packages/mock/CHANGELOG.md +++ b/packages/mock/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.2.0 (2026-09-04) + +**Quebra compatibilidade.** Serve o contrato oficial **OpenAPI v1.1.0**, publicado pelo CGIBS em 24/08/2026. Veja o [guia de migração](https://mozurok.github.io/splitbr/migracao). + +- Spec embarcado e trava de hash agora são do v1.1.0: 35 rotas. +- **Mecanismo de Ocorrências (3.9)**: três rotas novas (`POST /api/v1/moc/solicitacao`, `POST /api/v1/moc/notificacao`, `GET /api/v1/moc/{cnpjRaizPspRecDir}/ocorrencias`), com resposta simulada determinística da RFB/CGIBS, para o ciclo fechar sem a plataforma real. +- **Assinatura `X-JWS-Signature`**: o mock confere a forma do protected header quando ele vem, e não exige que venha, para `npx splitbr-mock` seguir utilizável sem par de chaves. `buildServer({ exigirAssinatura: true })` liga o comportamento fiel ao contrato. +- **Os quatro headers antigos deixaram de ser exigidos.** Continuam aceitos, e o `correlationId` continua ecoado na resposta. +- As 12 rotas de stream mudaram de caminho: `{idPsp}/tributos` virou `{cnpjRaizPspRecDir}/transacoes`. A chave do corpo de resposta acompanhou (`tributos` para `transacoes`), e a consulta retroativa troca `fromNsu`/`toNsu` por `nsuInicial`/`nsuFinal`. +- `dtHrDisp` passa a ser emitido no Retorno Super Inteligente; `nsuId` sai como string. +- Matrizes M/O/N-E atualizadas para os campos renomeados. O MOC não ganhou matriz de propósito: o próprio spec já codifica a regra por arranjo com `oneOf`, `required` e `additionalProperties: false`, e duplicar isso criaria duas fontes da verdade. + ## 0.1.1 (2026-09-04) Release de vigilância: nenhuma mudança de comportamento, de rotas ou de dados. O que muda é o que o pacote diz sobre si. diff --git a/packages/mock/README.md b/packages/mock/README.md index 8079b8c..7cd1db1 100644 --- a/packages/mock/README.md +++ b/packages/mock/README.md @@ -4,11 +4,11 @@ Mock local da **Plataforma Pública do Split Payment** (IBS/CBS, LC 214/2025) para qualquer dev entender e testar o comportamento da plataforma. Você não precisa ser um PSP homologado (banco ou instituição de pagamento autorizada) para usar isto: o mock roda local, sem licença nenhuma. -A plataforma real é restrita a PSPs homologados. Este mock reproduz o contrato oficial na sua máquina: os sete fluxos documentados, os quatro headers obrigatórios, a taxonomia de erros RFC 7807, a segregação em 3 passos e o streaming do Super Inteligente, mais um motor de caos e cenários que a plataforma real nunca vai te dar em homologação. +A plataforma real é restrita a PSPs homologados. Este mock reproduz o contrato oficial na sua máquina: os sete fluxos documentados, o Mecanismo de Ocorrências, a assinatura `X-JWS-Signature`, a taxonomia de erros RFC 7807, a segregação em 3 passos e o streaming do Super Inteligente, mais um motor de caos e cenários que a plataforma real nunca vai te dar em homologação. -> **Aviso**: projeto independente e não oficial. Não é afiliado à RFB, ao Comitê Gestor do IBS, ao Serpro ou à Núclea. A fonte da verdade é o contrato oficial (OAS v0.0.10), embarcado com hash pinado. Quando o contrato mudar, o mock recusa subir com uma cópia adulterada. +> **Aviso**: projeto independente e não oficial. Não é afiliado à RFB, ao Comitê Gestor do IBS, ao Serpro ou à Núclea. A fonte da verdade é o contrato oficial (OAS v1.1.0), embarcado com hash pinado. Quando o contrato mudar, o mock recusa subir com uma cópia adulterada. -> ⚠️ **O contrato oficial está na v1.1.0; este mock ainda reproduz a v0.0.10.** Em 24/08/2026 o CGIBS publicou o OpenAPI v1.1.0 da Plataforma e moveu a v0.0.10 para "versões anteriores": 12 rotas de stream renomeadas (`{idPsp}/tributos` virou `{cnpjRaizPspRecDir}/transacoes`), 3 rotas novas do Mecanismo de Ocorrências, `X-JWS-Signature` obrigatório em todas as operações e o Pix Automático retirado do Informe de Transação Atualizada. O que o mock simula continua fiel à v0.0.10, e serve para aprender o mecanismo; para integrar a plataforma real, leia a [v1.1.0](https://www.cgibs.gov.br/split-payment). A migração é um major bump e está em aberto. +> **Migrando da 0.1.x?** Esta versão serve o contrato oficial **v1.1.0**. As rotas de stream mudaram de caminho, os quatro headers antigos deixaram de ser exigidos e entrou o Mecanismo de Ocorrências. O [guia de migração](https://mozurok.github.io/splitbr/migracao) tem o passo a passo. ## Instalação e uso @@ -42,7 +42,9 @@ const { data } = await client.POST("/api/v1/boleto", { // data.resourceId, data.numValidos, data.numErros ``` -Os quatro headers obrigatórios (messageId, correlationId, tenantId, timestamp) são injetados pelo client e validados pelo mock exatamente como na tabela do Manual de Integração. +A assinatura `X-JWS-Signature` é injetada pelo client e conferida pelo mock. Por padrão ele **valida a forma sem exigir a presença**: se o header vier, cobra os sete atributos do protected header com os valores fixos do capítulo 8; se não vier, deixa passar, para o `npx splitbr-mock` funcionar sem par de chaves. Para o comportamento fiel ao contrato, suba com `buildServer({ exigirAssinatura: true })`. + +Os quatro headers do contrato anterior (messageId, correlationId, tenantId, timestamp) não existem mais no v1.1.0. O mock continua aceitando e ecoando o `correlationId` na resposta, por utilidade de depuração, mas nenhum deles é obrigatório. ## O que o mock cobre @@ -79,7 +81,7 @@ Cenários de divergência: `cbs-correcao`, `ibs-correcao`, `cbs-em-aberto`, `ibs ## Limitações conhecidas -- A semântica por dígito dos códigos RSUP (1 = CBS correção, 2 = IBS correção, 3 = CBS em aberto, 4 = IBS em aberto) é interpretação deste mock; o spec v0.0.10 publica só o enum. Será ajustada quando o Manual de Operações detalhar código a código. +- A semântica por dígito dos códigos RSUP (1 = CBS correção, 2 = IBS correção, 3 = CBS em aberto, 4 = IBS em aberto) é interpretação deste mock; o spec v1.1.0 publica só o enum. Será ajustada quando o Manual de Operações detalhar código a código. - Limites de rate (429) e a janela do long polling não são fixados pelas fontes oficiais; aqui são configuráveis. - Os percentuais do Split Payment Simplificado não têm valores oficiais publicados (jul/2026); o default é placeholder rotulado, não uma tabela real. - Autenticação é simulada (token fake + variantes de erro por flag). Não há mTLS real. diff --git a/packages/mock/data/matrices/segregacao-finalizacao.json b/packages/mock/data/matrices/segregacao-finalizacao.json index ceacb97..ac3162c 100644 --- a/packages/mock/data/matrices/segregacao-finalizacao.json +++ b/packages/mock/data/matrices/segregacao-finalizacao.json @@ -7,8 +7,8 @@ "dtHrMsg": ["M", "M", "M", "M", "M", "M"], "idInfSegr": ["M", "M", "M", "M", "M", "M"], "totalTrans": ["M", "M", "M", "M", "M", "M"], - "valorTotalCbs": ["M", "M", "M", "M", "M", "M"], - "valorTotalIbs": ["M", "M", "M", "M", "M", "M"] + "vlTotalCbs": ["M", "M", "M", "M", "M", "M"], + "vlTotalIbs": ["M", "M", "M", "M", "M", "M"] }, "transacoes": {} } diff --git a/packages/mock/data/matrices/transacao-atualizada.json b/packages/mock/data/matrices/transacao-atualizada.json index 8222df4..f6f1928 100644 --- a/packages/mock/data/matrices/transacao-atualizada.json +++ b/packages/mock/data/matrices/transacao-atualizada.json @@ -18,7 +18,7 @@ "cnpjRaizPspRecInd": ["O", "O", "O"], "cnpjRaizPspRecDir": ["M", "M", "M"], "cnpjRec": ["NE", "M", "M"], - "cnpjCpfPagOrig": ["NE", "O", "O"], + "cnpjPagOrig": ["NE", "O", "O"], "dtHrAtu": ["M", "M", "M"], "dtVenc": ["M", "O", "O"], "dtHrLimPgto": ["M", "M", "M"] diff --git a/packages/mock/data/matrices/transacao-iniciada.json b/packages/mock/data/matrices/transacao-iniciada.json index 36052a9..3bab771 100644 --- a/packages/mock/data/matrices/transacao-iniciada.json +++ b/packages/mock/data/matrices/transacao-iniciada.json @@ -18,7 +18,7 @@ "cnpjRaizPspRecInd": ["O", "O", "O"], "cnpjRaizPspRecDir": ["M", "M", "M"], "cnpjRec": ["M", "M", "M"], - "cnpjCpfPagOrig": ["M", "O", "O"], + "cnpjPagOrig": ["M", "O", "O"], "dtHrIni": ["M", "M", "M"], "dtVenc": ["M", "O", "O"], "dtHrLimPgto": ["M", "M", "M"] diff --git a/packages/mock/data/spec/openapi-v0_0_10.json b/packages/mock/data/spec/openapi-v0_0_10.json deleted file mode 100644 index 7ddfdfc..0000000 --- a/packages/mock/data/spec/openapi-v0_0_10.json +++ /dev/null @@ -1,7102 +0,0 @@ -{ - "openapi": "3.1.0", - "info": { - "title": "Plataforma Pública de Split Payment API", - "description": "API REST para a Plataforma Pública de Split Payment - RTC\n\n## Documentação de Objetos e Preenchimento\n\n> ⚠️ **Observação importante:** documentação em construção.\n\n### Estrutura base das requisições\n- `InfoRequest`: objeto base para requests com `infRequisicao` e `transacoes`.\n- `InfoRequestSemCnpj`: objeto base para requests com `infRequisicao` (sem cnpjRaizPspRecDir) e `transacoes`.\n- `InfoSegRequest`: objeto base para operações de segregação sem lista de transações.\n- `InfoSegFinalRequest`: objeto de finalização com `infRequisicao` e `dadosFinalSeg`.\n\n### Objeto `infRequisicao`\n- `cnpjRaizPspRecDir`: raiz CNPJ do PSP direto (8 dígitos).\n- `dtHrMsg`: data/hora da mensagem no formato ISO 8601 com fuso `-03:00`.\n\n### Regras de preenchimento\n- Campos marcados como obrigatórios no schema devem ser sempre enviados.\n- Para endpoints com transações, o array `transacoes` deve conter objetos válidos para o arranjo do endpoint.\n- Para segregação em `/finalizacao`, enviar `infRequisicao` e `dadosFinalSeg` conforme `InfoSegFinalRequest`.\n\n## Validações aplicadas no OpenAPI\n\n### Tabela de tipos e validações\n| Tipo lógico | Tipo OpenAPI | Formato | Validações mais comuns |\n| --- | --- | --- | --- |\n| Texto/alfanumérico | `string` | - | `minLength`, `maxLength`, `pattern` |\n| Inteiro | `integer` | - | `minimum` |\n| Decimal | `number` | - | `multipleOf` (ex.: `0.01`) |\n| Data | `string` | `date` | `pattern: ^\\d{4}-\\d{2}-\\d{2}$` |\n| Data e hora | `string` | `date-time` | `pattern: ^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$` |\n| Lista fechada de valores | `string` | - | `enum` |\n\n## Segurança (mTLS)\n\n### Modelo de autenticação\n- A API utiliza autenticação mútua TLS (`mutualTLS`) em nível de transporte.\n- Não é utilizado token Bearer nem API Key para autorização de chamadas.\n\n### Certificados e fluxo JWKS\n- O certificado do cliente é obtido/gerenciado conforme fluxo de segurança baseado em JWKS, de acordo com o manual de segurança da plataforma.\n- A cadeia de confiança e o material criptográfico devem estar válidos no handshake TLS antes do envio da requisição HTTP.\n- A validação do certificado ocorre no canal TLS (camada de transporte).\n\n### Restrições de conteúdo\n- `enum` para valores fechados (ex.: `arrj`: `PXA`, `PXD`, `PXE`, `BOL`, `TED`, `TEF`).\n- `minLength` e `maxLength` para tamanhos fixos/limites.\n- `pattern` para formatos estruturados (ex.: CNPJ, CPF/CNPJ, timestamps, código de barras).\n- `minimum` para inteiros com limite inferior (ex.: `numPgto >= 0`).\n- `multipleOf` para valores decimais com 2 casas (`0.01`).\n\n### Respostas de erro\n- Componentes padronizados para `400`, `403`, `422`, `500`.\n", - "contact": { - "name": "SERPRO", - "url": "https://www.serpro.gov.br" - }, - "version": "0.0.10" - }, - "servers": [ - { - "url": "http://localhost:8080", - "description": "Generated server url" - } - ], - "tags": [ - { - "name": "Informe de Transação Iniciada", - "description": "Operações relacionadas a Informe de Transação Iniciada" - }, - { - "name": "Informe de Transação Atualizada", - "description": "Operações relacionadas a Informe de Transação Atualizada" - }, - { - "name": "Informe Preliminar de Pagamento", - "description": "Operações relacionadas a Informe Preliminar de Pagamento" - }, - { - "name": "Informe de Baixa (Exceto por Pagamento)", - "description": "Operações relacionadas a Informe de Baixa (Exceto por Pagamento)" - }, - { - "name": "Retorno Super Inteligente", - "description": "Operações relacionadas a Retorno Super Inteligente" - }, - { - "name": "Consulta Retroativa Super Inteligente", - "description": "Operações relacionadas a Consulta Retroativa Super Inteligente" - }, - { - "name": "Informe de Segregação", - "description": "Operações relacionadas a Informe de Segregação" - } - ], - "paths": { - "/api/v1/boleto": { - "post": { - "summary": "POST - Informe de Transação Iniciada", - "description": "Processa Informe de Transação Iniciada para arranjo(s): Boleto", - "tags": [ - "Informe de Transação Iniciada" - ], - "operationId": "postapiv1boleto", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeTransacaoIniciadaBoletoRequest" - } - } - } - } - }, - "patch": { - "summary": "PATCH - Informe de Transação Atualizada", - "description": "Processa Informe de Transação Atualizada para arranjo(s): Boleto", - "tags": [ - "Informe de Transação Atualizada" - ], - "operationId": "patchapiv1boleto", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaBoletoRequest" - } - } - } - } - } - }, - "/api/v1/pix-automatico": { - "post": { - "summary": "POST - Informe de Transação Iniciada", - "description": "Processa Informe de Transação Iniciada para arranjo(s): Pix Automático", - "tags": [ - "Informe de Transação Iniciada" - ], - "operationId": "postapiv1pix_automatico", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixAutomaticoRequest" - } - } - } - } - }, - "patch": { - "summary": "PATCH - Informe de Transação Atualizada", - "description": "Processa Informe de Transação Atualizada para arranjo(s): Pix Automático", - "tags": [ - "Informe de Transação Atualizada" - ], - "operationId": "patchapiv1pix_automatico", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaPixAutomaticoRequest" - } - } - } - } - } - }, - "/api/v1/pix-dinamico": { - "post": { - "summary": "POST - Informe de Transação Iniciada", - "description": "Processa Informe de Transação Iniciada para arranjo(s): Pix Dinâmico", - "tags": [ - "Informe de Transação Iniciada" - ], - "operationId": "postapiv1pix_dinamico", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixDinamicoRequest" - } - } - } - } - }, - "patch": { - "summary": "PATCH - Informe de Transação Atualizada", - "description": "Processa Informe de Transação Atualizada para arranjo(s): Pix Dinâmico", - "tags": [ - "Informe de Transação Atualizada" - ], - "operationId": "patchapiv1pix_dinamico", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaPixDinamicoRequest" - } - } - } - } - } - }, - "/api/v1/boleto/informe-preliminar-pagamento": { - "post": { - "summary": "POST - Informe Preliminar de Pagamento", - "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Boleto", - "tags": [ - "Informe Preliminar de Pagamento" - ], - "operationId": "postapiv1boletoinforme_preliminar_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoRequest" - } - } - } - } - } - }, - "/api/v1/pix-automatico/informe-preliminar-pagamento": { - "post": { - "summary": "POST - Informe Preliminar de Pagamento", - "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Pix Automático", - "tags": [ - "Informe Preliminar de Pagamento" - ], - "operationId": "postapiv1pix_automaticoinforme_preliminar_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoRequest" - } - } - } - } - } - }, - "/api/v1/pix-dinamico/informe-preliminar-pagamento": { - "post": { - "summary": "POST - Informe Preliminar de Pagamento", - "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Pix Dinâmico", - "tags": [ - "Informe Preliminar de Pagamento" - ], - "operationId": "postapiv1pix_dinamicoinforme_preliminar_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoPixDinamicoRequest" - } - } - } - } - } - }, - "/api/v1/pix-estatico/informe-preliminar-pagamento": { - "post": { - "summary": "POST - Informe Preliminar de Pagamento", - "description": "Processa Informe Preliminar de Pagamento para arranjo(s): PIX estático", - "tags": [ - "Informe Preliminar de Pagamento" - ], - "operationId": "postapiv1pix_estaticoinforme_preliminar_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoPixEstaticoRequest" - } - } - } - } - } - }, - "/api/v1/ted/informe-preliminar-pagamento": { - "post": { - "summary": "POST - Informe Preliminar de Pagamento", - "description": "Processa Informe Preliminar de Pagamento para arranjo(s): TED", - "tags": [ - "Informe Preliminar de Pagamento" - ], - "operationId": "postapiv1tedinforme_preliminar_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoTedRequest" - } - } - } - } - } - }, - "/api/v1/tef/informe-preliminar-pagamento": { - "post": { - "summary": "POST - Informe Preliminar de Pagamento", - "description": "Processa Informe Preliminar de Pagamento para arranjo(s): TEF", - "tags": [ - "Informe Preliminar de Pagamento" - ], - "operationId": "postapiv1tefinforme_preliminar_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoTefRequest" - } - } - } - } - } - }, - "/api/v1/boleto/baixa-exceto-pagamento": { - "post": { - "summary": "POST - Informe de Baixa (Exceto por Pagamento)", - "description": "Processa Informe de Baixa (Exceto por Pagamento) para arranjo(s): Boleto", - "tags": [ - "Informe de Baixa (Exceto por Pagamento)" - ], - "operationId": "postapiv1boletobaixa_exceto_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoBoletoRequest" - } - } - } - } - } - }, - "/api/v1/pix-automatico/baixa-exceto-pagamento": { - "post": { - "summary": "POST - Informe de Baixa (Exceto por Pagamento)", - "description": "Processa Informe de Baixa (Exceto por Pagamento) para arranjo(s): Pix Automático", - "tags": [ - "Informe de Baixa (Exceto por Pagamento)" - ], - "operationId": "postapiv1pix_automaticobaixa_exceto_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixAutomaticoRequest" - } - } - } - } - } - }, - "/api/v1/pix-dinamico/baixa-exceto-pagamento": { - "post": { - "summary": "POST - Informe de Baixa (Exceto por Pagamento)", - "description": "Processa Informe de Baixa (Exceto por Pagamento) para arranjo(s): Pix Dinâmico", - "tags": [ - "Informe de Baixa (Exceto por Pagamento)" - ], - "operationId": "postapiv1pix_dinamicobaixa_exceto_pagamento", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "201": { - "$ref": "#/components/responses/PPResponseOk" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixDinamicoRequest" - } - } - } - } - } - }, - "/api/v1/out/boleto/{idPsp}/tributos/stream/start": { - "get": { - "summary": "GET - Retorno Super Inteligente", - "description": "Inicia o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "getapiv1outboleto{idPsp}tributosstreamstart", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Stream iniciado com sucesso. Mensagens disponíveis dentro da janela de espera do long polling.", - "headers": { - "streamId": { - "$ref": "#/components/headers/StreamIdHeader" - }, - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoTransacao" - } - } - }, - "required": [ - "tributos" - ] - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentStreamStart" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/out/boleto/{idPsp}/tributos/stream/{token}": { - "get": { - "summary": "GET - Retorno Super Inteligente", - "description": "Continua o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "getapiv1outboleto{idPsp}tributosstream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Mensagens disponíveis dentro da janela de espera do long polling.", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoRequest" - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentStreamToken" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - }, - "delete": { - "summary": "DELETE - Retorno Super Inteligente", - "description": "Finaliza o stream do Retorno Super Inteligente.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "deleteapiv1outboleto{idPsp}tributosstream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "204": { - "description": "Stream cancelado com sucesso" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/out/pix-automatico/{idPsp}/tributos/stream/start": { - "get": { - "summary": "GET - Retorno Super Inteligente", - "description": "Inicia o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "getapiv1outpix_automatico{idPsp}tributosstreamstart", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Stream iniciado com sucesso. Mensagens disponíveis dentro da janela de espera do long polling.", - "headers": { - "streamId": { - "$ref": "#/components/headers/StreamIdHeader" - }, - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoTransacao" - } - } - }, - "required": [ - "tributos" - ] - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentStreamStart" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/out/pix-automatico/{idPsp}/tributos/stream/{token}": { - "get": { - "summary": "GET - Retorno Super Inteligente", - "description": "Continua o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "getapiv1outpix_automatico{idPsp}tributosstream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Mensagens disponíveis dentro da janela de espera do long polling.", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoRequest" - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentStreamToken" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - }, - "delete": { - "summary": "DELETE - Retorno Super Inteligente", - "description": "Finaliza o stream do Retorno Super Inteligente.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "deleteapiv1outpix_automatico{idPsp}tributosstream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "204": { - "description": "Stream cancelado com sucesso" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/out/pix-dinamico/{idPsp}/tributos/stream/start": { - "get": { - "summary": "GET - Retorno Super Inteligente", - "description": "Inicia o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "getapiv1outpix_dinamico{idPsp}tributosstreamstart", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Stream iniciado com sucesso. Mensagens disponíveis dentro da janela de espera do long polling.", - "headers": { - "streamId": { - "$ref": "#/components/headers/StreamIdHeader" - }, - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoTransacao" - } - } - }, - "required": [ - "tributos" - ] - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentStreamStart" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/out/pix-dinamico/{idPsp}/tributos/stream/{token}": { - "get": { - "summary": "GET - Retorno Super Inteligente", - "description": "Continua o long polling para consumo do Retorno Super Inteligente. A chamada poderá permanecer aberta por até N segundos aguardando novas mensagens.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "getapiv1outpix_dinamico{idPsp}tributosstream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Mensagens disponíveis dentro da janela de espera do long polling.", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoRequest" - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentStreamToken" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - }, - "delete": { - "summary": "DELETE - Retorno Super Inteligente", - "description": "Finaliza o stream do Retorno Super Inteligente.", - "tags": [ - "Retorno Super Inteligente" - ], - "operationId": "deleteapiv1outpix_dinamico{idPsp}tributosstream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "204": { - "description": "Stream cancelado com sucesso" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/retroativo/boleto/{idPsp}/tributos/stream/start": { - "get": { - "summary": "GET - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "getapiv1outboleto{idPsp}tributosretroativostreamstart", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "fromNsu", - "in": "query", - "required": true, - "description": "Query parameter: fromNsu", - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807 - } - }, - { - "name": "streamId", - "in": "query", - "required": false, - "description": "Query parameter: streamId", - "schema": { - "type": "string" - } - }, - { - "name": "toNsu", - "in": "query", - "required": false, - "description": "Query parameter: toNsu", - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807 - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Stream iniciado com sucesso", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoTransacao" - } - } - }, - "required": [ - "tributos" - ] - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentRetroativoStart" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/retroativo/boleto/{idPsp}/tributos/stream/{token}": { - "get": { - "summary": "GET - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "getapiv1outboleto{idPsp}tributosretroativostream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Dados da consulta", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoRequest" - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentRetroativoToken" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - }, - "delete": { - "summary": "DELETE - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "deleteapiv1outboleto{idPsp}tributosretroativostream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "204": { - "description": "Stream cancelado com sucesso" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/retroativo/pix-automatico/{idPsp}/tributos/stream/start": { - "get": { - "summary": "GET - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "getapiv1outpix_automatico{idPsp}tributosretroativostreamstart", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "fromNsu", - "in": "query", - "required": true, - "description": "Query parameter: fromNsu", - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807 - } - }, - { - "name": "streamId", - "in": "query", - "required": false, - "description": "Query parameter: streamId", - "schema": { - "type": "string" - } - }, - { - "name": "toNsu", - "in": "query", - "required": false, - "description": "Query parameter: toNsu", - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807 - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Stream iniciado com sucesso", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoTransacao" - } - } - }, - "required": [ - "tributos" - ] - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentRetroativoStart" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/retroativo/pix-automatico/{idPsp}/tributos/stream/{token}": { - "get": { - "summary": "GET - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "getapiv1outpix_automatico{idPsp}tributosretroativostream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Dados da consulta", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoRequest" - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentRetroativoToken" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - }, - "delete": { - "summary": "DELETE - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "deleteapiv1outpix_automatico{idPsp}tributosretroativostream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "204": { - "description": "Stream cancelado com sucesso" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/retroativo/pix-dinamico/{idPsp}/tributos/stream/start": { - "get": { - "summary": "GET - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "getapiv1outpix_dinamico{idPsp}tributosretroativostreamstart", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "fromNsu", - "in": "query", - "required": true, - "description": "Query parameter: fromNsu", - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807 - } - }, - { - "name": "streamId", - "in": "query", - "required": false, - "description": "Query parameter: streamId", - "schema": { - "type": "string" - } - }, - { - "name": "toNsu", - "in": "query", - "required": false, - "description": "Query parameter: toNsu", - "schema": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807 - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Stream iniciado com sucesso", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoTransacao" - } - } - }, - "required": [ - "tributos" - ] - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentRetroativoStart" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/retroativo/pix-dinamico/{idPsp}/tributos/stream/{token}": { - "get": { - "summary": "GET - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "getapiv1outpix_dinamico{idPsp}tributosretroativostream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "description": "Dados da consulta", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoRequest" - } - } - } - }, - "204": { - "$ref": "#/components/responses/PPResponseNoContentRetroativoToken" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - }, - "delete": { - "summary": "DELETE - Consulta Retroativa Super Inteligente", - "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico", - "tags": [ - "Consulta Retroativa Super Inteligente" - ], - "operationId": "deleteapiv1outpix_dinamico{idPsp}tributosretroativostream{token}", - "parameters": [ - { - "name": "idPsp", - "in": "path", - "required": true, - "description": "Path parameter: idPsp", - "schema": { - "type": "string" - } - }, - { - "name": "token", - "in": "path", - "required": true, - "description": "Path parameter: token", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "204": { - "description": "Stream cancelado com sucesso" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - } - } - }, - "/api/v1/segregacao": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, PIX estático, TED, TEF", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1segregacao", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkSegregacao" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedSegregacao" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestSegregacao" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InfoSegregacaoRequest" - } - } - } - } - } - }, - "/api/v1/segregacao/finalizacao": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, PIX estático, TED, TEF", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1segregacaofinalizacao", - "parameters": [ - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkSegregacao" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedSegregacao" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequestSegregacao" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InfoSegFinalRequest" - } - } - } - } - } - }, - "/api/v1/boleto/segregacao/{idInfSegr}/lotes": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): Boleto", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1boletosegregacao{idInfSegr}lotes", - "parameters": [ - { - "name": "idInfSegr", - "in": "path", - "required": true, - "description": "Path parameter: idInfSegr", - "schema": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkLote" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedLote" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeSegregacaoBoletoRequest" - } - } - } - } - } - }, - "/api/v1/pix-automatico/segregacao/{idInfSegr}/lotes": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): Pix Automático", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1pix_automaticosegregacao{idInfSegr}lotes", - "parameters": [ - { - "name": "idInfSegr", - "in": "path", - "required": true, - "description": "Path parameter: idInfSegr", - "schema": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkLote" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedLote" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeSegregacaoPixAutomaticoRequest" - } - } - } - } - } - }, - "/api/v1/pix-dinamico/segregacao/{idInfSegr}/lotes": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): Pix Dinâmico", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1pix_dinamicosegregacao{idInfSegr}lotes", - "parameters": [ - { - "name": "idInfSegr", - "in": "path", - "required": true, - "description": "Path parameter: idInfSegr", - "schema": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkLote" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedLote" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeSegregacaoPixDinamicoRequest" - } - } - } - } - } - }, - "/api/v1/pix-estatico/segregacao/{idInfSegr}/lotes": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): PIX estático", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1pix_estaticosegregacao{idInfSegr}lotes", - "parameters": [ - { - "name": "idInfSegr", - "in": "path", - "required": true, - "description": "Path parameter: idInfSegr", - "schema": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkLote" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedLote" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeSegregacaoPixEstaticoRequest" - } - } - } - } - } - }, - "/api/v1/ted/segregacao/{idInfSegr}/lotes": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): TED", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1tedsegregacao{idInfSegr}lotes", - "parameters": [ - { - "name": "idInfSegr", - "in": "path", - "required": true, - "description": "Path parameter: idInfSegr", - "schema": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkLote" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedLote" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeSegregacaoTedRequest" - } - } - } - } - } - }, - "/api/v1/tef/segregacao/{idInfSegr}/lotes": { - "post": { - "summary": "POST - Informe de Segregação", - "description": "Processa Informe de Segregação para arranjo(s): TEF", - "tags": [ - "Informe de Segregação" - ], - "operationId": "postapiv1tefsegregacao{idInfSegr}lotes", - "parameters": [ - { - "name": "idInfSegr", - "in": "path", - "required": true, - "description": "Path parameter: idInfSegr", - "schema": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - { - "$ref": "#/components/parameters/MessageIdHeaderParam" - }, - { - "$ref": "#/components/parameters/CorrelationIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TenantIdHeaderParam" - }, - { - "$ref": "#/components/parameters/TimestampHeaderParam" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/PPResponseOkLote" - }, - "201": { - "$ref": "#/components/responses/PPResponseCreatedLote" - }, - "400": { - "$ref": "#/components/responses/PPResponseBadRequest" - }, - "422": { - "$ref": "#/components/responses/PPResponseUnprocessableEntity" - }, - "403": { - "$ref": "#/components/responses/PPResponseForbidden" - }, - "500": { - "$ref": "#/components/responses/PPResponseError" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InformeDeSegregacaoTefRequest" - } - } - } - } - } - } - }, - "components": { - "schemas": { - "InfoRequest": { - "type": "object", - "properties": { - "infRequisicao": { - "type": "object", - "properties": { - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "dtHrMsg": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-22T12:00:00-03:00" - ] - } - }, - "required": [ - "cnpjRaizPspRecDir", - "dtHrMsg" - ] - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "type": "object", - "properties": {}, - "required": [] - } - } - }, - "required": [ - "infRequisicao", - "transacoes" - ] - }, - "InfoRequestSemCnpj": { - "type": "object", - "properties": { - "infRequisicao": { - "type": "object", - "properties": { - "dtHrMsg": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-22T12:00:00-03:00" - ] - } - }, - "required": [ - "dtHrMsg" - ] - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "type": "object", - "properties": {}, - "required": [] - } - } - }, - "required": [ - "infRequisicao", - "transacoes" - ] - }, - "InfoSegRequest": { - "type": "object", - "properties": { - "infRequisicao": { - "type": "object", - "properties": { - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "dtHrMsg": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-22T12:00:00-03:00" - ] - } - }, - "required": [ - "cnpjRaizPspRecDir", - "dtHrMsg" - ] - } - }, - "required": [ - "infRequisicao" - ] - }, - "InfoSegFinalRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoSegRequest" - }, - { - "properties": { - "dadosFinalSeg": { - "$ref": "#/components/schemas/DadosFinalSegRequest" - } - }, - "required": [ - "dadosFinalSeg" - ] - } - ] - }, - "DadosInfoSegRequest": { - "type": "object", - "properties": { - "idRepasse": { - "type": "string", - "minLength": 30, - "maxLength": 30, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{11}$", - "examples": [ - "ABC123DEF456GHI7PXD20260423001" - ] - }, - "arrj": { - "type": "string", - "enum": [ - "PXA", - "PXD", - "PXE", - "BOL", - "TED", - "TEF" - ], - "examples": [ - "PXD" - ] - }, - "idInfSegr": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - } - }, - "required": [ - "idRepasse", - "arrj", - "idInfSegr" - ] - }, - "DadosLoteSegRequest": { - "type": "object", - "properties": { - "idLote": { - "type": "string", - "minLength": 1, - "maxLength": 16, - "examples": [ - "LOTE202603250001", - "0001", - "0002" - ] - } - }, - "required": [ - "idLote" - ] - }, - "DadosFinalSegRequest": { - "type": "object", - "properties": { - "idInfSegr": { - "type": "string", - "minLength": 34, - "maxLength": 34, - "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", - "examples": [ - "ABC123DEF456GHI7PXD202604231930001" - ] - }, - "totalTrans": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 99999999999999999, - "examples": [ - 100, - 99999999999999999 - ] - }, - "valorTotalCbs": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 1500.5 - ] - }, - "valorTotalIbs": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 750.25 - ] - } - }, - "required": [ - "idInfSegr", - "totalTrans", - "valorTotalCbs", - "valorTotalIbs" - ] - }, - "InformeDeTransacaoIniciadaBoletoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "idDda": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCtrlOrig": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCodBarras": { - "type": "string", - "minLength": 1, - "maxLength": 44, - "pattern": "^\\d{1,44}$", - "examples": [ - "12345678901234567891123456789012345678911234" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagOrig": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrIni": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtVenc": { - "type": "string", - "format": "date", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "examples": [ - "2026-03-20" - ] - }, - "dtHrLimPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "idDda", - "numCtrlOrig", - "numCodBarras", - "vlInf", - "vlCbsInf", - "vlIbsInf", - "cnpjRaizPspRecDir", - "cnpjRec", - "cnpjCpfPagOrig", - "dtHrIni", - "dtVenc", - "dtHrLimPgto" - ] - }, - "InformeDeTransacaoIniciadaBoletoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeTransacaoIniciadaBoletoTransacao" - } - } - } - } - ] - }, - "InformeDeTransacaoIniciadaPixAutomaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagOrig": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrIni": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtVenc": { - "type": "string", - "format": "date", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "examples": [ - "2026-03-20" - ] - }, - "dtHrLimPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "vlInf", - "vlCbsInf", - "vlIbsInf", - "cnpjRaizPspRecDir", - "cnpjRec", - "dtHrIni", - "dtHrLimPgto" - ] - }, - "InformeDeTransacaoIniciadaPixAutomaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixAutomaticoTransacao" - } - } - } - } - ] - }, - "InformeDeTransacaoIniciadaPixDinamicoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagOrig": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrIni": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtVenc": { - "type": "string", - "format": "date", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "examples": [ - "2026-03-20" - ] - }, - "dtHrLimPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "vlInf", - "vlCbsInf", - "vlIbsInf", - "cnpjRaizPspRecDir", - "cnpjRec", - "dtHrIni", - "dtHrLimPgto" - ] - }, - "InformeDeTransacaoIniciadaPixDinamicoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixDinamicoTransacao" - } - } - } - } - ] - }, - "InformeDeTransacaoAtualizadaBoletoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "idDda": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCtrlOrig": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "dtHrAtu": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtVenc": { - "type": "string", - "format": "date", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "examples": [ - "2026-03-20" - ] - }, - "dtHrLimPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "idDda", - "numCtrlOrig", - "vlInf", - "vlCbsInf", - "vlIbsInf", - "cnpjRaizPspRecDir", - "dtHrAtu", - "dtVenc", - "dtHrLimPgto" - ] - }, - "InformeDeTransacaoAtualizadaBoletoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaBoletoTransacao" - } - } - } - } - ] - }, - "InformeDeTransacaoAtualizadaPixAutomaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagOrig": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrAtu": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtVenc": { - "type": "string", - "format": "date", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "examples": [ - "2026-03-20" - ] - }, - "dtHrLimPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "vlInf", - "vlCbsInf", - "vlIbsInf", - "cnpjRaizPspRecDir", - "cnpjRec", - "dtHrAtu", - "dtHrLimPgto" - ] - }, - "InformeDeTransacaoAtualizadaPixAutomaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaPixAutomaticoTransacao" - } - } - } - } - ] - }, - "InformeDeTransacaoAtualizadaPixDinamicoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagOrig": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrAtu": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtVenc": { - "type": "string", - "format": "date", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "examples": [ - "2026-03-20" - ] - }, - "dtHrLimPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "vlInf", - "vlCbsInf", - "vlIbsInf", - "cnpjRaizPspRecDir", - "cnpjRec", - "dtHrAtu", - "dtHrLimPgto" - ] - }, - "InformeDeTransacaoAtualizadaPixDinamicoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaPixDinamicoTransacao" - } - } - } - } - ] - }, - "InformePreliminarDePagamentoBoletoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "idDda": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCtrlOrig": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numPgto": { - "type": "integer", - "minimum": 0, - "examples": [ - 1 - ] - }, - "numIdentcBaixa": { - "type": "integer", - "format": "int64", - "minimum": 0, - "maximum": 9223372036854775807, - "examples": [ - 1234567890123456789, - 9223372036854775807 - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "indPgtoIntegral": { - "type": "string", - "enum": [ - "0", - "1" - ], - "examples": [ - "1" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "idDda", - "numCtrlOrig", - "numPgto", - "numIdentcBaixa", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "cnpjRaizPspRecDir", - "indPgtoIntegral", - "cnpjRaizPspPag", - "cnpjRec", - "dtHrPgto" - ] - }, - "InformePreliminarDePagamentoBoletoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoTransacao" - } - } - } - } - ] - }, - "InformePreliminarDePagamentoPixAutomaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "e2eId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "indPgtoIntegral": { - "type": "string", - "enum": [ - "0", - "1" - ], - "examples": [ - "1" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "e2eId", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "indPgtoIntegral", - "cnpjRaizPspRecDir", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq" - ] - }, - "InformePreliminarDePagamentoPixAutomaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao" - } - } - } - } - ] - }, - "InformePreliminarDePagamentoPixDinamicoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "e2eId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "indPgtoIntegral": { - "type": "string", - "enum": [ - "0", - "1" - ], - "examples": [ - "1" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "e2eId", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "indPgtoIntegral", - "cnpjRaizPspRecDir", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq" - ] - }, - "InformePreliminarDePagamentoPixDinamicoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoPixDinamicoTransacao" - } - } - } - } - ] - }, - "InformePreliminarDePagamentoPixEstaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "e2eId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "e2eId", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "docFiscal", - "cnpjRaizPspRecDir", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq" - ] - }, - "InformePreliminarDePagamentoPixEstaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoPixEstaticoTransacao" - } - } - } - } - ] - }, - "InformePreliminarDePagamentoTedTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "numCtrlTED": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "numCtrlTED", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "docFiscal", - "cnpjRaizPspRecDir", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrLiq" - ] - }, - "InformePreliminarDePagamentoTedRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoTedTransacao" - } - } - } - } - ] - }, - "InformePreliminarDePagamentoTefTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "numCtrlTEF": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "numCtrlTEF", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "docFiscal", - "cnpjRaizPspRecDir", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq" - ] - }, - "InformePreliminarDePagamentoTefRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformePreliminarDePagamentoTefTransacao" - } - } - } - } - ] - }, - "InformeDeBaixaExcetoPorPagamentoBoletoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "idDda": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCtrlOrig": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numPgto": { - "type": "integer", - "minimum": 0, - "examples": [ - 1 - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "dtHrBaixa": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "idDda", - "numCtrlOrig", - "numPgto", - "cnpjRaizPspRecDir", - "dtHrBaixa" - ] - }, - "InformeDeBaixaExcetoPorPagamentoBoletoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoBoletoTransacao" - } - } - } - } - ] - }, - "InformeDeBaixaExcetoPorPagamentoPixAutomaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "dtHrBaixa": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "cnpjRaizPspRecDir", - "dtHrBaixa" - ] - }, - "InformeDeBaixaExcetoPorPagamentoPixAutomaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixAutomaticoTransacao" - } - } - } - } - ] - }, - "InformeDeBaixaExcetoPorPagamentoPixDinamicoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "dtHrBaixa": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "cnpjRaizPspRecDir", - "dtHrBaixa" - ] - }, - "InformeDeBaixaExcetoPorPagamentoPixDinamicoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequestSemCnpj" - }, - { - "properties": { - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixDinamicoTransacao" - } - } - } - } - ] - }, - "CodMsgEnum": { - "type": "string", - "enum": [ - "RSUP101", - "RSUP102", - "RSUP103", - "RSUP104", - "RSUP201", - "RSUP202", - "RSUP203", - "RSUP204", - "RSUP601", - "RSUP602", - "RSUP603", - "RSUP604" - ], - "examples": [ - "RSUP101", - "RSUP203" - ] - }, - "RetornoSuperInteligenteBoletoTransacao": { - "type": "object", - "properties": { - "codMsg": { - "$ref": "#/components/schemas/CodMsgEnum" - }, - "nsuId": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807, - "description": "Número sequencial único do retorno", - "examples": [ - 1234567890123456789 - ] - }, - "idDda": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCtrlOrig": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsCorr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsCorr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsAberto": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsAberto": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - } - }, - "required": [ - "codMsg", - "nsuId", - "idDda", - "numCtrlOrig", - "vlInf", - "cnpjRaizPspRecDir" - ] - }, - "RetornoSuperInteligenteBoletoRequest": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoTransacao" - } - } - }, - "required": [ - "tributos" - ] - }, - "RetornoSuperInteligentePixAutomaticoTransacao": { - "type": "object", - "properties": { - "codMsg": { - "$ref": "#/components/schemas/CodMsgEnum" - }, - "nsuId": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807, - "description": "Número sequencial único do retorno", - "examples": [ - 1234567890123456789 - ] - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsCorr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsCorr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsAberto": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsAberto": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - } - }, - "required": [ - "codMsg", - "nsuId", - "txId", - "vlInf", - "cnpjRaizPspRecDir", - "cnpjRec" - ] - }, - "RetornoSuperInteligentePixAutomaticoRequest": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoTransacao" - } - } - }, - "required": [ - "tributos" - ] - }, - "RetornoSuperInteligentePixDinamicoTransacao": { - "type": "object", - "properties": { - "codMsg": { - "$ref": "#/components/schemas/CodMsgEnum" - }, - "nsuId": { - "type": "integer", - "format": "int64", - "minimum": 1, - "maximum": 9223372036854775807, - "description": "Número sequencial único do retorno", - "examples": [ - 1234567890123456789 - ] - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlInf": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsCorr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsCorr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsAberto": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsAberto": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspRecDir": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "12345678" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - } - }, - "required": [ - "codMsg", - "nsuId", - "txId", - "vlInf", - "cnpjRaizPspRecDir", - "cnpjRec" - ] - }, - "RetornoSuperInteligentePixDinamicoRequest": { - "type": "object", - "properties": { - "tributos": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoTransacao" - } - } - }, - "required": [ - "tributos" - ] - }, - "InfoSegregacaoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoSegRequest" - }, - { - "properties": { - "dadosInfoSeg": { - "$ref": "#/components/schemas/DadosInfoSegRequest" - } - }, - "required": [ - "dadosInfoSeg" - ] - } - ] - }, - "InformeDeSegregacaoBoletoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "idDda": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numCtrlOrig": { - "type": "string", - "minLength": 1, - "maxLength": 20, - "examples": [ - "123A512312312312FAS1" - ] - }, - "numPgto": { - "type": "integer", - "minimum": 1, - "examples": [ - 1 - ] - }, - "numIdentcBaixa": { - "type": "integer", - "format": "int64", - "minimum": 0, - "maximum": 9223372036854775807, - "examples": [ - 1234567890123456789, - 9223372036854775807 - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "indPgtoIntegral": { - "type": "string", - "enum": [ - "0", - "1" - ], - "examples": [ - "1" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrRepasse": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "idDda", - "numCtrlOrig", - "numPgto", - "numIdentcBaixa", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "indPgtoIntegral", - "cnpjRaizPspPag", - "cnpjRec", - "dtHrPgto", - "dtHrLiq", - "dtHrRepasse" - ] - }, - "InformeDeSegregacaoBoletoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequest" - }, - { - "properties": { - "dadosLoteSeg": { - "$ref": "#/components/schemas/DadosLoteSegRequest" - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeSegregacaoBoletoTransacao" - } - } - }, - "required": [ - "dadosLoteSeg", - "transacoes" - ] - } - ] - }, - "InformeDeSegregacaoPixAutomaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "e2eId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "indPgtoIntegral": { - "type": "string", - "enum": [ - "0", - "1" - ], - "examples": [ - "1" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrRepasse": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "e2eId", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "indPgtoIntegral", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq", - "dtHrRepasse" - ] - }, - "InformeDeSegregacaoPixAutomaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequest" - }, - { - "properties": { - "dadosLoteSeg": { - "$ref": "#/components/schemas/DadosLoteSegRequest" - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeSegregacaoPixAutomaticoTransacao" - } - } - }, - "required": [ - "dadosLoteSeg", - "transacoes" - ] - } - ] - }, - "InformeDeSegregacaoPixDinamicoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "txId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "e2eId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "indPgtoIntegral": { - "type": "string", - "enum": [ - "0", - "1" - ], - "examples": [ - "1" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrRepasse": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "txId", - "e2eId", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "indPgtoIntegral", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq", - "dtHrRepasse" - ] - }, - "InformeDeSegregacaoPixDinamicoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequest" - }, - { - "properties": { - "dadosLoteSeg": { - "$ref": "#/components/schemas/DadosLoteSegRequest" - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeSegregacaoPixDinamicoTransacao" - } - } - }, - "required": [ - "dadosLoteSeg", - "transacoes" - ] - } - ] - }, - "InformeDeSegregacaoPixEstaticoTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "e2eId": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "1234ABDOASD11231234ABDOASD112312345" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrRepasse": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "e2eId", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "docFiscal", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq", - "dtHrRepasse" - ] - }, - "InformeDeSegregacaoPixEstaticoRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequest" - }, - { - "properties": { - "dadosLoteSeg": { - "$ref": "#/components/schemas/DadosLoteSegRequest" - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeSegregacaoPixEstaticoTransacao" - } - } - }, - "required": [ - "dadosLoteSeg", - "transacoes" - ] - } - ] - }, - "InformeDeSegregacaoTedTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "numCtrlTED": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "TED123456789" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspPag": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrRepasse": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "numCtrlTED", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "docFiscal", - "cnpjRaizPspPag", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrLiq", - "dtHrRepasse" - ] - }, - "InformeDeSegregacaoTedRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequest" - }, - { - "properties": { - "dadosLoteSeg": { - "$ref": "#/components/schemas/DadosLoteSegRequest" - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeSegregacaoTedTransacao" - } - } - }, - "required": [ - "dadosLoteSeg", - "transacoes" - ] - } - ] - }, - "InformeDeSegregacaoTefTransacao": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ], - "minimum": 1, - "maximum": 1000 - }, - "numCtrlTEF": { - "type": "string", - "minLength": 1, - "maxLength": 35, - "examples": [ - "TEF123456789" - ] - }, - "vlPago": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlCbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "vlIbsSegr": { - "type": "number", - "multipleOf": 0.01, - "minimum": 0, - "maximum": 999999999999999999.99, - "examples": [ - 10.02 - ] - }, - "docFiscal": { - "type": "string", - "minLength": 1, - "maxLength": 50, - "examples": [ - "1234567890123456789B123A5678901234567891123412345" - ] - }, - "cnpjRaizPspRecInd": { - "type": "string", - "minLength": 8, - "maxLength": 8, - "pattern": "^[A-Za-z0-9]{8}$", - "examples": [ - "87654321" - ] - }, - "cnpjRec": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "11444777000142" - ] - }, - "cnpjCpfPagEfet": { - "type": "string", - "minLength": 11, - "maxLength": 14, - "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", - "examples": [ - "11444777000142" - ] - }, - "dtHrPgto": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrLiq": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - }, - "dtHrRepasse": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-20T10:33:46-03:00" - ] - } - }, - "required": [ - "index", - "numCtrlTEF", - "vlPago", - "vlCbsSegr", - "vlIbsSegr", - "docFiscal", - "cnpjRec", - "cnpjCpfPagEfet", - "dtHrPgto", - "dtHrLiq", - "dtHrRepasse" - ] - }, - "InformeDeSegregacaoTefRequest": { - "allOf": [ - { - "$ref": "#/components/schemas/InfoRequest" - }, - { - "properties": { - "dadosLoteSeg": { - "$ref": "#/components/schemas/DadosLoteSegRequest" - }, - "transacoes": { - "type": "array", - "minItems": 1, - "maxItems": 1000, - "items": { - "$ref": "#/components/schemas/InformeDeSegregacaoTefTransacao" - } - } - }, - "required": [ - "dadosLoteSeg", - "transacoes" - ] - } - ] - } - }, - "responses": { - "PPResponseOk": { - "description": "PP Recebido", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "examples": [ - "Sucesso" - ] - }, - "status": { - "type": "integer", - "examples": [ - 201 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Solicitação processada com sucesso" - ] - }, - "numValidos": { - "type": "integer", - "examples": [ - 997 - ] - }, - "numErros": { - "type": "integer", - "examples": [ - 3 - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 10 - ] - }, - "field": { - "type": "string", - "examples": [ - "field1" - ] - }, - "message": { - "type": "string", - "examples": [ - "Campo obrigatório" - ] - } - } - } - }, - "resourceId": { - "type": "string", - "examples": [ - "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - ] - } - } - } - } - } - }, - "PPResponseNoContentStreamStart": { - "description": "Stream iniciado com sucesso. Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação; o consumidor poderá realizar nova chamada com o token vigente.", - "headers": { - "streamId": { - "$ref": "#/components/headers/StreamIdHeader" - }, - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - } - }, - "PPResponseNoContentRetroativoStart": { - "description": "A consulta não retornou resultados", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - } - }, - "PPResponseNoContentRetroativoToken": { - "description": "Fim do resultado da consulta", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - } - }, - "PPResponseNoContentStreamToken": { - "description": "Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação; o consumidor poderá realizar nova chamada com o token vigente.", - "headers": { - "proximoToken": { - "$ref": "#/components/headers/ProximoTokenHeader" - } - } - }, - "PPResponseBadRequest": { - "description": "Bad Request", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "examples": [ - "Bad Request" - ] - }, - "status": { - "type": "integer", - "examples": [ - 400 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Todas as transações do informe estão inválidas" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ] - }, - "field": { - "type": "string", - "examples": [ - "field1" - ] - }, - "message": { - "type": "string", - "examples": [ - "field1: propriedade obrigatória 'field1' não encontrada" - ] - } - } - } - } - } - } - } - } - }, - "PPResponseBadRequestSegregacao": { - "description": "Bad Request", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "examples": [ - "Bad Request" - ] - }, - "status": { - "type": "integer", - "examples": [ - 400 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Dados do informe de segregacao invalidos" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "field": { - "type": "string", - "examples": [ - "idInfSegr" - ] - }, - "message": { - "type": "string", - "examples": [ - "idInfSegr: formato invalido" - ] - } - } - } - } - } - } - } - } - }, - "PPResponseBadRequestConsultaStream": { - "description": "Bad Request", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "examples": [ - "Bad Request" - ] - }, - "status": { - "type": "integer", - "examples": [ - 400 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Parametros invalidos" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "field": { - "type": "string", - "examples": [ - "token" - ] - }, - "message": { - "type": "string", - "examples": [ - "campoX: parametro obrigatorio nao informado" - ] - } - } - } - } - } - } - } - } - }, - "PPResponseUnprocessableEntityConsultaStream": { - "description": "Unprocessable Entity", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "examples": [ - "Unprocessable Entity" - ] - }, - "status": { - "type": "integer", - "examples": [ - 422 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Regras de negocio violadas para consulta de stream" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "field": { - "type": "string", - "examples": [ - "streamId", - "fromNsu" - ] - }, - "message": { - "type": "string", - "examples": [ - "streamId inexistente", - "fromNsu deve ser menor ou igual a toNsu" - ] - } - } - } - } - } - } - } - } - }, - "PPResponseUnprocessableEntity": { - "description": "Unprocessable Entity", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "examples": [ - "Unprocessable Entity" - ] - }, - "status": { - "type": "integer", - "examples": [ - 422 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Regras de negócio violadas para o informe de segregação" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "index": { - "type": "integer", - "examples": [ - 1 - ] - }, - "field": { - "type": "string", - "examples": [ - "idInfSegr" - ] - }, - "message": { - "type": "string", - "examples": [ - "Remessa não iniciada" - ] - } - } - } - } - } - } - } - } - }, - "PPResponseForbidden": { - "description": "Forbidden", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "example": { - "title": "Forbidden", - "status": 403, - "detail": "Acesso negado" - }, - "properties": { - "title": { - "type": "string", - "examples": [ - "Forbidden" - ] - }, - "status": { - "type": "integer", - "examples": [ - 403 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Todas as transações do informe estão inválidas" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "index": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "PPResponseError": { - "description": "Internal Server Error", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "example": { - "title": "Internal Server Error", - "status": 500, - "detail": "Erro interno inesperado" - }, - "properties": { - "title": { - "type": "string", - "examples": [ - "Internal Server Error" - ] - }, - "status": { - "type": "integer", - "examples": [ - 500 - ] - }, - "detail": { - "type": "string", - "examples": [ - "Todas as transações do informe estão inválidas" - ] - }, - "errors": { - "type": "array", - "items": { - "type": "object", - "properties": { - "index": { - "type": "integer" - }, - "field": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "BadRequest": { - "description": "Bad Request", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - }, - "details": { - "type": "string" - } - } - } - } - } - }, - "Unauthorized": { - "description": "Unauthorized", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - }, - "NotFound": { - "description": "Not Found", - "content": { - "application/problem+json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - }, - "PPResponseCreatedSegregacao": { - "description": "PP Recebido", - "content": { - "application/json": { - "example": { - "title": "PP Recebido", - "status": 201, - "detail": "Informe de segregação iniciado/finalizado com sucesso", - "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - }, - "schema": { - "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" - } - } - } - }, - "PPResponseOkSegregacao": { - "description": "PP Segregação Recebido Anteriormente", - "content": { - "application/json": { - "example": { - "title": "PP Segregação Recebido Anteriormente", - "status": 200, - "detail": "Informe de segregação iniciado/finalizado anteriormente", - "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - }, - "schema": { - "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" - } - } - } - }, - "PPResponseCreatedLote": { - "description": "PP Recebido", - "content": { - "application/json": { - "example": { - "title": "PP Recebido", - "status": 201, - "detail": "Lote recebido com sucesso", - "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - }, - "schema": { - "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" - } - } - } - }, - "PPResponseOkLote": { - "description": "PP Lote Recebido Anteriormente", - "content": { - "application/json": { - "example": { - "title": "PP Lote Recebido Anteriormente", - "status": 200, - "detail": "Lote foi recebido anteriormente", - "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" - }, - "schema": { - "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" - } - } - } - }, - "InternalServerError": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - }, - "requestId": { - "type": "string" - } - } - } - } - } - } - }, - "parameters": { - "MessageIdHeaderParam": { - "name": "messageId", - "in": "header", - "required": true, - "description": "Header: messageId (Formato UUID v4)", - "schema": { - "type": "string", - "minLength": 36, - "maxLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$", - "examples": [ - "550e8400-e29b-41d4-a716-446655440000" - ] - } - }, - "CorrelationIdHeaderParam": { - "name": "correlationId", - "in": "header", - "required": true, - "description": "Header: correlationId", - "schema": { - "type": "string", - "minLength": 19, - "maxLength": 19, - "examples": [ - "txn-20251222-abc123" - ] - } - }, - "TenantIdHeaderParam": { - "name": "tenantId", - "in": "header", - "required": true, - "description": "Header: tenantId", - "schema": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "12345678000199" - ] - } - }, - "TimestampHeaderParam": { - "name": "timestamp", - "in": "header", - "required": true, - "description": "Header: timestamp", - "schema": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-24T14:30:45-03:00" - ] - } - } - }, - "headers": { - "MessageIdHeader": { - "description": "Header: messageId (UUID v4 format)", - "schema": { - "type": "string", - "minLength": 36, - "maxLength": 36, - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$", - "examples": [ - "550e8400-e29b-41d4-a716-446655440000" - ] - } - }, - "CorrelationIdHeader": { - "description": "Header: correlationId", - "schema": { - "type": "string", - "minLength": 19, - "maxLength": 19, - "examples": [ - "txn-20251222-abc123" - ] - } - }, - "TenantIdHeader": { - "description": "Header: tenantId", - "schema": { - "type": "string", - "minLength": 14, - "maxLength": 14, - "pattern": "^[A-Za-z0-9]{14}$", - "examples": [ - "12345678000199" - ] - } - }, - "ProximoTokenHeader": { - "description": "Token de posição da leitura", - "schema": { - "type": "string", - "example": "123232131232132123" - } - }, - "StreamIdHeader": { - "description": "Identificador do stream", - "schema": { - "type": "string", - "example": "stream-123232131232132123" - } - }, - "TimestampHeader": { - "description": "Header: timestamp", - "schema": { - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", - "examples": [ - "2026-03-24T14:30:45-03:00" - ] - } - } - }, - "securitySchemes": { - "mutualTLS": { - "type": "mutualTLS", - "description": "Autenticação mútua TLS (mTLS) com certificado de cliente válido." - } - } - }, - "security": [ - { - "mutualTLS": [] - } - ] -} diff --git a/packages/mock/data/spec/openapi-v1_1_0.json b/packages/mock/data/spec/openapi-v1_1_0.json new file mode 100644 index 0000000..7d7b259 --- /dev/null +++ b/packages/mock/data/spec/openapi-v1_1_0.json @@ -0,0 +1,10303 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Plataforma Pública de Split Payment API", + "description": "API REST para a Plataforma Pública de Split Payment - RTC\n\n## Documentação de Objetos e Preenchimento\n\n> ⚠️ **Observação importante:** documentação em construção.\n\n### Estrutura base das requisições\n- `InfoRequest`: objeto base para requests com `infRequisicao` e `transacoes`.\n- `InfoRequestSemCnpj`: objeto base para requests com `infRequisicao` (sem cnpjRaizPspRecDir) e `transacoes`.\n- `InfoSegRequest`: objeto base para operações de segregação sem lista de transações.\n- `InfoSegFinalRequest`: objeto de finalização com `infRequisicao` e `dadosFinalSeg`.\n\n### Objeto `infRequisicao`\n- `cnpjRaizPspRecDir`: raiz CNPJ do PSP direto (8 dígitos).\n- `dtHrMsg`: data/hora da mensagem no formato ISO 8601 com fuso `-03:00`.\n\n### Regras de preenchimento\n- Campos marcados como obrigatórios no schema devem ser sempre enviados.\n- Para endpoints com transações, o array `transacoes` deve conter objetos válidos para o arranjo do endpoint.\n- Para segregação em `/finalizacao`, enviar `infRequisicao` e `dadosFinalSeg` conforme `InfoSegFinalRequest`.\n\n## Validações aplicadas no OpenAPI\n\n### Tabela de tipos e validações\n| Tipo lógico | Tipo OpenAPI | Formato | Validações mais comuns |\n| --- | --- | --- | --- |\n| Texto/alfanumérico | `string` | - | `minLength`, `maxLength`, `pattern` |\n| Inteiro | `integer` | - | `minimum` |\n| Decimal | `number` | - | `multipleOf` (ex.: `0.01`) |\n| Data | `string` | `date` | `pattern: ^\\d{4}-\\d{2}-\\d{2}$` |\n| Data e hora | `string` | `date-time` | `pattern: ^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$` |\n| Lista fechada de valores | `string` | - | `enum` |\n\n## Segurança (mTLS)\n\n### Modelo de autenticação\n- A API utiliza autenticação mútua TLS (`mutualTLS`) em nível de transporte.\n- Não é utilizado token Bearer nem API Key para autorização de chamadas.\n\n### Certificados e fluxo JWKS\n- O certificado do cliente é obtido/gerenciado conforme fluxo de segurança baseado em JWKS, de acordo com o manual de segurança da plataforma.\n- A cadeia de confiança e o material criptográfico devem estar válidos no handshake TLS antes do envio da requisição HTTP.\n- A validação do certificado ocorre no canal TLS (camada de transporte).\n\n### Restrições de conteúdo\n- `enum` para valores fechados (ex.: `arrj`: `PXA`, `PXD`, `PXE`, `BOL`, `TED`, `TEF`).\n- `minLength` e `maxLength` para tamanhos fixos/limites.\n- `pattern` para formatos estruturados (ex.: CNPJ, CPF/CNPJ, timestamps, código de barras).\n- `minimum` para inteiros com limite inferior (ex.: `numPgto >= 1`).\n- `multipleOf` para valores decimais com 2 casas (`0.01`).\n\n### Respostas de erro\n- Componentes padronizados para `400`, `403`, `422`, `500`.\n\n\n## Cabeçalhos\n\n- `X-JWS-Signature`: assinatura JWS Compact Detached (RFC 7515), com `alg=RS256`, `typ=JWS`, `kid`, `b64=false`, `jti`, `iat` e `crit=[\"b64\"]` (RFC 7797), usando payload canonicalizado em JCS (RFC 8785). `jti`: identificador único da requisição no formato UUID v4, `iat`: instante de emissão da assinatura no formato NumericDate, conforme manual de segurança.\n\n- `proximoToken`: token que indica a posição final de leitura do Retorno Super Inteligente, usado como parâmetro para a próxima requisição.\n- `streamId`: identificador do stream retornado pela API. Pode ser usado na Consulta Retroativa do Super Inteligente para indicar o stream que precisa ser consultado.\n", + "contact": { + "name": "SERPRO", + "url": "https://www.serpro.gov.br" + }, + "version": "1.1.0" + }, + "servers": [ + { + "url": "http://localhost:8080", + "description": "Generated server url" + } + ], + "tags": [ + { + "name": "Informe de Transação Iniciada", + "description": "Operações relacionadas a Informe de Transação Iniciada" + }, + { + "name": "Informe de Transação Atualizada", + "description": "Operações relacionadas a Informe de Transação Atualizada" + }, + { + "name": "Informe Preliminar de Pagamento", + "description": "Operações relacionadas a Informe Preliminar de Pagamento" + }, + { + "name": "Informe de Baixa (Exceto por Pagamento)", + "description": "Operações relacionadas a Informe de Baixa (Exceto por Pagamento)" + }, + { + "name": "Retorno Super Inteligente", + "description": "Operações relacionadas a Retorno Super Inteligente" + }, + { + "name": "Consulta Retroativa Super Inteligente", + "description": "Operações relacionadas a Consulta Retroativa Super Inteligente" + }, + { + "name": "Informe de Segregação", + "description": "Operações relacionadas a Informe de Segregação" + }, + { + "name": "Mecanismo de Ocorrências (MOC)", + "description": "Operações relacionadas ao Mecanismo de Ocorrências (MOC)" + } + ], + "paths": { + "/api/v1/boleto": { + "post": { + "summary": "POST - Informe de Transação Iniciada", + "description": "Processa Informe de Transação Iniciada para arranjo(s): Boleto", + "tags": [ + "Informe de Transação Iniciada" + ], + "operationId": "postapiv1boleto", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeTransacaoIniciadaBoletoRequest" + } + } + } + } + }, + "patch": { + "summary": "PATCH - Informe de Transação Atualizada", + "description": "Processa Informe de Transação Atualizada para arranjo(s): Boleto", + "tags": [ + "Informe de Transação Atualizada" + ], + "operationId": "patchapiv1boleto", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaBoletoRequest" + } + } + } + } + } + }, + "/api/v1/pix-automatico": { + "post": { + "summary": "POST - Informe de Transação Iniciada", + "description": "Processa Informe de Transação Iniciada para arranjo(s): Pix Automático", + "tags": [ + "Informe de Transação Iniciada" + ], + "operationId": "postapiv1pix_automatico", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixAutomaticoRequest" + } + } + } + } + } + }, + "/api/v1/pix-dinamico": { + "post": { + "summary": "POST - Informe de Transação Iniciada", + "description": "Processa Informe de Transação Iniciada para arranjo(s): Pix Dinâmico", + "tags": [ + "Informe de Transação Iniciada" + ], + "operationId": "postapiv1pix_dinamico", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixDinamicoRequest" + } + } + } + } + }, + "patch": { + "summary": "PATCH - Informe de Transação Atualizada", + "description": "Processa Informe de Transação Atualizada para arranjo(s): Pix Dinâmico", + "tags": [ + "Informe de Transação Atualizada" + ], + "operationId": "patchapiv1pix_dinamico", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaPixDinamicoRequest" + } + } + } + } + } + }, + "/api/v1/boleto/informe-preliminar-pagamento": { + "post": { + "summary": "POST - Informe Preliminar de Pagamento", + "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Boleto", + "tags": [ + "Informe Preliminar de Pagamento" + ], + "operationId": "postapiv1boletoinforme_preliminar_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoRequest" + } + } + } + } + } + }, + "/api/v1/pix-automatico/informe-preliminar-pagamento": { + "post": { + "summary": "POST - Informe Preliminar de Pagamento", + "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Pix Automático", + "tags": [ + "Informe Preliminar de Pagamento" + ], + "operationId": "postapiv1pix_automaticoinforme_preliminar_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoRequest" + } + } + } + } + } + }, + "/api/v1/pix-dinamico/informe-preliminar-pagamento": { + "post": { + "summary": "POST - Informe Preliminar de Pagamento", + "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Pix Dinâmico", + "tags": [ + "Informe Preliminar de Pagamento" + ], + "operationId": "postapiv1pix_dinamicoinforme_preliminar_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixDinamicoRequest" + } + } + } + } + } + }, + "/api/v1/pix-estatico/informe-preliminar-pagamento": { + "post": { + "summary": "POST - Informe Preliminar de Pagamento", + "description": "Processa Informe Preliminar de Pagamento para arranjo(s): Pix estático", + "tags": [ + "Informe Preliminar de Pagamento" + ], + "operationId": "postapiv1pix_estaticoinforme_preliminar_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixEstaticoRequest" + } + } + } + } + } + }, + "/api/v1/ted/informe-preliminar-pagamento": { + "post": { + "summary": "POST - Informe Preliminar de Pagamento", + "description": "Processa Informe Preliminar de Pagamento para arranjo(s): TED", + "tags": [ + "Informe Preliminar de Pagamento" + ], + "operationId": "postapiv1tedinforme_preliminar_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTedRequest" + } + } + } + } + } + }, + "/api/v1/tef/informe-preliminar-pagamento": { + "post": { + "summary": "POST - Informe Preliminar de Pagamento", + "description": "Processa Informe Preliminar de Pagamento para arranjo(s): TEF", + "tags": [ + "Informe Preliminar de Pagamento" + ], + "operationId": "postapiv1tefinforme_preliminar_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTefRequest" + } + } + } + } + } + }, + "/api/v1/boleto/baixa-exceto-pagamento": { + "post": { + "summary": "POST - Informe de Baixa (Exceto por Pagamento)", + "description": "Processa Informe de Baixa (Exceto por Pagamento) para arranjo(s): Boleto", + "tags": [ + "Informe de Baixa (Exceto por Pagamento)" + ], + "operationId": "postapiv1boletobaixa_exceto_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoBoletoRequest" + } + } + } + } + } + }, + "/api/v1/pix-automatico/baixa-exceto-pagamento": { + "post": { + "summary": "POST - Informe de Baixa (Exceto por Pagamento)", + "description": "Processa Informe de Baixa (Exceto por Pagamento) para arranjo(s): Pix Automático", + "tags": [ + "Informe de Baixa (Exceto por Pagamento)" + ], + "operationId": "postapiv1pix_automaticobaixa_exceto_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixAutomaticoRequest" + } + } + } + } + } + }, + "/api/v1/pix-dinamico/baixa-exceto-pagamento": { + "post": { + "summary": "POST - Informe de Baixa (Exceto por Pagamento)", + "description": "Processa Informe de Baixa (Exceto por Pagamento) para arranjo(s): Pix Dinâmico", + "tags": [ + "Informe de Baixa (Exceto por Pagamento)" + ], + "operationId": "postapiv1pix_dinamicobaixa_exceto_pagamento", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixDinamicoRequest" + } + } + } + } + } + }, + "/api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start": { + "get": { + "summary": "GET - Retorno Super Inteligente", + "description": "Inicia o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "getapiv1outboleto{cnpjRaizPspRecDir}transacoesstreamstart", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Stream iniciado com sucesso. Mensagens disponíveis dentro da janela de espera do long polling.", + "headers": { + "streamId": { + "$ref": "#/components/headers/StreamIdHeader" + }, + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentStreamStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { + "get": { + "summary": "GET - Retorno Super Inteligente", + "description": "Continua o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "getapiv1outboleto{cnpjRaizPspRecDir}transacoesstream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Mensagens disponíveis dentro da janela de espera do long polling.", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoRequest" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentStreamToken" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "410": { + "$ref": "#/components/responses/PPResponseGoneStream" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + }, + "delete": { + "summary": "DELETE - Retorno Super Inteligente", + "description": "Finaliza o stream do Retorno Super Inteligente.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "deleteapiv1outboleto{cnpjRaizPspRecDir}transacoesstream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "204": { + "description": "Stream finalizado com sucesso" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/out/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/start": { + "get": { + "summary": "GET - Retorno Super Inteligente", + "description": "Inicia o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstreamstart", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Stream iniciado com sucesso. Mensagens disponíveis dentro da janela de espera do long polling.", + "headers": { + "streamId": { + "$ref": "#/components/headers/StreamIdHeader" + }, + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentStreamStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/out/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { + "get": { + "summary": "GET - Retorno Super Inteligente", + "description": "Continua o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Mensagens disponíveis dentro da janela de espera do long polling.", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoRequest" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentStreamToken" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "410": { + "$ref": "#/components/responses/PPResponseGoneStream" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + }, + "delete": { + "summary": "DELETE - Retorno Super Inteligente", + "description": "Finaliza o stream do Retorno Super Inteligente.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "deleteapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesstream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "204": { + "description": "Stream finalizado com sucesso" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/out/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/start": { + "get": { + "summary": "GET - Retorno Super Inteligente", + "description": "Inicia o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstreamstart", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Stream iniciado com sucesso. Mensagens disponíveis dentro da janela de espera do long polling.", + "headers": { + "streamId": { + "$ref": "#/components/headers/StreamIdHeader" + }, + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentStreamStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/out/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { + "get": { + "summary": "GET - Retorno Super Inteligente", + "description": "Continua o long polling para consumo do Retorno Super Inteligente. A chamada permanece aberta por até 6 segundos aguardando novas mensagens (este tempo pode ser ajustado pela Plataforma). Não havendo mensagens dentro da janela, a PP responde 204 e devolve o token de continuação no cabeçalho 'proximoToken'; o consumidor deve prosseguir com o proximoToken retornado.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Mensagens disponíveis dentro da janela de espera do long polling.", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoRequest" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentStreamToken" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "410": { + "$ref": "#/components/responses/PPResponseGoneStream" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + }, + "delete": { + "summary": "DELETE - Retorno Super Inteligente", + "description": "Finaliza o stream do Retorno Super Inteligente.", + "tags": [ + "Retorno Super Inteligente" + ], + "operationId": "deleteapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesstream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "204": { + "description": "Stream finalizado com sucesso" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/retroativo/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start": { + "get": { + "summary": "GET - Consulta Retroativa Super Inteligente", + "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Boleto", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "getapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostreamstart", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "nsuInicial", + "in": "query", + "required": true, + "description": "Número Sequencial Único da mensagem que se deseja iniciar a consulta retroativa de Super Inteligente.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$" + } + }, + { + "name": "streamId", + "in": "query", + "required": false, + "description": "Identificador do stream que se deseja consultar.", + "schema": { + "type": "string" + } + }, + { + "name": "nsuFinal", + "in": "query", + "required": false, + "description": "Número Sequencial Único da mensagem que se deseja finalizar a consulta retroativa de Super Inteligente.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Stream iniciado com sucesso", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentRetroativoStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/retroativo/boleto/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { + "get": { + "summary": "GET - Consulta Retroativa Super Inteligente", + "description": "Continua a Consulta Retroativa Super Inteligente para arranjo(s): Boleto", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "getapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Dados da consulta", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoRequest" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentRetroativoToken" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "410": { + "$ref": "#/components/responses/PPResponseGoneRetroativoStream" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + }, + "delete": { + "summary": "DELETE - Consulta Retroativa Super Inteligente", + "description": "Finaliza a Consulta Retroativa Super Inteligente para arranjo(s): Boleto", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "deleteapiv1outboleto{cnpjRaizPspRecDir}transacoesretroativostream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "204": { + "description": "Stream finalizado com sucesso" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/retroativo/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/start": { + "get": { + "summary": "GET - Consulta Retroativa Super Inteligente", + "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostreamstart", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "nsuInicial", + "in": "query", + "required": true, + "description": "Número Sequencial Único da mensagem que se deseja iniciar a consulta retroativa de Super Inteligente.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$" + } + }, + { + "name": "streamId", + "in": "query", + "required": false, + "description": "Identificador do stream que se deseja consultar.", + "schema": { + "type": "string" + } + }, + { + "name": "nsuFinal", + "in": "query", + "required": false, + "description": "Número Sequencial Único da mensagem que se deseja finalizar a consulta retroativa de Super Inteligente.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Stream iniciado com sucesso", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentRetroativoStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/retroativo/pix-automatico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { + "get": { + "summary": "GET - Consulta Retroativa Super Inteligente", + "description": "Continua a Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "getapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Dados da consulta", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoRequest" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentRetroativoToken" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "410": { + "$ref": "#/components/responses/PPResponseGoneRetroativoStream" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + }, + "delete": { + "summary": "DELETE - Consulta Retroativa Super Inteligente", + "description": "Finaliza a Consulta Retroativa Super Inteligente para arranjo(s): Pix Automático", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "deleteapiv1outpix_automatico{cnpjRaizPspRecDir}transacoesretroativostream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "204": { + "description": "Stream finalizado com sucesso" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/retroativo/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/start": { + "get": { + "summary": "GET - Consulta Retroativa Super Inteligente", + "description": "Processa Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostreamstart", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "nsuInicial", + "in": "query", + "required": true, + "description": "Número Sequencial Único da mensagem que se deseja iniciar a consulta retroativa de Super Inteligente.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$" + } + }, + { + "name": "streamId", + "in": "query", + "required": false, + "description": "Identificador do stream que se deseja consultar.", + "schema": { + "type": "string" + } + }, + { + "name": "nsuFinal", + "in": "query", + "required": false, + "description": "Número Sequencial Único da mensagem que se deseja finalizar a consulta retroativa de Super Inteligente.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Stream iniciado com sucesso", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentRetroativoStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/retroativo/pix-dinamico/{cnpjRaizPspRecDir}/transacoes/stream/{token}": { + "get": { + "summary": "GET - Consulta Retroativa Super Inteligente", + "description": "Continua a Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "getapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "200": { + "description": "Dados da consulta", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoRequest" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentRetroativoToken" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "410": { + "$ref": "#/components/responses/PPResponseGoneRetroativoStream" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + }, + "delete": { + "summary": "DELETE - Consulta Retroativa Super Inteligente", + "description": "Finaliza a Consulta Retroativa Super Inteligente para arranjo(s): Pix Dinâmico", + "tags": [ + "Consulta Retroativa Super Inteligente" + ], + "operationId": "deleteapiv1outpix_dinamico{cnpjRaizPspRecDir}transacoesretroativostream{token}", + "parameters": [ + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "token", + "in": "path", + "required": true, + "description": "Token recebido na requisição anterior.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "204": { + "description": "Stream finalizado com sucesso" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestConsultaStream" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityConsultaStream" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + }, + "/api/v1/segregacao": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, Pix estático, TED, TEF", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1segregacao", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedSegregacao" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestSegregacao" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoIniciada" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InfoSegregacaoRequest" + } + } + } + } + } + }, + "/api/v1/segregacao/finalizacao": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): Boleto, Pix Dinâmico, Pix Automático, Pix estático, TED, TEF", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1segregacaofinalizacao", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedSegregacao" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestSegregacao" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoFinalizacao" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InfoSegFinalRequest" + } + } + } + } + } + }, + "/api/v1/boleto/segregacao/{idInfSegr}/lotes": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): Boleto", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1boletosegregacao{idInfSegr}lotes", + "parameters": [ + { + "name": "idInfSegr", + "in": "path", + "required": true, + "description": "Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação.", + "schema": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedLote" + }, + "200": { + "$ref": "#/components/responses/PPResponseOkLoteAtualizado" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoLote" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeSegregacaoBoletoRequest" + } + } + } + } + } + }, + "/api/v1/pix-automatico/segregacao/{idInfSegr}/lotes": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): Pix Automático", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1pix_automaticosegregacao{idInfSegr}lotes", + "parameters": [ + { + "name": "idInfSegr", + "in": "path", + "required": true, + "description": "Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação.", + "schema": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedLote" + }, + "200": { + "$ref": "#/components/responses/PPResponseOkLoteAtualizado" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoLote" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeSegregacaoPixAutomaticoRequest" + } + } + } + } + } + }, + "/api/v1/pix-dinamico/segregacao/{idInfSegr}/lotes": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): Pix Dinâmico", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1pix_dinamicosegregacao{idInfSegr}lotes", + "parameters": [ + { + "name": "idInfSegr", + "in": "path", + "required": true, + "description": "Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação.", + "schema": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedLote" + }, + "200": { + "$ref": "#/components/responses/PPResponseOkLoteAtualizado" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoLote" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeSegregacaoPixDinamicoRequest" + } + } + } + } + } + }, + "/api/v1/pix-estatico/segregacao/{idInfSegr}/lotes": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): Pix estático", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1pix_estaticosegregacao{idInfSegr}lotes", + "parameters": [ + { + "name": "idInfSegr", + "in": "path", + "required": true, + "description": "Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação.", + "schema": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedLote" + }, + "200": { + "$ref": "#/components/responses/PPResponseOkLoteAtualizado" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoLote" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeSegregacaoPixEstaticoRequest" + } + } + } + } + } + }, + "/api/v1/ted/segregacao/{idInfSegr}/lotes": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): TED", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1tedsegregacao{idInfSegr}lotes", + "parameters": [ + { + "name": "idInfSegr", + "in": "path", + "required": true, + "description": "Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação.", + "schema": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedLote" + }, + "200": { + "$ref": "#/components/responses/PPResponseOkLoteAtualizado" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoLote" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeSegregacaoTedRequest" + } + } + } + } + } + }, + "/api/v1/tef/segregacao/{idInfSegr}/lotes": { + "post": { + "summary": "POST - Informe de Segregação", + "description": "Processa Informe de Segregação para arranjo(s): TEF", + "tags": [ + "Informe de Segregação" + ], + "operationId": "postapiv1tefsegregacao{idInfSegr}lotes", + "parameters": [ + { + "name": "idInfSegr", + "in": "path", + "required": true, + "description": "Identificador do informe de segregação. Formato: ISPB da instituição devedora (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data de envio do informe (AAAAMMDD) + hora de corte (HHMM) + 3 caracteres para o sequencial. Gerado pelo responsável pela comunicação.", + "schema": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ] + } + }, + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseCreatedLote" + }, + "200": { + "$ref": "#/components/responses/PPResponseOkLoteAtualizado" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntitySegregacaoLote" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InformeDeSegregacaoTefRequest" + } + } + } + } + } + }, + "/api/v1/moc/solicitacao": { + "post": { + "summary": "POST - Requisição de MOC (Solicitação)", + "description": "Abre Solicitação de Estorno para um máximo de 1.000 ocorrências por requisição.", + "tags": [ + "Mecanismo de Ocorrências (MOC)" + ], + "operationId": "postapiv1mocsolicitacao", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MecanismoDeOcorrenciasSolRequest" + }, + "examples": { + "boleto-sol": { + "summary": "Boleto", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "SOL12345678BOL202606230000001", + "arrj": "BOL", + "vlPago": 10.02, + "vlCbsSegr": 5.01, + "vlIbsSegr": 5.01, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "idDda": "123A512312312312FAS1", + "codMotOcor": "02", + "vlCbsEst": 5.01, + "vlIbsEst": 5.01, + "descOcor": "Solicitação de estorno para boleto", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "pix-estatico-sol": { + "summary": "Pix Estático", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "SOL12345678PXE202606230000008", + "arrj": "PXE", + "vlPago": 15.75, + "vlCbsSegr": 7.88, + "vlIbsSegr": 7.87, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "e2eId": "E1234567820260320123456789012345", + "codMotOcor": "02", + "vlCbsEst": 7.88, + "vlIbsEst": 7.87, + "descOcor": "Solicitação para pix estático", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "pix-dinamico-sol": { + "summary": "Pix Dinâmico", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "SOL12345678PXD202606230000003", + "arrj": "PXD", + "vlPago": 22.5, + "vlCbsSegr": 11.25, + "vlIbsSegr": 11.25, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "txId": "1234ABDOASD11231234ABDOASD112312345", + "e2eId": "E1234567820260320123456789012345", + "codMotOcor": "01", + "vlCbsEst": 11.25, + "vlIbsEst": 11.25, + "descOcor": "Solicitação com identificacao por txId", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "pix-automatico-sol": { + "summary": "Pix Automático", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "SOL12345678PXA202606230000010", + "arrj": "PXA", + "vlPago": 30, + "vlCbsSegr": 15, + "vlIbsSegr": 15, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "txId": "1234ABDOASD11231234ABDOASD112312345", + "e2eId": "E1234567820260320123456789012345", + "codMotOcor": "01", + "vlCbsEst": 15, + "vlIbsEst": 15, + "descOcor": "Solicitação para pix automatico", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "ted-sol": { + "summary": "TED", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "SOL12345678TED202606230000005", + "arrj": "TED", + "vlPago": 100, + "vlCbsSegr": 50, + "vlIbsSegr": 50, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "numCtrlTED": "STR123456789", + "codMotOcor": "02", + "vlCbsEst": 50, + "vlIbsEst": 50, + "descOcor": "Solicitação de TED com numero de controle", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "tef-sol": { + "summary": "TEF", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "SOL12345678TEF202606230000012", + "arrj": "TEF", + "vlPago": 75, + "vlCbsSegr": 37.5, + "vlIbsSegr": 37.5, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "numCtrlTEF": "TEF123456789", + "codMotOcor": "02", + "vlCbsEst": 37.5, + "vlIbsEst": 37.5, + "descOcor": "Solicitação para TEF", + "cnpjPagOrig": "11444777000142" + } + ] + } + } + } + } + } + } + } + }, + "/api/v1/moc/notificacao": { + "post": { + "summary": "POST - Requisição de MOC (Notificação)", + "description": "Envia Notificação de transações em Análise no máximo de 1.000 ocorrências por requisicao.", + "tags": [ + "Mecanismo de Ocorrências (MOC)" + ], + "operationId": "postapiv1mocnotificacao", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + } + ], + "responses": { + "201": { + "$ref": "#/components/responses/PPResponseOk" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequest" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MecanismoDeOcorrenciasNotRequest" + }, + "examples": { + "boleto-not": { + "summary": "Boleto", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "NOT12345678BOL202606230000007", + "arrj": "BOL", + "vlPago": 10.02, + "vlCbsSegr": 5.01, + "vlIbsSegr": 5.01, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "idDda": "123A512312312312FAS1", + "descOcor": "Notificação para boleto", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "pix-estatico-not": { + "summary": "Pix Estático", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "NOT12345678PXE202606230000002", + "arrj": "PXE", + "vlPago": 15.75, + "vlCbsSegr": 7.88, + "vlIbsSegr": 7.87, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "e2eId": "E1234567820260320123456789012345", + "descOcor": "Notificação Pix estático", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "pix-dinamico-not": { + "summary": "Pix Dinâmico", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "NOT12345678PXD202606230000009", + "arrj": "PXD", + "vlPago": 22.5, + "vlCbsSegr": 11.25, + "vlIbsSegr": 11.25, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "txId": "1234ABDOASD11231234ABDOASD112312345", + "e2eId": "E1234567820260320123456789012345", + "descOcor": "Notificação para pix dinâmico", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "pix-automatico-not": { + "summary": "Pix Automático", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "NOT12345678PXA202606230000004", + "arrj": "PXA", + "vlPago": 30, + "vlCbsSegr": 15, + "vlIbsSegr": 15, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "txId": "1234ABDOASD11231234ABDOASD112312345", + "e2eId": "E1234567820260320123456789012345", + "orgRespProcAdm": "RFB", + "numProcAdm": "PROC2026000123", + "descOcor": "Notificação para pix automático", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "ted-not": { + "summary": "TED", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "NOT12345678TED202606230000011", + "arrj": "TED", + "vlPago": 100, + "vlCbsSegr": 50, + "vlIbsSegr": 50, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "numCtrlTED": "STR123456789", + "descOcor": "Notificação para TED", + "cnpjPagOrig": "11444777000142" + } + ] + } + }, + "tef-not": { + "summary": "TEF", + "value": { + "infRequisicao": { + "dtHrMsg": "2026-03-22T12:00:00-03:00" + }, + "ocorrencias": [ + { + "index": 1, + "idOcor": "NOT12345678TEF202606230000006", + "arrj": "TEF", + "vlPago": 75, + "vlCbsSegr": 37.5, + "vlIbsSegr": 37.5, + "dtHrPgto": "2026-03-22T11:30:00-03:00", + "dtHrLiq": "2026-03-22T11:31:00-03:00", + "cnpjCpfPagEfet": "11444777000142", + "cnpjRaizPspPag": "12345678", + "cnpjRaizPspRecDir": "87654321", + "cnpjRec": "11444777000142", + "cnpjCpfDest": "11444777000142", + "numCtrlTEF": "TEF123456789", + "orgRespProcAdm": "CGIBS", + "numProcAdm": "PROC2026000456", + "descOcor": "Notificação para TEF", + "cnpjPagOrig": "11444777000142" + } + ] + } + } + } + } + } + } + } + }, + "/api/v1/moc/{cnpjRaizPspRecDir}/ocorrencias": { + "get": { + "summary": "GET - Consulta de MOC", + "description": "Consulta paginada (polling) das ocorrências do MOC com resposta para o PSP. A Plataforma responde imediatamente com as ocorrências disponíveis no momento (até 1.000 por página). O parâmetro 'nsuInicial' deve ser utilizado para continuar a paginação a partir do último NSU já recebido, a primeira consulta deve usar o valor inicial: 1. O parâmetro opcional 'limite' permite definir a quantidade máxima de ocorrências retornadas por página, respeitado o limite de 1.000 itens. O retorno HTTP 204 indica que não há mais ocorrências disponíveis no momento — seja porque todas as ocorrências já foram retornadas, seja porque não há ocorrências. Nesse caso o PSP deve aguardar 30 minutos antes de realizar uma nova consulta. A Plataforma não mantém a conexão aberta aguardando ocorrências (estratégia de polling).", + "tags": [ + "Mecanismo de Ocorrências (MOC)" + ], + "operationId": "getapiv1moc{cnpjRaizPspRecDir}ocorrencias", + "parameters": [ + { + "$ref": "#/components/parameters/XJwsSignatureHeaderParam" + }, + { + "name": "cnpjRaizPspRecDir", + "in": "path", + "required": true, + "description": "Raiz do CNPJ do PSP Recebedor Direto: 8 caracteres alfanuméricos.", + "schema": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ] + } + }, + { + "name": "nsuInicial", + "in": "query", + "required": true, + "description": "NSU inicial utilizado para a paginação dos resultados de ocorrências do MOC.", + "schema": { + "type": "string", + "pattern": "^\\d{1,19}$", + "examples": [ + "1234567890123456789" + ] + } + }, + { + "name": "limite", + "in": "query", + "required": false, + "description": "Quantidade máxima de ocorrências retornadas por página. Padrão e máximo: 1.000.", + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "examples": [ + 1000 + ] + } + } + ], + "responses": { + "200": { + "description": "Consulta realizada com sucesso. Ocorrências disponíveis no momento da consulta.", + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MocOcorrenciasConsultaResponse" + } + } + } + }, + "204": { + "$ref": "#/components/responses/PPResponseNoContentMocConsultaStart" + }, + "400": { + "$ref": "#/components/responses/PPResponseBadRequestMocConsulta" + }, + "403": { + "$ref": "#/components/responses/PPResponseForbidden" + }, + "422": { + "$ref": "#/components/responses/PPResponseUnprocessableEntityMocConsulta" + }, + "500": { + "$ref": "#/components/responses/PPResponseError" + } + } + } + } + }, + "components": { + "schemas": { + "InfoRequest": { + "type": "object", + "properties": { + "infRequisicao": { + "type": "object", + "properties": { + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "dtHrMsg": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-22T12:00:00-03:00" + ], + "description": "Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública." + } + }, + "required": [ + "cnpjRaizPspRecDir", + "dtHrMsg" + ] + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "type": "object", + "properties": {}, + "required": [] + } + } + }, + "required": [ + "infRequisicao", + "transacoes" + ] + }, + "InfoRequestSemCnpj": { + "type": "object", + "properties": { + "infRequisicao": { + "type": "object", + "properties": { + "dtHrMsg": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-22T12:00:00-03:00" + ], + "description": "Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública." + } + }, + "required": [ + "dtHrMsg" + ] + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "type": "object", + "properties": {}, + "required": [] + } + } + }, + "required": [ + "infRequisicao", + "transacoes" + ] + }, + "InfoSegRequest": { + "type": "object", + "properties": { + "infRequisicao": { + "type": "object", + "properties": { + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "dtHrMsg": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-22T12:00:00-03:00" + ], + "description": "Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública." + } + }, + "required": [ + "cnpjRaizPspRecDir", + "dtHrMsg" + ] + } + }, + "required": [ + "infRequisicao" + ] + }, + "InfoSegFinalRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoSegRequest" + }, + { + "properties": { + "dadosFinalSeg": { + "$ref": "#/components/schemas/DadosFinalSegRequest" + } + }, + "required": [ + "dadosFinalSeg" + ] + } + ] + }, + "DadosInfoSegRequest": { + "type": "object", + "properties": { + "idRepasse": { + "type": "string", + "minLength": 30, + "maxLength": 30, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{11}$", + "examples": [ + "ABC123DEF456GHI7PXD20260423001" + ], + "description": "Identificador do Repasse Financeiro associado à transação. Formato: ISPB do PSP Recebedor Direto (8) + ISPB da instituição do repasse efetivo (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) + data definida para realização do Repasse Financeiro (AAAAMMDD) + 3 caracteres para o sequencial. Gerado pelo PSP Recebedor Direto. Um mesmo idRepasse é utilizado para os dois tributos do Repasse Financeiro: CBS (via TES) e IBS (via STR), sendo comum a ambos." + }, + "arrj": { + "type": "string", + "enum": [ + "PXA", + "PXD", + "PXE", + "BOL", + "TED", + "TEF" + ], + "examples": [ + "PXD" + ], + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF." + }, + "idInfSegr": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ], + "description": "Identificador do informe de segregação, gerado pelo responsável pela comunicação. Formato: ISPB do PSP Recebedor Direto (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA/PXD/PXE/BOL/TED/TEF) + data de envio (AAAAMMDD) + hora de corte HHMM (horário de corte do arranjo, conforme o Manual de Tempos) + sequencial (3)." + } + }, + "required": [ + "idRepasse", + "arrj", + "idInfSegr" + ] + }, + "DadosLoteSegRequest": { + "type": "object", + "properties": { + "idLote": { + "type": "string", + "minLength": 40, + "maxLength": 40, + "pattern": "^[A-Za-z0-9]{34}\\d{6}$", + "examples": [ + "ZZ99YY88XX77WW66VV55UU44TT33SS22RR000001", + "ZZ99YY88XX77WW66VV55UU44TT33SS22RR000002" + ], + "description": "Identificador do lote enviado no informe de segregação. Formato: IdInfSegr + sequencial" + } + }, + "required": [ + "idLote" + ] + }, + "DadosFinalSegRequest": { + "type": "object", + "properties": { + "idInfSegr": { + "type": "string", + "minLength": 34, + "maxLength": 34, + "pattern": "^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "examples": [ + "ABC123DEF456GHI7PXD202604231930001" + ], + "description": "Identificador do informe de segregação, gerado pelo responsável pela comunicação. Formato: ISPB do PSP Recebedor Direto (8) + ISPB da instituição da comunicação efetiva (8) + arranjo (PXA/PXD/PXE/BOL/TED/TEF) + data de envio (AAAAMMDD) + hora de corte HHMM (horário de corte do arranjo, conforme o Manual de Tempos) + sequencial (3)." + }, + "totalTrans": { + "type": "integer", + "format": "int64", + "minimum": 0, + "maximum": 99999999999999999, + "examples": [ + 100, + 99, + 0 + ], + "description": "Número total de transações enviadas no Informe de Segregação" + }, + "vlTotalCbs": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 1500.5 + ], + "description": "Valor total de CBS enviado no Informe de Segregação" + }, + "vlTotalIbs": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 750.25 + ], + "description": "Valor total de IBS enviado no Informe de Segregação" + } + }, + "required": [ + "idInfSegr", + "totalTrans", + "vlTotalCbs", + "vlTotalIbs" + ] + }, + "InformeDeTransacaoIniciadaBoletoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "idDda": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador único do documento de cobrança no sistema DDA." + }, + "numCtrlOrig": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador utilizado pela Núclea para controle interno da transação." + }, + "numCodBarras": { + "type": "string", + "minLength": 44, + "maxLength": 44, + "pattern": "^\\d{44}$", + "examples": [ + "12345678901234567891123456789012345678911234" + ], + "description": "Número correspondente ao código de barras do boleto." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS informado pelo originador no preenchimento da transação." + }, + "vlIbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS informado pelo originador no preenchimento da transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrIni": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora de emissão da transação após processamento pelo PSP/Núclea." + }, + "dtVenc": { + "type": "string", + "format": "date", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "examples": [ + "2026-03-20" + ], + "description": "Data de vencimento da transação." + }, + "dtHrLimPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora limite para realização do pagamento da transação." + } + }, + "required": [ + "index", + "idDda", + "numCtrlOrig", + "numCodBarras", + "vlInf", + "vlCbsInf", + "vlIbsInf", + "cnpjRaizPspRecDir", + "cnpjRec", + "cnpjPagOrig", + "dtHrIni", + "dtVenc", + "dtHrLimPgto" + ] + }, + "InformeDeTransacaoIniciadaBoletoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeTransacaoIniciadaBoletoTransacao" + } + } + } + } + ] + }, + "InformeDeTransacaoIniciadaPixAutomaticoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS informado pelo originador no preenchimento da transação." + }, + "vlIbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS informado pelo originador no preenchimento da transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrIni": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora de emissão da transação após processamento pelo PSP/Núclea." + }, + "dtVenc": { + "type": "string", + "format": "date", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "examples": [ + "2026-03-20" + ], + "description": "Data de vencimento da transação." + }, + "dtHrLimPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora limite para realização do pagamento da transação." + } + }, + "required": [ + "index", + "txId", + "vlInf", + "vlCbsInf", + "vlIbsInf", + "cnpjRaizPspRecDir", + "cnpjRec", + "dtHrIni", + "dtHrLimPgto" + ] + }, + "InformeDeTransacaoIniciadaPixAutomaticoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixAutomaticoTransacao" + } + } + } + } + ] + }, + "InformeDeTransacaoIniciadaPixDinamicoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS informado pelo originador no preenchimento da transação." + }, + "vlIbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS informado pelo originador no preenchimento da transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrIni": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora de emissão da transação após processamento pelo PSP/Núclea." + }, + "dtVenc": { + "type": "string", + "format": "date", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "examples": [ + "2026-03-20" + ], + "description": "Data de vencimento da transação." + }, + "dtHrLimPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora limite para realização do pagamento da transação." + } + }, + "required": [ + "index", + "txId", + "vlInf", + "vlCbsInf", + "vlIbsInf", + "cnpjRaizPspRecDir", + "cnpjRec", + "dtHrIni", + "dtHrLimPgto" + ] + }, + "InformeDeTransacaoIniciadaPixDinamicoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeTransacaoIniciadaPixDinamicoTransacao" + } + } + } + } + ] + }, + "InformeDeTransacaoAtualizadaBoletoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "idDda": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador único do documento de cobrança no sistema DDA." + }, + "numCtrlOrig": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador utilizado pela Núclea para controle interno da transação." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS informado pelo originador no preenchimento da transação." + }, + "vlIbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS informado pelo originador no preenchimento da transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "dtHrAtu": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora da atualização da transação." + }, + "dtVenc": { + "type": "string", + "format": "date", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "examples": [ + "2026-03-20" + ], + "description": "Data de vencimento da transação." + }, + "dtHrLimPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora limite para realização do pagamento da transação." + } + }, + "required": [ + "index", + "idDda", + "numCtrlOrig", + "vlInf", + "vlCbsInf", + "vlIbsInf", + "cnpjRaizPspRecDir", + "dtHrAtu", + "dtVenc", + "dtHrLimPgto" + ] + }, + "InformeDeTransacaoAtualizadaBoletoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaBoletoTransacao" + } + } + } + } + ] + }, + "InformeDeTransacaoAtualizadaPixDinamicoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS informado pelo originador no preenchimento da transação." + }, + "vlIbsInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS informado pelo originador no preenchimento da transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrAtu": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora da atualização da transação." + }, + "dtVenc": { + "type": "string", + "format": "date", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "examples": [ + "2026-03-20" + ], + "description": "Data de vencimento da transação." + }, + "dtHrLimPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora limite para realização do pagamento da transação." + } + }, + "required": [ + "index", + "txId", + "vlInf", + "vlCbsInf", + "vlIbsInf", + "cnpjRaizPspRecDir", + "cnpjRec", + "dtHrAtu", + "dtHrLimPgto" + ] + }, + "InformeDeTransacaoAtualizadaPixDinamicoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeTransacaoAtualizadaPixDinamicoTransacao" + } + } + } + } + ] + }, + "InformePreliminarDePagamentoBoletoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "idDda": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador único do documento de cobrança no sistema DDA." + }, + "numCtrlOrig": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador utilizado pela Núclea para controle interno da transação." + }, + "numPgto": { + "type": "integer", + "minimum": 1, + "examples": [ + 1 + ], + "maximum": 999999999, + "description": "Indica a sequência do pagamento no arranjo (ex.: quantidade de pagamentos do boleto)." + }, + "numIdentcBaixa": { + "type": "string", + "pattern": "^\\d{1,19}$", + "examples": [ + "1234567890123456789", + "9999999999999999999" + ], + "description": "Identificador específico do evento de baixa da transação." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "indPgtoIntegral": { + "type": "string", + "enum": [ + "0", + "1" + ], + "examples": [ + "1" + ], + "description": "Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + } + }, + "required": [ + "index", + "idDda", + "numCtrlOrig", + "numPgto", + "numIdentcBaixa", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "indPgtoIntegral", + "cnpjRaizPspPag", + "cnpjRec", + "dtHrPgto" + ] + }, + "InformePreliminarDePagamentoBoletoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoTransacao" + } + } + } + } + ] + }, + "InformePreliminarDePagamentoPixAutomaticoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "e2eId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação no arranjo de pagamentos Pix (E2EID)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "indPgtoIntegral": { + "type": "string", + "enum": [ + "0", + "1" + ], + "examples": [ + "1" + ], + "description": "Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + } + }, + "required": [ + "index", + "txId", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "indPgtoIntegral", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq" + ] + }, + "InformePreliminarDePagamentoPixAutomaticoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao" + } + } + } + } + ] + }, + "InformePreliminarDePagamentoPixDinamicoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "e2eId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação no arranjo de pagamentos Pix (E2EID)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "indPgtoIntegral": { + "type": "string", + "enum": [ + "0", + "1" + ], + "examples": [ + "1" + ], + "description": "Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + } + }, + "required": [ + "index", + "txId", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "indPgtoIntegral", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq" + ] + }, + "InformePreliminarDePagamentoPixDinamicoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixDinamicoTransacao" + } + } + } + } + ] + }, + "InformePreliminarDePagamentoPixEstaticoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "e2eId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação no arranjo de pagamentos Pix (E2EID)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + } + }, + "required": [ + "index", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "docFiscal", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq" + ] + }, + "InformePreliminarDePagamentoPixEstaticoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixEstaticoTransacao" + } + } + } + } + ] + }, + "InformePreliminarDePagamentoTedTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "numCtrlTED": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação TED gerado na liquidação (NumCtrlSTR ou NumCtrlPAG)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + } + }, + "required": [ + "index", + "numCtrlTED", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "docFiscal", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrLiq" + ] + }, + "InformePreliminarDePagamentoTedRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTedTransacao" + } + } + } + } + ] + }, + "InformePreliminarDePagamentoTefTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "numCtrlTEF": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador da transação TEF gerado pelo PSP." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + } + }, + "required": [ + "index", + "numCtrlTEF", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "docFiscal", + "cnpjRaizPspRecDir", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq" + ] + }, + "InformePreliminarDePagamentoTefRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTefTransacao" + } + } + } + } + ] + }, + "InformeDeBaixaExcetoPorPagamentoBoletoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "idDda": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador único do documento de cobrança no sistema DDA." + }, + "numCtrlOrig": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador utilizado pela Núclea para controle interno da transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "dtHrBaixa": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora da baixa da transação sem ocorrência de pagamento." + } + }, + "required": [ + "index", + "idDda", + "numCtrlOrig", + "cnpjRaizPspRecDir", + "dtHrBaixa" + ] + }, + "InformeDeBaixaExcetoPorPagamentoBoletoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoBoletoTransacao" + } + } + } + } + ] + }, + "InformeDeBaixaExcetoPorPagamentoPixAutomaticoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "dtHrBaixa": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora da baixa da transação sem ocorrência de pagamento." + } + }, + "required": [ + "index", + "txId", + "cnpjRaizPspRecDir", + "dtHrBaixa" + ] + }, + "InformeDeBaixaExcetoPorPagamentoPixAutomaticoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixAutomaticoTransacao" + } + } + } + } + ] + }, + "InformeDeBaixaExcetoPorPagamentoPixDinamicoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "dtHrBaixa": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora da baixa da transação sem ocorrência de pagamento." + } + }, + "required": [ + "index", + "txId", + "cnpjRaizPspRecDir", + "dtHrBaixa" + ] + }, + "InformeDeBaixaExcetoPorPagamentoPixDinamicoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequestSemCnpj" + }, + { + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeBaixaExcetoPorPagamentoPixDinamicoTransacao" + } + } + } + } + ] + }, + "CodMsgEnum": { + "type": "string", + "enum": [ + "RSUP101", + "RSUP102", + "RSUP103", + "RSUP104", + "RSUP201", + "RSUP202", + "RSUP203", + "RSUP204", + "RSUP601", + "RSUP602", + "RSUP603", + "RSUP604" + ], + "examples": [ + "RSUP101", + "RSUP203" + ], + "description": "Código identificador da mensagem, conforme o arranjo aplicável (ex.: RSUP101, RSUP102)." + }, + "RetornoSuperInteligenteBoletoTransacao": { + "type": "object", + "properties": { + "codMsg": { + "$ref": "#/components/schemas/CodMsgEnum" + }, + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "Número Sequencial Único da mensagem (Super Inteligente)", + "examples": [ + "1234567890123456789" + ] + }, + "dtHrDisp": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que a Plataforma Pública disponibilizou a mensagem do Retorno Super Inteligente para consumo." + }, + "idDda": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador único do documento de cobrança no sistema DDA." + }, + "numCtrlOrig": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador utilizado pela Núclea para controle interno da transação." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsCorr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS corrigido pela RFB, quando divergente do Documento Fiscal vinculado." + }, + "vlIbsCorr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS corrigido pelo Comitê Gestor do IBS, quando divergente do Documento Fiscal vinculado." + }, + "vlCbsAberto": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS não extinto do Documento Fiscal vinculado à transação, conforme retorno da RFB." + }, + "vlIbsAberto": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS não extinto do Documento Fiscal vinculado à transação, conforme retorno do Comitê Gestor do IBS." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + } + }, + "required": [ + "codMsg", + "nsuId", + "idDda", + "numCtrlOrig", + "vlInf", + "cnpjRaizPspRecDir", + "dtHrDisp" + ] + }, + "RetornoSuperInteligenteBoletoRequest": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligenteBoletoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + }, + "RetornoSuperInteligentePixAutomaticoTransacao": { + "type": "object", + "properties": { + "codMsg": { + "$ref": "#/components/schemas/CodMsgEnum" + }, + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "Número Sequencial Único da mensagem (Super Inteligente)", + "examples": [ + "1234567890123456789" + ] + }, + "dtHrDisp": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que a Plataforma Pública disponibilizou a mensagem do Retorno Super Inteligente para consumo." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsCorr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS corrigido pela RFB, quando divergente do Documento Fiscal vinculado." + }, + "vlIbsCorr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS corrigido pelo Comitê Gestor do IBS, quando divergente do Documento Fiscal vinculado." + }, + "vlCbsAberto": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS não extinto do Documento Fiscal vinculado à transação, conforme retorno da RFB." + }, + "vlIbsAberto": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS não extinto do Documento Fiscal vinculado à transação, conforme retorno do Comitê Gestor do IBS." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + } + }, + "required": [ + "codMsg", + "nsuId", + "txId", + "vlInf", + "cnpjRaizPspRecDir", + "cnpjRec", + "dtHrDisp" + ] + }, + "RetornoSuperInteligentePixAutomaticoRequest": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixAutomaticoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + }, + "RetornoSuperInteligentePixDinamicoTransacao": { + "type": "object", + "properties": { + "codMsg": { + "$ref": "#/components/schemas/CodMsgEnum" + }, + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "Número Sequencial Único da mensagem (Super Inteligente)", + "examples": [ + "1234567890123456789" + ] + }, + "dtHrDisp": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que a Plataforma Pública disponibilizou a mensagem do Retorno Super Inteligente para consumo." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "vlInf": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor da transação informado pelo originador ao preencher (emitir) a transação." + }, + "vlCbsCorr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS corrigido pela RFB, quando divergente do Documento Fiscal vinculado." + }, + "vlIbsCorr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS corrigido pelo Comitê Gestor do IBS, quando divergente do Documento Fiscal vinculado." + }, + "vlCbsAberto": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS não extinto do Documento Fiscal vinculado à transação, conforme retorno da RFB." + }, + "vlIbsAberto": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS não extinto do Documento Fiscal vinculado à transação, conforme retorno do Comitê Gestor do IBS." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "12345678" + ], + "description": "Raiz do CNPJ do PSP Recebedor Direto." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + } + }, + "required": [ + "codMsg", + "nsuId", + "txId", + "vlInf", + "cnpjRaizPspRecDir", + "cnpjRec", + "dtHrDisp" + ] + }, + "RetornoSuperInteligentePixDinamicoRequest": { + "type": "object", + "properties": { + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/RetornoSuperInteligentePixDinamicoTransacao" + } + } + }, + "required": [ + "transacoes" + ] + }, + "InfoSegregacaoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoSegRequest" + }, + { + "properties": { + "dadosInfoSeg": { + "$ref": "#/components/schemas/DadosInfoSegRequest" + } + }, + "required": [ + "dadosInfoSeg" + ] + } + ] + }, + "InformeDeSegregacaoBoletoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "idDda": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador único do documento de cobrança no sistema DDA." + }, + "numCtrlOrig": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "examples": [ + "123A512312312312FAS1" + ], + "description": "Identificador utilizado pela Núclea para controle interno da transação." + }, + "numPgto": { + "type": "integer", + "minimum": 1, + "examples": [ + 1 + ], + "maximum": 999999999, + "description": "Indica a sequência do pagamento no arranjo (ex.: quantidade de pagamentos do boleto)." + }, + "numIdentcBaixa": { + "type": "string", + "pattern": "^\\d{1,19}$", + "examples": [ + "1234567890123456789", + "9999999999999999999" + ], + "description": "Identificador específico do evento de baixa da transação." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "indPgtoIntegral": { + "type": "string", + "enum": [ + "0", + "1" + ], + "examples": [ + "1" + ], + "description": "Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "dtHrRepasse": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2)." + } + }, + "required": [ + "index", + "idDda", + "numCtrlOrig", + "numPgto", + "numIdentcBaixa", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "indPgtoIntegral", + "cnpjRaizPspPag", + "cnpjRec", + "dtHrPgto", + "dtHrLiq", + "dtHrRepasse" + ] + }, + "InformeDeSegregacaoBoletoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequest" + }, + { + "properties": { + "dadosLoteSeg": { + "$ref": "#/components/schemas/DadosLoteSegRequest" + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeSegregacaoBoletoTransacao" + } + } + }, + "required": [ + "dadosLoteSeg", + "transacoes" + ] + } + ] + }, + "InformeDeSegregacaoPixAutomaticoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "e2eId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação no arranjo de pagamentos Pix (E2EID)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "indPgtoIntegral": { + "type": "string", + "enum": [ + "0", + "1" + ], + "examples": [ + "1" + ], + "description": "Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "dtHrRepasse": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2)." + } + }, + "required": [ + "index", + "txId", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "indPgtoIntegral", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "dtHrRepasse" + ] + }, + "InformeDeSegregacaoPixAutomaticoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequest" + }, + { + "properties": { + "dadosLoteSeg": { + "$ref": "#/components/schemas/DadosLoteSegRequest" + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeSegregacaoPixAutomaticoTransacao" + } + } + }, + "required": [ + "dadosLoteSeg", + "transacoes" + ] + } + ] + }, + "InformeDeSegregacaoPixDinamicoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "txId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação Pix (TxID)." + }, + "e2eId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação no arranjo de pagamentos Pix (E2EID)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "indPgtoIntegral": { + "type": "string", + "enum": [ + "0", + "1" + ], + "examples": [ + "1" + ], + "description": "Indica se a transação foi integralmente paga, considerando todos os pagamentos até o momento. 1 = pagamento integral; 0 = não integral." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "dtHrRepasse": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2)." + } + }, + "required": [ + "index", + "txId", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "indPgtoIntegral", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "dtHrRepasse" + ] + }, + "InformeDeSegregacaoPixDinamicoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequest" + }, + { + "properties": { + "dadosLoteSeg": { + "$ref": "#/components/schemas/DadosLoteSegRequest" + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeSegregacaoPixDinamicoTransacao" + } + } + }, + "required": [ + "dadosLoteSeg", + "transacoes" + ] + } + ] + }, + "InformeDeSegregacaoPixEstaticoTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "e2eId": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "1234ABDOASD11231234ABDOASD112312345" + ], + "description": "Identificador único da transação no arranjo de pagamentos Pix (E2EID)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspRecInd": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Recebedor Indireto onde o Recebedor mantém a conta." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "dtHrRepasse": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2)." + } + }, + "required": [ + "index", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "docFiscal", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "dtHrRepasse" + ] + }, + "InformeDeSegregacaoPixEstaticoRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequest" + }, + { + "properties": { + "dadosLoteSeg": { + "$ref": "#/components/schemas/DadosLoteSegRequest" + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeSegregacaoPixEstaticoTransacao" + } + } + }, + "required": [ + "dadosLoteSeg", + "transacoes" + ] + } + ] + }, + "InformeDeSegregacaoTedTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "numCtrlTED": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "TED123456789" + ], + "description": "Identificador único da transação TED gerado na liquidação (NumCtrlSTR ou NumCtrlPAG)." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "examples": [ + "87654321" + ], + "description": "Raiz do CNPJ do PSP Pagador." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "dtHrRepasse": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2)." + } + }, + "required": [ + "index", + "numCtrlTED", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "docFiscal", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrLiq", + "dtHrRepasse" + ] + }, + "InformeDeSegregacaoTedRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequest" + }, + { + "properties": { + "dadosLoteSeg": { + "$ref": "#/components/schemas/DadosLoteSegRequest" + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeSegregacaoTedTransacao" + } + } + }, + "required": [ + "dadosLoteSeg", + "transacoes" + ] + } + ] + }, + "InformeDeSegregacaoTefTransacao": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1." + }, + "numCtrlTEF": { + "type": "string", + "minLength": 1, + "maxLength": 35, + "examples": [ + "TEF123456789" + ], + "description": "Identificador da transação TEF gerado pelo PSP." + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ], + "description": "Identificador do Documento Fiscal vinculado à transação." + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "examples": [ + "11444777000142" + ], + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos)." + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "examples": [ + "11444777000142" + ], + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos." + }, + "dtHrPgto": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "dtHrRepasse": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-03-20T10:33:46-03:00" + ], + "description": "Data e hora-limite para o envio do Repasse Financeiro de CBS à RFB e de IBS ao Comitê Gestor. Corresponde a 12:00 (meio-dia) de D+N, conforme o Manual de Tempos (seção 6.2)." + } + }, + "required": [ + "index", + "numCtrlTEF", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "docFiscal", + "cnpjRec", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "dtHrRepasse" + ] + }, + "InformeDeSegregacaoTefRequest": { + "allOf": [ + { + "$ref": "#/components/schemas/InfoRequest" + }, + { + "properties": { + "dadosLoteSeg": { + "$ref": "#/components/schemas/DadosLoteSegRequest" + }, + "transacoes": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "items": { + "$ref": "#/components/schemas/InformeDeSegregacaoTefTransacao" + } + } + }, + "required": [ + "dadosLoteSeg", + "transacoes" + ] + } + ] + }, + "MocOcorrencia": { + "description": "Ocorrência do MOC. O discriminador principal e arrj (arranjo): cada arranjo exige o(s) identificador(es) de transacao correspondente(s).", + "oneOf": [ + { + "$ref": "#/components/schemas/MocOcorrenciaBoleto" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaPixEstatico" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaPixDinamico" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaPixAutomatico" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaTed" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaTef" + } + ], + "discriminator": { + "propertyName": "arrj", + "mapping": { + "BOL": "#/components/schemas/MocOcorrenciaBoleto", + "PXE": "#/components/schemas/MocOcorrenciaPixEstatico", + "PXD": "#/components/schemas/MocOcorrenciaPixDinamico", + "PXA": "#/components/schemas/MocOcorrenciaPixAutomatico", + "TED": "#/components/schemas/MocOcorrenciaTed", + "TEF": "#/components/schemas/MocOcorrenciaTef" + } + } + }, + "MocOcorrenciaRetorno": { + "description": "Retorno de ocorrência do MOC (resposta da RFB/CGIBS), na consulta paginada. O discriminador é arrj: cada arranjo exige o(s) identificador(es) de transação correspondente(s), conforme a matriz 3.9.4.1.", + "oneOf": [ + { + "$ref": "#/components/schemas/MocOcorrenciaRetornoBoleto" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaRetornoPixAutomatico" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaRetornoPixDinamico" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaRetornoPixEstatico" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaRetornoTed" + }, + { + "$ref": "#/components/schemas/MocOcorrenciaRetornoTef" + } + ], + "discriminator": { + "propertyName": "arrj", + "mapping": { + "BOL": "#/components/schemas/MocOcorrenciaRetornoBoleto", + "PXA": "#/components/schemas/MocOcorrenciaRetornoPixAutomatico", + "PXD": "#/components/schemas/MocOcorrenciaRetornoPixDinamico", + "PXE": "#/components/schemas/MocOcorrenciaRetornoPixEstatico", + "TED": "#/components/schemas/MocOcorrenciaRetornoTed", + "TEF": "#/components/schemas/MocOcorrenciaRetornoTef" + } + } + }, + "MocOcorrenciasConsultaResponse": { + "type": "object", + "properties": { + "ocorrencias": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "description": "Página de ocorrências com resposta. Máximo de 1.000 itens por página.", + "items": { + "$ref": "#/components/schemas/MocOcorrenciaRetorno" + } + } + }, + "required": [ + "ocorrencias" + ] + }, + "MocOcorrenciaBoleto": { + "type": "object", + "description": "Ocorrência do arranjo Boleto (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos.", + "additionalProperties": false, + "properties": { + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "BOL", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "BOL" + ] + }, + "idDda": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoTransacao/properties/idDda" + }, + "numIdentcBaixa": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoTransacao/properties/numIdentcBaixa" + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "description": "Identificador do Documento Fiscal vinculado à transação.", + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ] + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Recebedor Direto.", + "examples": [ + "12345678" + ] + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Pagador.", + "examples": [ + "12345678" + ] + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos).", + "examples": [ + "11444777000142" + ] + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "dtHrPgto": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T09:00:00-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T10:00:00-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "index": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1.", + "examples": [ + 1 + ] + }, + "codMotOcor": { + "$ref": "#/components/schemas/CodMotOcorEnum" + }, + "descOcor": { + "type": "string", + "maxLength": 100, + "description": "Texto livre complementar ao motivo da ocorrência.", + "examples": [ + "Transação retida para análise de segurança" + ] + }, + "orgRespProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "description": "Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "RFB" + ] + }, + "numProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "description": "Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "PROC2026000123" + ] + }, + "vlCbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS solicitado para estorno (Solicitação de Estorno)." + }, + "vlIbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS solicitado para estorno (Solicitação de Estorno)." + }, + "cnpjCpfDest": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + } + }, + "required": [ + "arrj", + "idDda", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjPagOrig", + "dtHrPgto", + "dtHrLiq", + "idOcor", + "index", + "cnpjCpfDest" + ] + }, + "MocOcorrenciaPixEstatico": { + "type": "object", + "description": "Ocorrência do arranjo Pix Estático (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos.", + "additionalProperties": false, + "properties": { + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "PXE", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "PXE" + ] + }, + "e2eId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/e2eId" + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "description": "Identificador do Documento Fiscal vinculado à transação.", + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ] + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Recebedor Direto.", + "examples": [ + "12345678" + ] + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Pagador.", + "examples": [ + "12345678" + ] + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos).", + "examples": [ + "11444777000142" + ] + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "dtHrPgto": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T09:00:00-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T10:00:00-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "index": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1.", + "examples": [ + 1 + ] + }, + "codMotOcor": { + "$ref": "#/components/schemas/CodMotOcorEnum" + }, + "descOcor": { + "type": "string", + "maxLength": 100, + "description": "Texto livre complementar ao motivo da ocorrência.", + "examples": [ + "Transação retida para análise de segurança" + ] + }, + "orgRespProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "description": "Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "RFB" + ] + }, + "numProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "description": "Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "PROC2026000123" + ] + }, + "vlCbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS solicitado para estorno (Solicitação de Estorno)." + }, + "vlIbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS solicitado para estorno (Solicitação de Estorno)." + }, + "cnpjCpfDest": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + } + }, + "required": [ + "arrj", + "e2eId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjPagOrig", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "idOcor", + "index", + "cnpjCpfDest" + ] + }, + "MocOcorrenciaPixDinamico": { + "type": "object", + "description": "Ocorrência do arranjo Pix Dinâmico (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos.", + "additionalProperties": false, + "properties": { + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "PXD", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "PXD" + ] + }, + "txId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/txId" + }, + "e2eId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/e2eId" + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "description": "Identificador do Documento Fiscal vinculado à transação.", + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ] + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Recebedor Direto.", + "examples": [ + "12345678" + ] + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Pagador.", + "examples": [ + "12345678" + ] + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos).", + "examples": [ + "11444777000142" + ] + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "dtHrPgto": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T09:00:00-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T10:00:00-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "index": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1.", + "examples": [ + 1 + ] + }, + "codMotOcor": { + "$ref": "#/components/schemas/CodMotOcorEnum" + }, + "descOcor": { + "type": "string", + "maxLength": 100, + "description": "Texto livre complementar ao motivo da ocorrência.", + "examples": [ + "Transação retida para análise de segurança" + ] + }, + "orgRespProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "description": "Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "RFB" + ] + }, + "numProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "description": "Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "PROC2026000123" + ] + }, + "vlCbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS solicitado para estorno (Solicitação de Estorno)." + }, + "vlIbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS solicitado para estorno (Solicitação de Estorno)." + }, + "cnpjCpfDest": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + } + }, + "required": [ + "arrj", + "txId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjPagOrig", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "idOcor", + "index", + "cnpjCpfDest" + ] + }, + "MocOcorrenciaPixAutomatico": { + "type": "object", + "description": "Ocorrência do arranjo Pix Automático (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos.", + "additionalProperties": false, + "properties": { + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "PXA", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "PXA" + ] + }, + "txId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/txId" + }, + "e2eId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/e2eId" + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "description": "Identificador do Documento Fiscal vinculado à transação.", + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ] + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Recebedor Direto.", + "examples": [ + "12345678" + ] + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Pagador.", + "examples": [ + "12345678" + ] + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos).", + "examples": [ + "11444777000142" + ] + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "dtHrPgto": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T09:00:00-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T10:00:00-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "index": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1.", + "examples": [ + 1 + ] + }, + "codMotOcor": { + "$ref": "#/components/schemas/CodMotOcorEnum" + }, + "descOcor": { + "type": "string", + "maxLength": 100, + "description": "Texto livre complementar ao motivo da ocorrência.", + "examples": [ + "Transação retida para análise de segurança" + ] + }, + "orgRespProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "description": "Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "RFB" + ] + }, + "numProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "description": "Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "PROC2026000123" + ] + }, + "vlCbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS solicitado para estorno (Solicitação de Estorno)." + }, + "vlIbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS solicitado para estorno (Solicitação de Estorno)." + }, + "cnpjCpfDest": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + } + }, + "required": [ + "arrj", + "txId", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjPagOrig", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "idOcor", + "index", + "cnpjCpfDest" + ] + }, + "MocOcorrenciaTed": { + "type": "object", + "description": "Ocorrência do arranjo TED (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos.", + "additionalProperties": false, + "properties": { + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "TED", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "TED" + ] + }, + "numCtrlTED": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTedTransacao/properties/numCtrlTED" + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "description": "Identificador do Documento Fiscal vinculado à transação.", + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ] + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Recebedor Direto.", + "examples": [ + "12345678" + ] + }, + "cnpjRaizPspPag": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Pagador.", + "examples": [ + "12345678" + ] + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos).", + "examples": [ + "11444777000142" + ] + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "dtHrLiq": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T10:00:00-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "index": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1.", + "examples": [ + 1 + ] + }, + "codMotOcor": { + "$ref": "#/components/schemas/CodMotOcorEnum" + }, + "descOcor": { + "type": "string", + "maxLength": 100, + "description": "Texto livre complementar ao motivo da ocorrência.", + "examples": [ + "Transação retida para análise de segurança" + ] + }, + "orgRespProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "description": "Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "RFB" + ] + }, + "numProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "description": "Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "PROC2026000123" + ] + }, + "vlCbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS solicitado para estorno (Solicitação de Estorno)." + }, + "vlIbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS solicitado para estorno (Solicitação de Estorno)." + }, + "cnpjCpfDest": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + } + }, + "required": [ + "arrj", + "numCtrlTED", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "cnpjRaizPspPag", + "cnpjRec", + "cnpjPagOrig", + "cnpjCpfPagEfet", + "dtHrLiq", + "idOcor", + "index", + "cnpjCpfDest" + ] + }, + "MocOcorrenciaTef": { + "type": "object", + "description": "Ocorrência do arranjo TEF (estrutura achatada). Campos válidos e obrigatoriedade conforme o Manual; additionalProperties=false impede campos não previstos.", + "additionalProperties": false, + "properties": { + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "TEF", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "TEF" + ] + }, + "numCtrlTEF": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTefTransacao/properties/numCtrlTEF" + }, + "vlPago": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor efetivamente pago na transação." + }, + "vlCbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "vlIbsSegr": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS efetivamente segregado pelo PSP Recebedor Direto na transação." + }, + "docFiscal": { + "type": "string", + "minLength": 1, + "maxLength": 50, + "description": "Identificador do Documento Fiscal vinculado à transação.", + "examples": [ + "1234567890123456789B123A5678901234567891123412345" + ] + }, + "cnpjRaizPspRecDir": { + "type": "string", + "minLength": 8, + "maxLength": 8, + "pattern": "^[A-Za-z0-9]{8}$", + "description": "Raiz do CNPJ do PSP Recebedor Direto.", + "examples": [ + "12345678" + ] + }, + "cnpjRec": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificação do Recebedor (que recebe o valor líquido da transação). Em caso de cessão de recebíveis, preencher com o Recebedor original (e não com o novo detentor de direitos).", + "examples": [ + "11444777000142" + ] + }, + "cnpjPagOrig": { + "type": "string", + "minLength": 14, + "maxLength": 14, + "pattern": "^[A-Za-z0-9]{14}$", + "description": "Identificador do Pagador informado na emissão da transação. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "cnpjCpfPagEfet": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador do Pagador que efetivamente realizou o pagamento. CPF: 11 dígitos. CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + }, + "dtHrPgto": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T09:00:00-03:00" + ], + "description": "Data e hora em que o pagamento foi realizado pelo Pagador." + }, + "dtHrLiq": { + "type": "string", + "minLength": 25, + "maxLength": 25, + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T10:00:00-03:00" + ], + "description": "Data e hora em que ocorreu a efetiva Liquidação Interbancária ou Intrabancária no arranjo." + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "index": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "description": "Número sequencial do item na lista enviada, iniciando em 1.", + "examples": [ + 1 + ] + }, + "codMotOcor": { + "$ref": "#/components/schemas/CodMotOcorEnum" + }, + "descOcor": { + "type": "string", + "maxLength": 100, + "description": "Texto livre complementar ao motivo da ocorrência.", + "examples": [ + "Transação retida para análise de segurança" + ] + }, + "orgRespProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 8, + "description": "Órgão responsável pelo processo administrativo associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "RFB" + ] + }, + "numProcAdm": { + "type": "string", + "minLength": 1, + "maxLength": 20, + "description": "Número do ofício, processo administrativo ou ordem judicial associado à ocorrência (Notificação de Transação em Análise).", + "examples": [ + "PROC2026000123" + ] + }, + "vlCbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS solicitado para estorno (Solicitação de Estorno)." + }, + "vlIbsEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de IBS solicitado para estorno (Solicitação de Estorno)." + }, + "cnpjCpfDest": { + "type": "string", + "minLength": 11, + "maxLength": 14, + "pattern": "^(\\d{11}|[A-Za-z0-9]{14})$", + "description": "Identificador (CNPJ/CPF) da parte prejudicada, que receberá de volta o valor do tributo estornado. CPF: 11 dígitos; CNPJ: 14 caracteres alfanuméricos.", + "examples": [ + "11444777000142" + ] + } + }, + "required": [ + "arrj", + "numCtrlTEF", + "vlPago", + "vlCbsSegr", + "vlIbsSegr", + "cnpjRaizPspRecDir", + "cnpjRec", + "cnpjPagOrig", + "cnpjCpfPagEfet", + "dtHrPgto", + "dtHrLiq", + "idOcor", + "index", + "cnpjCpfDest" + ] + }, + "MocOcorrenciaSol": { + "allOf": [ + { + "$ref": "#/components/schemas/MocOcorrencia" + }, + { + "type": "object", + "required": [ + "codMotOcor", + "vlCbsEst", + "vlIbsEst" + ], + "not": { + "anyOf": [ + { + "required": [ + "orgRespProcAdm" + ] + }, + { + "required": [ + "numProcAdm" + ] + } + ] + } + } + ] + }, + "MocOcorrenciaNot": { + "allOf": [ + { + "$ref": "#/components/schemas/MocOcorrencia" + }, + { + "type": "object", + "not": { + "anyOf": [ + { + "required": [ + "codMotOcor" + ] + }, + { + "required": [ + "vlCbsEst" + ] + }, + { + "required": [ + "vlIbsEst" + ] + } + ] + } + } + ] + }, + "MecanismoDeOcorrenciasSolRequest": { + "type": "object", + "properties": { + "infRequisicao": { + "type": "object", + "properties": { + "dtHrMsg": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública." + } + }, + "required": [ + "dtHrMsg" + ] + }, + "ocorrencias": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "description": "Lista de ocorrências do MOC. Máximo de 1.000 por requisição.", + "items": { + "$ref": "#/components/schemas/MocOcorrenciaSol" + } + } + }, + "required": [ + "infRequisicao", + "ocorrencias" + ], + "description": "Requisicao MOC contendo exclusivamente ocorrencias de solicitacao." + }, + "MecanismoDeOcorrenciasNotRequest": { + "type": "object", + "properties": { + "infRequisicao": { + "type": "object", + "properties": { + "dtHrMsg": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora da mensagem que está sendo transmitida entre PSP/Núclea e a Plataforma Pública." + } + }, + "required": [ + "dtHrMsg" + ] + }, + "ocorrencias": { + "type": "array", + "minItems": 1, + "maxItems": 1000, + "description": "Lista de ocorrências do MOC. Máximo de 1.000 por requisição.", + "items": { + "$ref": "#/components/schemas/MocOcorrenciaNot" + } + } + }, + "required": [ + "infRequisicao", + "ocorrencias" + ], + "description": "Requisicao MOC contendo exclusivamente ocorrencias de notificacao." + }, + "CodParecerEnum": { + "type": "string", + "enum": [ + "01", + "02", + "03" + ], + "examples": [ + "01", + "02", + "03" + ], + "description": "Código do parecer sobre a solicitação de estorno via MOC associada à transação. 01= Aceita, 02 = Aceita Parcialmente, 03 = Não aceita", + "minLength": 2, + "maxLength": 2 + }, + "CodMotOcorEnum": { + "type": "string", + "minLength": 2, + "maxLength": 2, + "enum": [ + "01", + "02" + ], + "description": "Código do motivo da ocorrência (Solicitação de Estorno): 01 = Incidente de segurança; 02 = Falha operacional (Atores Financeiros).", + "examples": [ + "01", + "02" + ] + }, + "OrgRespResEnum": { + "type": "string", + "minLength": 3, + "maxLength": 5, + "enum": [ + "RFB", + "CGIBS" + ], + "description": "Órgão que respondeu à solicitação de estorno: RFB (Receita Federal do Brasil) ou CGIBS (Comitê Gestor do IBS). Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "RFB", + "CGIBS" + ] + }, + "TpTribEnum": { + "type": "string", + "enum": [ + "CBS", + "IBS" + ], + "examples": [ + "CBS", + "IBS" + ], + "description": "Tributo a que se refere o parecer: CBS (Contribuição sobre Bens e Serviços) ou IBS (Imposto sobre Bens e Serviços). Presente no Retorno da Solicitação de Estorno.", + "minLength": 3, + "maxLength": 3 + }, + "MocOcorrenciaRetornoBoleto": { + "type": "object", + "description": "Retorno de ocorrência do MOC — arranjo Boleto (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02.", + "additionalProperties": false, + "properties": { + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC.", + "examples": [ + "1234567890123456789" + ] + }, + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "BOL", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "BOL" + ] + }, + "idDda": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoTransacao/properties/idDda" + }, + "numIdentcBaixa": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoBoletoTransacao/properties/numIdentcBaixa" + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "dtHrEnvOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora de envio da ocorrência pelo responsável da abertura do MOC." + }, + "dtHrRespOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-24T15:00:00-03:00" + ], + "description": "Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno." + }, + "orgRespRes": { + "$ref": "#/components/schemas/OrgRespResEnum" + }, + "codParecer": { + "$ref": "#/components/schemas/CodParecerEnum" + }, + "tpTrib": { + "$ref": "#/components/schemas/TpTribEnum" + }, + "vlTribEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno." + }, + "descParecer": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Ocorrência respondida pelo órgão competente" + ] + }, + "orientSolic": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Consultar retorno da ocorrência para acompanhamento" + ] + }, + "idAprovEst": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "description": "Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente).", + "examples": [ + "APV20260623000100001" + ] + } + }, + "required": [ + "nsuId", + "arrj", + "idDda", + "idOcor", + "dtHrEnvOcor", + "dtHrRespOcor", + "orgRespRes", + "codParecer", + "tpTrib", + "vlTribEst" + ], + "allOf": [ + { + "if": { + "properties": { + "codParecer": { + "enum": [ + "01", + "02" + ] + } + }, + "required": [ + "codParecer" + ] + }, + "then": { + "required": [ + "idAprovEst" + ] + }, + "else": { + "not": { + "required": [ + "idAprovEst" + ] + } + } + } + ] + }, + "MocOcorrenciaRetornoPixAutomatico": { + "type": "object", + "description": "Retorno de ocorrência do MOC — arranjo Pix Automático (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02.", + "additionalProperties": false, + "properties": { + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC.", + "examples": [ + "1234567890123456789" + ] + }, + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "PXA", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "PXA" + ] + }, + "txId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/txId" + }, + "e2eId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/e2eId" + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "dtHrEnvOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora de envio da ocorrência pelo responsável da abertura do MOC." + }, + "dtHrRespOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-24T15:00:00-03:00" + ], + "description": "Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno." + }, + "orgRespRes": { + "$ref": "#/components/schemas/OrgRespResEnum" + }, + "codParecer": { + "$ref": "#/components/schemas/CodParecerEnum" + }, + "tpTrib": { + "$ref": "#/components/schemas/TpTribEnum" + }, + "vlTribEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno." + }, + "descParecer": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Ocorrência respondida pelo órgão competente" + ] + }, + "orientSolic": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Consultar retorno da ocorrência para acompanhamento" + ] + }, + "idAprovEst": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "description": "Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente).", + "examples": [ + "APV20260623000100001" + ] + } + }, + "required": [ + "nsuId", + "arrj", + "txId", + "idOcor", + "dtHrEnvOcor", + "dtHrRespOcor", + "orgRespRes", + "codParecer", + "tpTrib", + "vlTribEst" + ], + "allOf": [ + { + "if": { + "properties": { + "codParecer": { + "enum": [ + "01", + "02" + ] + } + }, + "required": [ + "codParecer" + ] + }, + "then": { + "required": [ + "idAprovEst" + ] + }, + "else": { + "not": { + "required": [ + "idAprovEst" + ] + } + } + } + ] + }, + "MocOcorrenciaRetornoPixDinamico": { + "type": "object", + "description": "Retorno de ocorrência do MOC — arranjo Pix Dinâmico (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02.", + "additionalProperties": false, + "properties": { + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC.", + "examples": [ + "1234567890123456789" + ] + }, + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "PXD", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "PXD" + ] + }, + "txId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/txId" + }, + "e2eId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/e2eId" + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "dtHrEnvOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora de envio da ocorrência pelo responsável da abertura do MOC." + }, + "dtHrRespOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-24T15:00:00-03:00" + ], + "description": "Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno." + }, + "orgRespRes": { + "$ref": "#/components/schemas/OrgRespResEnum" + }, + "codParecer": { + "$ref": "#/components/schemas/CodParecerEnum" + }, + "tpTrib": { + "$ref": "#/components/schemas/TpTribEnum" + }, + "vlTribEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno." + }, + "descParecer": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Ocorrência respondida pelo órgão competente" + ] + }, + "orientSolic": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Consultar retorno da ocorrência para acompanhamento" + ] + }, + "idAprovEst": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "description": "Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente).", + "examples": [ + "APV20260623000100001" + ] + } + }, + "required": [ + "nsuId", + "arrj", + "txId", + "idOcor", + "dtHrEnvOcor", + "dtHrRespOcor", + "orgRespRes", + "codParecer", + "tpTrib", + "vlTribEst" + ], + "allOf": [ + { + "if": { + "properties": { + "codParecer": { + "enum": [ + "01", + "02" + ] + } + }, + "required": [ + "codParecer" + ] + }, + "then": { + "required": [ + "idAprovEst" + ] + }, + "else": { + "not": { + "required": [ + "idAprovEst" + ] + } + } + } + ] + }, + "MocOcorrenciaRetornoPixEstatico": { + "type": "object", + "description": "Retorno de ocorrência do MOC — arranjo Pix Estático (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02.", + "additionalProperties": false, + "properties": { + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC.", + "examples": [ + "1234567890123456789" + ] + }, + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "PXE", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "PXE" + ] + }, + "e2eId": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoPixAutomaticoTransacao/properties/e2eId" + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "dtHrEnvOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora de envio da ocorrência pelo responsável da abertura do MOC." + }, + "dtHrRespOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-24T15:00:00-03:00" + ], + "description": "Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno." + }, + "orgRespRes": { + "$ref": "#/components/schemas/OrgRespResEnum" + }, + "codParecer": { + "$ref": "#/components/schemas/CodParecerEnum" + }, + "tpTrib": { + "$ref": "#/components/schemas/TpTribEnum" + }, + "vlTribEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno." + }, + "descParecer": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Ocorrência respondida pelo órgão competente" + ] + }, + "orientSolic": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Consultar retorno da ocorrência para acompanhamento" + ] + }, + "idAprovEst": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "description": "Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente).", + "examples": [ + "APV20260623000100001" + ] + } + }, + "required": [ + "nsuId", + "arrj", + "e2eId", + "idOcor", + "dtHrEnvOcor", + "dtHrRespOcor", + "orgRespRes", + "codParecer", + "tpTrib", + "vlTribEst" + ], + "allOf": [ + { + "if": { + "properties": { + "codParecer": { + "enum": [ + "01", + "02" + ] + } + }, + "required": [ + "codParecer" + ] + }, + "then": { + "required": [ + "idAprovEst" + ] + }, + "else": { + "not": { + "required": [ + "idAprovEst" + ] + } + } + } + ] + }, + "MocOcorrenciaRetornoTed": { + "type": "object", + "description": "Retorno de ocorrência do MOC — arranjo TED (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02.", + "additionalProperties": false, + "properties": { + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC.", + "examples": [ + "1234567890123456789" + ] + }, + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "TED", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "TED" + ] + }, + "numCtrlTED": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTedTransacao/properties/numCtrlTED" + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "dtHrEnvOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora de envio da ocorrência pelo responsável da abertura do MOC." + }, + "dtHrRespOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-24T15:00:00-03:00" + ], + "description": "Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno." + }, + "orgRespRes": { + "$ref": "#/components/schemas/OrgRespResEnum" + }, + "codParecer": { + "$ref": "#/components/schemas/CodParecerEnum" + }, + "tpTrib": { + "$ref": "#/components/schemas/TpTribEnum" + }, + "vlTribEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno." + }, + "descParecer": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Ocorrência respondida pelo órgão competente" + ] + }, + "orientSolic": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Consultar retorno da ocorrência para acompanhamento" + ] + }, + "idAprovEst": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "description": "Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente).", + "examples": [ + "APV20260623000100001" + ] + } + }, + "required": [ + "nsuId", + "arrj", + "numCtrlTED", + "idOcor", + "dtHrEnvOcor", + "dtHrRespOcor", + "orgRespRes", + "codParecer", + "tpTrib", + "vlTribEst" + ], + "allOf": [ + { + "if": { + "properties": { + "codParecer": { + "enum": [ + "01", + "02" + ] + } + }, + "required": [ + "codParecer" + ] + }, + "then": { + "required": [ + "idAprovEst" + ] + }, + "else": { + "not": { + "required": [ + "idAprovEst" + ] + } + } + } + ] + }, + "MocOcorrenciaRetornoTef": { + "type": "object", + "description": "Retorno de ocorrência do MOC — arranjo TEF (estrutura achatada). Campos e obrigatoriedade conforme a matriz 3.9.4.1; additionalProperties=false impede campos não previstos. idAprovEst é exigido apenas quando codParecer é 01 ou 02.", + "additionalProperties": false, + "properties": { + "nsuId": { + "type": "string", + "pattern": "^\\d{1,19}$", + "description": "NSU da ocorrência retornada, utilizado na paginação dos resultados do MOC.", + "examples": [ + "1234567890123456789" + ] + }, + "arrj": { + "type": "string", + "minLength": 3, + "maxLength": 3, + "const": "TEF", + "description": "Arranjo financeiro ao qual a mensagem está associada (Pix Automático, Pix Dinâmico, Pix Estático, Boleto, TED, TEF). O campo prevê os seguintes valores: PXA, PXD, PXE, BOL, TED ou TEF.", + "examples": [ + "TEF" + ] + }, + "numCtrlTEF": { + "$ref": "#/components/schemas/InformePreliminarDePagamentoTefTransacao/properties/numCtrlTEF" + }, + "idOcor": { + "type": "string", + "minLength": 29, + "maxLength": 29, + "pattern": "^(SOL|NOT)[A-Za-z0-9]{8}(PXA|PXD|PXE|BOL|TED|TEF)\\d{15}$", + "description": "Identificador único da ocorrência do MOC. Formato: prefixo do tipo (SOL ou NOT) (3) + raiz do CNPJ do PSP Recebedor Direto (8) + arranjo (PXA, PXD, PXE, BOL, TED, TEF) (3) + data da solicitação (AAAAMMDD) (8) + 7 caracteres para o contador. Gerado pelo PSP Recebedor Direto.", + "examples": [ + "SOL12345678PXD202606230000001" + ] + }, + "dtHrEnvOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-23T12:00:00-03:00" + ], + "description": "Data e hora de envio da ocorrência pelo responsável da abertura do MOC." + }, + "dtHrRespOcor": { + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-03:00$", + "examples": [ + "2026-06-24T15:00:00-03:00" + ], + "description": "Data e hora da resposta da ocorrência pela RFB/CGIBS. Presente apenas no Retorno da Solicitação de Estorno." + }, + "orgRespRes": { + "$ref": "#/components/schemas/OrgRespResEnum" + }, + "codParecer": { + "$ref": "#/components/schemas/CodParecerEnum" + }, + "tpTrib": { + "$ref": "#/components/schemas/TpTribEnum" + }, + "vlTribEst": { + "type": "number", + "multipleOf": 0.01, + "minimum": 0, + "maximum": 999999999999999999.99, + "examples": [ + 10.02 + ], + "description": "Valor de CBS ou IBS aprovado para estorno, conforme tpTrib. Presente no Retorno da Solicitação de Estorno." + }, + "descParecer": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Descrição complementar do parecer da RFB/CGIBS. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Ocorrência respondida pelo órgão competente" + ] + }, + "orientSolic": { + "type": "string", + "minLength": 1, + "maxLength": 500, + "description": "Orientação à parte solicitante quanto ao acompanhamento da ocorrência. Presente no Retorno da Solicitação de Estorno.", + "examples": [ + "Consultar retorno da ocorrência para acompanhamento" + ] + }, + "idAprovEst": { + "type": "string", + "minLength": 20, + "maxLength": 20, + "description": "Identificador de aprovação do estorno via MOC, emitido pela RFB ou CGIBS. Corresponde ao número de controle enviado na mensagem de estorno no SPB, conforme o tributo: NumCtrlTESOr para CBS e NumCtrlSTROr para IBS. Preenchimento condicional: retornado somente quando codParecer for 01 (Aceita) ou 02 (Aceita Parcialmente).", + "examples": [ + "APV20260623000100001" + ] + } + }, + "required": [ + "nsuId", + "arrj", + "numCtrlTEF", + "idOcor", + "dtHrEnvOcor", + "dtHrRespOcor", + "orgRespRes", + "codParecer", + "tpTrib", + "vlTribEst" + ], + "allOf": [ + { + "if": { + "properties": { + "codParecer": { + "enum": [ + "01", + "02" + ] + } + }, + "required": [ + "codParecer" + ] + }, + "then": { + "required": [ + "idAprovEst" + ] + }, + "else": { + "not": { + "required": [ + "idAprovEst" + ] + } + } + } + ] + } + }, + "responses": { + "PPResponseOk": { + "description": "PP Recebido", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Sucesso" + ] + }, + "status": { + "type": "integer", + "examples": [ + 201 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Solicitação processada com sucesso" + ] + }, + "numValidos": { + "type": "integer", + "examples": [ + 997 + ] + }, + "numErros": { + "type": "integer", + "examples": [ + 3 + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 10 + ], + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string", + "examples": [ + "field1" + ] + }, + "message": { + "type": "string", + "examples": [ + "Campo obrigatório" + ] + } + } + } + }, + "resourceId": { + "type": "string", + "examples": [ + "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + ] + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseNoContentStreamStart": { + "description": "Stream iniciado com sucesso. Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação. No fluxo principal do Retorno Super Inteligente, o 204 (sem corpo) retorna o token de continuação no cabeçalho 'proximoToken' e indica ausência de mensagens no momento: o consumidor deve prosseguir consultando com o proximoToken retornado (não reutilizar o token enviado na requisição).", + "headers": { + "streamId": { + "$ref": "#/components/headers/StreamIdHeader" + }, + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseNoContentRetroativoStart": { + "description": "A consulta não retornou resultados Na Consulta Retroativa, o 204 (sem corpo) com o último token no header 'proximoToken' indica fim do stream — o consumidor deve encerrar com DELETE.", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseNoContentRetroativoToken": { + "description": "Fim do resultado da consulta 204 (sem corpo): na Consulta Retroativa, o retorno do último token no header 'proximoToken' indica fim do stream, exigindo DELETE para encerrar.", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseNoContentStreamToken": { + "description": "Nenhuma mensagem disponível dentro da janela de espera do long polling. Não representa falha da operação. No fluxo principal do Retorno Super Inteligente, o 204 (sem corpo) retorna o token de continuação no cabeçalho 'proximoToken' e indica ausência de mensagens no momento: o consumidor deve prosseguir consultando com o proximoToken retornado (não reutilizar o token enviado na requisição).", + "headers": { + "proximoToken": { + "$ref": "#/components/headers/ProximoTokenHeader" + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseGoneStream": { + "description": "Stream encerrada. A stream foi encerrada por um DELETE ou automaticamente em função da política de sanitização de streams inativas. O PSP deverá considerar a stream definitivamente extinta e iniciar uma nova stream por meio do endpoint /start. Eventuais mensagens não processadas poderão ser recuperadas por meio da Consulta Retroativa Super Inteligente.", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Gone" + ] + }, + "status": { + "type": "integer", + "examples": [ + 410 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Stream encerrada." + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "token" + ] + }, + "message": { + "type": "string", + "examples": [ + "token pertence a uma stream encerrada" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseGoneRetroativoStream": { + "description": "Stream encerrada. A stream foi encerrada por um DELETE ou automaticamente em função da política de sanitização de streams inativas. O PSP deverá considerar a stream definitivamente extinta e, se necessário, iniciar uma nova consulta por meio do endpoint /start.", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Gone" + ] + }, + "status": { + "type": "integer", + "examples": [ + 410 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Stream encerrada." + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "token" + ] + }, + "message": { + "type": "string", + "examples": [ + "token pertence a uma stream encerrada" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseBadRequest": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Bad Request" + ] + }, + "status": { + "type": "integer", + "examples": [ + 400 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Todas as transações do informe estão inválidas" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string", + "examples": [ + "field1" + ] + }, + "message": { + "type": "string", + "examples": [ + "field1: propriedade obrigatória 'field1' não encontrada" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseBadRequestSegregacao": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Bad Request" + ] + }, + "status": { + "type": "integer", + "examples": [ + 400 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Dados do informe de segregacao invalidos" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "idInfSegr" + ] + }, + "message": { + "type": "string", + "examples": [ + "idInfSegr: formato invalido" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseBadRequestConsultaStream": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Bad Request" + ] + }, + "status": { + "type": "integer", + "examples": [ + 400 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Parametros invalidos" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "token" + ] + }, + "message": { + "type": "string", + "examples": [ + "campoX: parametro obrigatorio nao informado" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseUnprocessableEntityConsultaStream": { + "description": "Unprocessable Entity", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Unprocessable Entity" + ] + }, + "status": { + "type": "integer", + "examples": [ + 422 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Regras de negocio violadas para consulta de stream" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "streamId", + "nsuInicial" + ] + }, + "message": { + "type": "string", + "examples": [ + "streamId inexistente", + "nsuInicial deve ser menor ou igual a nsuFinal" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseForbidden": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "example": { + "title": "Forbidden", + "status": 403, + "detail": "Acesso negado" + }, + "properties": { + "title": { + "type": "string", + "examples": [ + "Forbidden" + ] + }, + "status": { + "type": "integer", + "examples": [ + 403 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Todas as transações do informe estão inválidas" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseError": { + "description": "Internal Server Error", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "example": { + "title": "Internal Server Error", + "status": 500, + "detail": "Erro interno inesperado" + }, + "properties": { + "title": { + "type": "string", + "examples": [ + "Internal Server Error" + ] + }, + "status": { + "type": "integer", + "examples": [ + 500 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Todas as transações do informe estão inválidas" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseCreatedSegregacao": { + "description": "PP Recebido", + "content": { + "application/json": { + "example": { + "title": "PP Recebido", + "status": 201, + "detail": "Informe de segregação iniciado/finalizado com sucesso", + "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + }, + "schema": { + "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseCreatedLote": { + "description": "Lote criado com sucesso (primeiro envio do idLote).", + "content": { + "application/json": { + "example": { + "title": "PP Recebido", + "status": 201, + "detail": "Lote criado com sucesso", + "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + }, + "schema": { + "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseOkLote": { + "description": "PP Lote Recebido Anteriormente", + "content": { + "application/json": { + "example": { + "title": "PP Lote Recebido Anteriormente", + "status": 200, + "detail": "Lote foi recebido anteriormente", + "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + }, + "schema": { + "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" + } + } + } + }, + "PPResponseNoContentMocConsultaStart": { + "description": "Consulta realizada com sucesso, porém sem ocorrências disponíveis no momento. O PSP deve aguardar 30 minutos antes de realizar nova consulta, conforme indicado no header 'Retry-After'. Não representa falha.", + "headers": { + "Retry-After": { + "description": "Tempo, em segundos, que o cliente deve aguardar antes de realizar uma nova consulta.", + "schema": { + "type": "integer", + "example": 1800 + } + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseNoContentMocConsultaToken": { + "description": "Não há mais ocorrências disponíveis no momento. O PSP deve aguardar 30 minutos antes de realizar nova consulta, conforme indicado no header 'Retry-After'. Não representa falha.", + "headers": { + "Retry-After": { + "description": "Tempo, em segundos, que o cliente deve aguardar antes de realizar uma nova consulta.", + "schema": { + "type": "integer", + "example": 1800 + } + }, + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseBadRequestMocConsulta": { + "description": "Bad Request", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Bad Request" + ] + }, + "status": { + "type": "integer", + "examples": [ + 400 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Parametros invalidos" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "nsuInicial" + ] + }, + "message": { + "type": "string", + "examples": [ + "campoX: parametro obrigatorio nao informado" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseUnprocessableEntityMocConsulta": { + "description": "Unprocessable Entity", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Unprocessable Entity" + ] + }, + "status": { + "type": "integer", + "examples": [ + 422 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Regras de negocio violadas para a consulta de ocorrencias do MOC" + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "field": { + "type": "string", + "examples": [ + "proximoToken" + ] + }, + "message": { + "type": "string", + "examples": [ + "proximoToken inexistente ou expirado" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseUnprocessableEntitySegregacaoIniciada": { + "description": "Unprocessable Entity", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Unprocessable Entity" + ] + }, + "status": { + "type": "integer", + "examples": [ + 422 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Regra de negócio violada na abertura do informe de remessa de segregação." + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string", + "examples": [ + "idInfSegr" + ] + }, + "message": { + "type": "string", + "description": "Mensagem da regra de negócio violada. Valores possíveis nesta etapa listados nos exemplos.", + "examples": [ + "Já existe uma remessa de segregação iniciada para o idInfSegr informado" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseUnprocessableEntitySegregacaoLote": { + "description": "Unprocessable Entity", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Unprocessable Entity" + ] + }, + "status": { + "type": "integer", + "examples": [ + 422 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Regra de negócio violada no envio do lote de transações da segregação." + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string", + "examples": [ + "idInfSegr" + ] + }, + "message": { + "type": "string", + "description": "Mensagem da regra de negócio violada. Valores possíveis nesta etapa listados nos exemplos.", + "examples": [ + "Não existe remessa de segregação iniciada para o idInfSegr informado", + "Já existe uma remessa de segregação finalizada para o idInfSegr informado", + "O cnpjRaizPspRecDir informado é diferente do cnpjRaizPspRecDir enviado na remessa de segregação iniciada para o idInfSegr informado" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseUnprocessableEntitySegregacaoFinalizacao": { + "description": "Unprocessable Entity", + "content": { + "application/problem+json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "examples": [ + "Unprocessable Entity" + ] + }, + "status": { + "type": "integer", + "examples": [ + 422 + ] + }, + "detail": { + "type": "string", + "examples": [ + "Regra de negócio violada na finalização da remessa de segregação." + ] + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "examples": [ + 1 + ], + "description": "Índice (1..n) do item rejeitado na lista enviada, permitindo correlacionar o erro ao item original da requisição." + }, + "field": { + "type": "string", + "examples": [ + "idInfSegr" + ] + }, + "message": { + "type": "string", + "description": "Mensagem da regra de negócio violada. Valores possíveis nesta etapa listados nos exemplos.", + "examples": [ + "Não existe remessa de segregação iniciada para o idInfSegr informado", + "Já existe uma remessa de segregação finalizada para o idInfSegr informado", + "O valor informado em totalTrans difere da quantidade de transações enviadas", + "O valor informado em vlTotalCbs difere da soma dos valores de CBS das transações enviadas", + "O valor informado em vlTotalIbs difere da soma dos valores de IBS das transações enviadas", + "O cnpjRaizPspRecDir informado é diferente do cnpjRaizPspRecDir enviado na remessa de segregação iniciada para o idInfSegr informado" + ] + } + } + } + } + } + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + }, + "PPResponseOkLoteAtualizado": { + "description": "Lote atualizado com sucesso (reenvio com o mesmo idLote, substituindo o anterior).", + "content": { + "application/json": { + "example": { + "title": "PP Recebido", + "status": 200, + "detail": "Lote atualizado com sucesso", + "resourceId": "UEkBbgR-78VqKK-uvuq9O0r9-bqXyBH9Ur" + }, + "schema": { + "$ref": "#/components/responses/PPResponseOk/content/application~1json/schema" + } + } + }, + "headers": { + "X-JWS-Signature": { + "$ref": "#/components/headers/XJwsSignatureResponseHeader" + } + } + } + }, + "parameters": { + "XJwsSignatureHeaderParam": { + "name": "X-JWS-Signature", + "in": "header", + "required": true, + "description": "Header: Assinatura JWS da requisição.", + "schema": { + "type": "string", + "examples": [ + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyIsImtpZCI6IjIwMjYtMDYta2V5LTEiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..dR4M8pVh8kS2b3H1N0aYzQ2vJj5mXw7sK1qP9fL6nE3cU8tI0rB4wD7gF2hL9mN5pQ1sT6uV3xY8zA0bC4dE7w" + ] + } + } + }, + "headers": { + "XJwsSignatureResponseHeader": { + "description": "Header: Assinatura JWS da resposta.", + "schema": { + "type": "string", + "example": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXUyIsImtpZCI6IjIwMjYtMDYta2V5LTEiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..dR4M8pVh8kS2b3H1N0aYzQ2vJj5mXw7sK1qP9fL6nE3cU8tI0rB4wD7gF2hL9mN5pQ1sT6uV3xY8zA0bC4dE7w" + } + }, + "ProximoTokenHeader": { + "description": "Token de posição da leitura", + "schema": { + "type": "string", + "example": "123232131232132123" + } + }, + "StreamIdHeader": { + "description": "Identificador do stream", + "schema": { + "type": "string", + "example": "stream-123232131232132123" + } + } + }, + "securitySchemes": { + "mutualTLS": { + "type": "mutualTLS", + "description": "Autenticação mútua TLS (mTLS) com certificado de cliente válido." + } + } + }, + "security": [ + { + "mutualTLS": [] + } + ] +} \ No newline at end of file diff --git a/packages/mock/package.json b/packages/mock/package.json index d5eef69..c9920c8 100644 --- a/packages/mock/package.json +++ b/packages/mock/package.json @@ -1,6 +1,6 @@ { "name": "@splitbr/mock", - "version": "0.1.1", + "version": "0.2.0", "description": "Mock local da Plataforma Publica do Split Payment (IBS/CBS, LC 214/2025) para desenvolvimento e testes de PSPs", "license": "MIT", "type": "module", diff --git a/packages/mock/src/domain/ids.ts b/packages/mock/src/domain/ids.ts index 7a3db56..e673e7e 100644 --- a/packages/mock/src/domain/ids.ts +++ b/packages/mock/src/domain/ids.ts @@ -1,11 +1,19 @@ import type { Arranjo } from "./matrices.js"; /** - * Regexes-chave do Manual de Integracao v1.0: idRepasse (30 posicoes), - * idInfSegr (34 posicoes), CNPJ alfanumerico (IN RFB 2.229/2024). + * Regexes-chave do Manual de Integracao v1.1.0: idRepasse (30 posicoes), + * idInfSegr (34 posicoes), idLote (40 posicoes), CNPJ alfanumerico + * (IN RFB 2.229/2024). */ export const ID_REPASSE = /^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\d{11}$/; export const ID_INF_SEGR = /^[A-Za-z0-9]{16}(PXA|PXD|PXE|BOL|TED|TEF)\d{15}$/; +/** + * v1.1.0: o idLote deixou de ser livre (era 1 a 16 posicoes, sem formato) e + * passou a ser derivado, `idInfSegr` seguido de um sequencial de 6 digitos. + * Isso amarra o lote ao informe no proprio identificador, entao um lote nao + * pode mais ser enviado para o informe errado sem que o formato denuncie. + */ +export const ID_LOTE = /^[A-Za-z0-9]{34}\d{6}$/; export const CNPJ_ALFANUMERICO = /^[A-Za-z0-9]{14}$/; export const CNPJ_RAIZ = /^[A-Za-z0-9]{8}$/; @@ -30,3 +38,8 @@ export function gerarIdRepasse(arranjo: Arranjo, n: number): string { export function gerarIdInfSegr(arranjo: Arranjo, n: number): string { return `${prefixoDeterministico(n)}${CODIGO_ARRANJO[arranjo]}${String(n).padStart(15, "0")}`; } + +/** idLote do v1.1.0: idInfSegr (34) mais o sequencial do lote (6 digitos). */ +export function gerarIdLote(idInfSegr: string, sequencial: number): string { + return `${idInfSegr}${String(sequencial).padStart(6, "0")}`; +} diff --git a/packages/mock/src/domain/segregacao-fsm.ts b/packages/mock/src/domain/segregacao-fsm.ts index 05f6042..1dc8934 100644 --- a/packages/mock/src/domain/segregacao-fsm.ts +++ b/packages/mock/src/domain/segregacao-fsm.ts @@ -4,7 +4,7 @@ import { CODIGO_ARRANJO, ID_INF_SEGR, ID_REPASSE } from "./ids.js"; /** * Maquina de estados do Informe de Segregacao (Manual secao 3.5, 3 passos): * remessa iniciada -> lote(s) de ate 1.000 transacoes -> finalizacao com - * cross-validacao de totalTrans/valorTotalCbs/valorTotalIbs. Lote com item + * cross-validacao de totalTrans/vlTotalCbs/vlTotalIbs. Lote com item * invalido rejeita o LOTE INTEIRO; passo fora de ordem falha sem mutar estado. * Somas monetarias acumulam em centavos inteiros (nunca float). */ @@ -157,8 +157,8 @@ export class SegregacaoFsm { dados: { idInfSegr: string; totalTrans: number; - valorTotalCbs: number; - valorTotalIbs: number; + vlTotalCbs: number; + vlTotalIbs: number; }, hashPayload: string, ): ResultadoSegregacao { @@ -168,17 +168,17 @@ export class SegregacaoFsm { throw new ErroSegregacao(422, "Conflito de finalizacao", `Remessa '${dados.idInfSegr}' ja finalizada com payload diferente`); } const remessa = this.exigirIniciada(dados.idInfSegr, "finalizacao"); - const cbs = paraCentavos(dados.valorTotalCbs); - const ibs = paraCentavos(dados.valorTotalIbs); + const cbs = paraCentavos(dados.vlTotalCbs); + const ibs = paraCentavos(dados.vlTotalIbs); const divergencias: string[] = []; if (dados.totalTrans !== remessa.totalTrans) { divergencias.push(`totalTrans informado ${dados.totalTrans} != acumulado ${remessa.totalTrans}`); } if (cbs !== remessa.totalCbsCentavos) { - divergencias.push(`valorTotalCbs informado ${cbs} centavos != acumulado ${remessa.totalCbsCentavos}`); + divergencias.push(`vlTotalCbs informado ${cbs} centavos != acumulado ${remessa.totalCbsCentavos}`); } if (ibs !== remessa.totalIbsCentavos) { - divergencias.push(`valorTotalIbs informado ${ibs} centavos != acumulado ${remessa.totalIbsCentavos}`); + divergencias.push(`vlTotalIbs informado ${ibs} centavos != acumulado ${remessa.totalIbsCentavos}`); } if (divergencias.length > 0) { throw new ErroSegregacao(422, "Finalizacao divergente", divergencias.join("; "), { divergencias }); diff --git a/packages/mock/src/plugins/headers.ts b/packages/mock/src/plugins/headers.ts index 1fe386c..f5924cb 100644 --- a/packages/mock/src/plugins/headers.ts +++ b/packages/mock/src/plugins/headers.ts @@ -1,69 +1,80 @@ import type { FastifyInstance } from "fastify"; +import { conferirFormaDoHeader } from "@splitbr/client"; import { sendProblem } from "./problem.js"; /** - * Enforca os 4 headers obrigatorios da tabela do Manual de Integracao em toda - * rota /api/*. Rotas utilitarias (ex.: /healthz) ficam isentas. + * Headers do contrato v1.1.0. + * + * O v0.0.10 exigia quatro headers (messageId, correlationId, tenantId, + * timestamp) e o v1.1.0 não declara nenhum deles: sumiram de + * `components.parameters` e não aparecem uma única vez no Manual de Integração + * v1.1.0. No lugar entrou o `X-JWS-Signature`, `required` nas 43 operações. + * + * O que este plugin faz, e por quê: + * + * - **Não exige mais os quatro antigos.** Exigi-los deixaria o mock mais + * estrito que a plataforma real, que é o defeito oposto ao que um mock deve + * ter. Ainda são aceitos, e o `correlationId` continua sendo ecoado na + * resposta quando vem, porque é útil para depurar uma jornada. + * - **Valida a FORMA do `X-JWS-Signature` quando ele vem, sem exigir que + * venha.** Verificação criptográfica de verdade obrigaria quem roda + * `npx splitbr-mock` a gerar par de chaves RSA antes de ver a primeira + * resposta, e o valor do mock é justamente não precisar de setup. Já aceitar + * qualquer string não ensinaria nada: o erro mais provável em produção é + * mandar um JWS bem-formado com `b64` errado, ou com o payload anexado em vez + * de detached, e conferir a forma pega exatamente isso. + * - **`exigirAssinatura` fecha a porta** para quem quer o comportamento fiel ao + * contrato, inclusive em CI. */ -const MESSAGE_ID = - /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/; -const TENANT_ID = /^[A-Za-z0-9]{14}$/; -const TIMESTAMP = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}-03:00$/; - -interface HeaderRule { - name: string; - check: (value: string) => boolean; - expected: string; +export interface OpcoesDeHeaders { + /** Recusa requisição sem `X-JWS-Signature` (400). Padrão: false. */ + exigirAssinatura?: boolean; } -const RULES: HeaderRule[] = [ - { - name: "messageId", - check: (v) => MESSAGE_ID.test(v), - expected: "UUID v4 minusculo (36 posicoes), unico por requisicao", - }, - { - name: "correlationId", - check: (v) => v.length === 19, - expected: "string de exatamente 19 posicoes, propagada na jornada", - }, - { - name: "tenantId", - check: (v) => TENANT_ID.test(v), - expected: "CNPJ alfanumerico do PSP (14 posicoes)", - }, - { - name: "timestamp", - check: (v) => TIMESTAMP.test(v), - expected: "ISO 8601 com offset -03:00, sem milissegundos (25 posicoes)", - }, -]; +export function headersPlugin(app: FastifyInstance, opcoes: OpcoesDeHeaders = {}): void { + const exigir = opcoes.exigirAssinatura ?? false; -export function headersPlugin(app: FastifyInstance): void { app.addHook("onRequest", (request, reply, done) => { if (!request.url.startsWith("/api/")) { done(); return; } - for (const rule of RULES) { - const raw = request.headers[rule.name.toLowerCase()]; - const value = Array.isArray(raw) ? raw[0] : raw; - if (value === undefined || value === "" || !rule.check(value)) { + + const bruto = request.headers["x-jws-signature"]; + const assinatura = Array.isArray(bruto) ? bruto[0] : bruto; + + if (assinatura === undefined || assinatura === "") { + if (exigir) { sendProblem(reply, { status: 400, - title: "Header obrigatorio ausente ou invalido", - detail: `Header '${rule.name}' ${value === undefined || value === "" ? "ausente" : "invalido"}; esperado: ${rule.expected}`, - extensions: { header: rule.name }, + title: "Assinatura ausente", + detail: + "Header 'X-JWS-Signature' ausente. O contrato v1.1.0 exige assinatura JWS Compact Detached em todas as operações (Manual de Integração v1.1.0, capítulo 8).", + extensions: { header: "X-JWS-Signature" }, + }); + done(); + return; + } + } else { + const { problemas } = conferirFormaDoHeader(assinatura); + if (problemas.length > 0) { + sendProblem(reply, { + status: 400, + title: "Assinatura malformada", + detail: `Header 'X-JWS-Signature' não está conforme o capítulo 8 do Manual de Integração v1.1.0: ${problemas.join("; ")}.`, + extensions: { header: "X-JWS-Signature", problemas }, }); done(); return; } } + + // Herança do v0.0.10: o correlationId não é mais contrato, mas ecoá-lo + // quando vem continua ajudando a seguir uma jornada nos logs. const correlation = request.headers["correlationid"]; - reply.header( - "correlationId", - Array.isArray(correlation) ? correlation[0] : (correlation as string), - ); + if (correlation !== undefined) { + reply.header("correlationId", Array.isArray(correlation) ? correlation[0] : correlation); + } done(); }); } diff --git a/packages/mock/src/routes/moc.ts b/packages/mock/src/routes/moc.ts new file mode 100644 index 0000000..527fa22 --- /dev/null +++ b/packages/mock/src/routes/moc.ts @@ -0,0 +1,135 @@ +import type { FastifyInstance } from "fastify"; +import { sendProblem } from "../plugins/problem.js"; +import type { ContextoRotas } from "./transacao.js"; +import { acharOperacao, responderEnvelope, validarEntrada } from "./util.js"; + +/** + * Mecanismo de Ocorrências (MOC), seção 3.9 do Manual de Integração v1.1.0. + * + * Fluxo novo no v1.1.0, em três rotas: o PSP registra uma **solicitação** de + * estorno ou uma **notificação**, e depois consulta as **ocorrências** que já + * receberam resposta da RFB ou do CGIBS. + * + * As duas primeiras são discriminadas por presença de campo, não por rota: a + * solicitação exige `codMotOcor`, `vlCbsEst` e `vlIbsEst` e proíbe os campos de + * processo administrativo; a notificação proíbe os três de estorno. O Ajv já + * enforca isso a partir do próprio spec (`allOf` com `required` e `not`), então + * aqui não há regra duplicada: o mock valida contra o contrato, como nas + * demais rotas. + * + * A resposta da RFB/CGIBS é simulada de forma determinística. Sem isso a + * consulta devolveria 204 para sempre e a rota seria decoração: o valor de + * simular está justamente em o integrador ver o ciclo fechar. + */ + +/** Códigos do spec: 01 defere, 02 indefere, 03 defere parcialmente. */ +const PARECERES = ["01", "02", "03"] as const; +const ORGAOS = ["RFB", "CGIBS"] as const; + +export interface OcorrenciaRegistrada { + nsuId: number; + cnpjRaizPspRecDir: string; + retorno: Record; +} + +function respostaSimulada( + ocorrencia: Record, + nsuId: number, + dtHrResposta: string, +): Record { + // Determinístico pelo NSU: o mesmo seed sempre produz o mesmo parecer, que é + // o que deixa um teste de integração ser escrito contra o mock (D-3). + const parecer = PARECERES[nsuId % PARECERES.length] as string; + const orgao = ORGAOS[nsuId % ORGAOS.length] as string; + const ehSolicitacao = ocorrencia["codMotOcor"] !== undefined; + + // A matriz 3.9.4.1 exige, por arranjo, o identificador da transação + // correspondente; repassar o que veio preserva a amarração com a ocorrência + // original em vez de inventar um id novo. + const identificadores: Record = {}; + for (const campo of ["idDda", "txId", "e2eId", "numCtrlTED", "numCtrlTEF", "numIdentcBaixa"]) { + if (ocorrencia[campo] !== undefined) identificadores[campo] = ocorrencia[campo]; + } + + const retorno: Record = { + nsuId: String(nsuId), + arrj: ocorrencia["arrj"], + idOcor: ocorrencia["idOcor"], + dtHrEnvOcor: ocorrencia["dtHrPgto"] ?? dtHrResposta, + dtHrRespOcor: dtHrResposta, + orgRespRes: orgao, + codParecer: parecer, + tpTrib: nsuId % 2 === 0 ? "CBS" : "IBS", + vlTribEst: ehSolicitacao ? (ocorrencia["vlCbsEst"] ?? 0) : 0, + ...identificadores, + }; + + // idAprovEst só existe quando houve deferimento: um estorno indeferido não + // tem aprovação para identificar. + if (ehSolicitacao && parecer !== "02") { + retorno["idAprovEst"] = `APROV${String(nsuId).padStart(10, "0")}`; + } + retorno["descParecer"] = + parecer === "01" ? "Deferido" : parecer === "02" ? "Indeferido" : "Deferido parcialmente"; + + return retorno; +} + +export function registrarRotasMoc(app: FastifyInstance, ctx: ContextoRotas): void { + for (const tipo of ["solicitacao", "notificacao"] as const) { + const rota = `/api/v1/moc/${tipo}`; + app.post(rota, async (request, reply) => { + const entrada = validarEntrada(request, reply, acharOperacao(ctx.registro, "post", rota)); + if (!entrada) return; + + const ocorrencias = (entrada.body["ocorrencias"] as Array>) ?? []; + const inf = (entrada.body["infRequisicao"] as Record) ?? {}; + const dtHrMsg = String(inf["dtHrMsg"] ?? ""); + + for (const ocorrencia of ocorrencias) { + const nsuId = ctx.store.moc.length + 1; + ctx.store.moc.push({ + nsuId, + // O cnpjRaizPspRecDir vem no item, não no envelope, nas ocorrências. + cnpjRaizPspRecDir: String(ocorrencia["cnpjRaizPspRecDir"] ?? ""), + retorno: respostaSimulada(ocorrencia, nsuId, dtHrMsg), + }); + } + + return responderEnvelope(reply, ctx.store.proximoResourceId(), ocorrencias.length, []); + }); + } + + app.get("/api/v1/moc/:cnpjRaizPspRecDir/ocorrencias", async (request, reply) => { + const { cnpjRaizPspRecDir } = request.params as { cnpjRaizPspRecDir: string }; + const query = request.query as { nsuInicial?: string; limite?: string }; + + const nsuInicial = Number(query.nsuInicial); + if (!Number.isInteger(nsuInicial) || nsuInicial < 1) { + return sendProblem(reply, { + status: 400, + title: "Parametro obrigatorio ausente ou invalido", + detail: "nsuInicial e obrigatorio na consulta de ocorrencias e deve ser inteiro >= 1", + }); + } + // O spec limita a página a 1.000 itens; o default segue o teto. + const limite = query.limite !== undefined ? Number(query.limite) : 1000; + if (!Number.isInteger(limite) || limite < 1 || limite > 1000) { + return sendProblem(reply, { + status: 400, + title: "Parametro invalido", + detail: "limite, quando presente, deve ser inteiro entre 1 e 1000", + }); + } + + const pagina = ctx.store.moc + .filter((o) => o.cnpjRaizPspRecDir === cnpjRaizPspRecDir && o.nsuId >= nsuInicial) + .slice(0, limite) + .map((o) => o.retorno); + + // 204 é o vazio legítimo aqui: não há ocorrência com resposta a partir + // daquele NSU, o que é diferente de erro. + if (pagina.length === 0) return reply.status(204).send(); + return reply.status(200).send({ ocorrencias: pagina }); + }); +} diff --git a/packages/mock/src/routes/segregacao.ts b/packages/mock/src/routes/segregacao.ts index 2ad3e83..891010d 100644 --- a/packages/mock/src/routes/segregacao.ts +++ b/packages/mock/src/routes/segregacao.ts @@ -143,8 +143,8 @@ export function registrarRotasSegregacao(app: FastifyInstance, ctx: ContextoRota { idInfSegr, totalTrans: Number(dados["totalTrans"]), - valorTotalCbs: Number(dados["valorTotalCbs"]), - valorTotalIbs: Number(dados["valorTotalIbs"]), + vlTotalCbs: Number(dados["vlTotalCbs"]), + vlTotalIbs: Number(dados["vlTotalIbs"]), }, hashPayload(body), ); diff --git a/packages/mock/src/routes/stream.ts b/packages/mock/src/routes/stream.ts index 980b63b..1c5c894 100644 --- a/packages/mock/src/routes/stream.ts +++ b/packages/mock/src/routes/stream.ts @@ -1,4 +1,5 @@ import type { FastifyInstance, FastifyReply } from "fastify"; +import { gerarTimestampSplit } from "@splitbr/client"; import type { Arranjo } from "../domain/matrices.js"; import { sendProblem } from "../plugins/problem.js"; import type { ContextoRotas } from "./transacao.js"; @@ -13,8 +14,13 @@ export interface OpcoesStream { /** * Fluxos 3.6/3.7 do Manual: Retorno Super Inteligente (out) e Consulta * Retroativa, ambos pull-based com token de posicao e long polling. - * 200 entrega tributos em ordem de NSU com headers streamId/proximoToken; + * 200 entrega transacoes em ordem de NSU com headers streamId/proximoToken; * 204 na janela vazia; DELETE encerra o stream (token some, 422 depois). + * + * Renomes do v1.1.0 nesta area: o parametro de rota {idPsp} virou + * {cnpjRaizPspRecDir} (8 posicoes, raiz do CNPJ, nao mais o identificador + * opaco do PSP), o segmento /tributos/ virou /transacoes/, e a chave do corpo + * de resposta acompanhou: `tributos` virou `transacoes`. */ export function registrarRotasStream( app: FastifyInstance, @@ -39,16 +45,27 @@ export function registrarRotasStream( if (incluirStreamId) reply.header("streamId", saida.streamId); reply.header("proximoToken", saida.proximoToken); if (saida.resultado === "vazio") return reply.status(204).send(); - return reply.status(200).send({ tributos: saida.eventos }); + // Duas adaptacoes ao v1.1.0 na fronteira HTTP, e so aqui: internamente o + // nsuId segue sendo numero, porque e o cursor de ordenacao da fila, mas o + // contrato passou a declara-lo string (^\d{1,19}$). E dtHrDisp entrou como + // obrigatorio: e o instante em que a plataforma disponibilizou a mensagem + // para consumo, que so existe no momento da entrega. + const dtHrDisp = gerarTimestampSplit(); + const transacoes = saida.eventos.map((e) => ({ + ...e, + nsuId: String(e.nsuId), + dtHrDisp, + })); + return reply.status(200).send({ transacoes }); }; for (const arranjo of ARRANJOS_STREAM) { - const baseOut = `/api/v1/out/${arranjo}/:idPsp/tributos/stream`; - const baseRetro = `/api/v1/retroativo/${arranjo}/:idPsp/tributos/stream`; + const baseOut = `/api/v1/out/${arranjo}/:cnpjRaizPspRecDir/transacoes/stream`; + const baseRetro = `/api/v1/retroativo/${arranjo}/:cnpjRaizPspRecDir/transacoes/stream`; app.get(`${baseOut}/start`, async (request, reply) => { - const { idPsp } = request.params as { idPsp: string }; - const { token } = ctx.store.eventos.abrirStream(arranjo, idPsp); + const { cnpjRaizPspRecDir } = request.params as { cnpjRaizPspRecDir: string }; + const { token } = ctx.store.eventos.abrirStream(arranjo, cnpjRaizPspRecDir); return responderConsumo(reply, token, true); }); @@ -69,29 +86,30 @@ export function registrarRotasStream( }); app.get(`${baseRetro}/start`, async (request, reply) => { - const { idPsp } = request.params as { idPsp: string }; - const query = request.query as { fromNsu?: string; toNsu?: string; streamId?: string }; - const fromNsu = Number(query.fromNsu); - if (!Number.isInteger(fromNsu) || fromNsu < 1) { + const { cnpjRaizPspRecDir } = request.params as { cnpjRaizPspRecDir: string }; + // v1.1.0 renomeou os dois: fromNsu/toNsu viraram nsuInicial/nsuFinal. + const query = request.query as { nsuInicial?: string; nsuFinal?: string; streamId?: string }; + const nsuInicial = Number(query.nsuInicial); + if (!Number.isInteger(nsuInicial) || nsuInicial < 1) { return sendProblem(reply, { status: 400, title: "Parametro obrigatorio ausente ou invalido", - detail: "fromNsu e obrigatorio na consulta retroativa e deve ser inteiro >= 1", + detail: "nsuInicial e obrigatorio na consulta retroativa e deve ser inteiro >= 1", }); } - const toNsu = query.toNsu !== undefined ? Number(query.toNsu) : undefined; - if (toNsu !== undefined && (!Number.isInteger(toNsu) || toNsu < 1)) { + const nsuFinal = query.nsuFinal !== undefined ? Number(query.nsuFinal) : undefined; + if (nsuFinal !== undefined && (!Number.isInteger(nsuFinal) || nsuFinal < 1)) { return sendProblem(reply, { status: 400, title: "Parametro invalido", - detail: "toNsu, quando presente, deve ser inteiro >= 1", + detail: "nsuFinal, quando presente, deve ser inteiro >= 1", }); } const aberto = ctx.store.eventos.abrirRetroativo( arranjo, - idPsp, - fromNsu, - toNsu, + cnpjRaizPspRecDir, + nsuInicial, + nsuFinal, query.streamId, ); if (!aberto) { diff --git a/packages/mock/src/routes/util.ts b/packages/mock/src/routes/util.ts index 87015cb..13de045 100644 --- a/packages/mock/src/routes/util.ts +++ b/packages/mock/src/routes/util.ts @@ -51,8 +51,12 @@ export function validarEntrada( request: FastifyRequest, reply: FastifyReply, op: OperacaoCompilada | undefined, - matriz: Matriz, - arranjo: Arranjo, + // Matriz e arranjo sao opcionais porque nem toda rota tem matriz M/O/N-E: as + // do MOC (3.9) ja tem a regra por arranjo codificada no proprio spec, via + // oneOf com discriminator, required por arranjo e additionalProperties:false. + // Criar matriz para elas duplicaria a fonte da verdade que o Ajv ja aplica. + matriz?: Matriz, + arranjo?: Arranjo, ): { body: Record; errosItem: ErroMatriz[] } | null { const body = (request.body ?? {}) as Record; @@ -67,6 +71,8 @@ export function validarEntrada( return null; } + if (matriz === undefined || arranjo === undefined) return { body, errosItem: [] }; + const erros = validarContraMatriz(matriz, arranjo, body); const errosTopo = erros.filter((e) => e.indice === undefined); if (errosTopo.length > 0) { diff --git a/packages/mock/src/scenario/engine.ts b/packages/mock/src/scenario/engine.ts index b79f920..e2f5a4f 100644 --- a/packages/mock/src/scenario/engine.ts +++ b/packages/mock/src/scenario/engine.ts @@ -13,7 +13,7 @@ export type Procedimento = "padrao" | "simplificado"; export interface ComandoDivergencia { arranjo: Arranjo; - idPsp: string; + cnpjRaizPspRecDir: string; /** Chave natural da transacao ja registrada no mock. */ chave: string; tipo: TipoDivergencia; @@ -88,7 +88,7 @@ export function dispararDivergencia(store: MemoryStore, cmd: ComandoDivergencia) if (valor !== undefined) evento[campo] = valor; } - return store.eventos.publicar(cmd.arranjo, cmd.idPsp, evento); + return store.eventos.publicar(cmd.arranjo, cmd.cnpjRaizPspRecDir, evento); } /** Rotas utilitarias de cenario (fora de /api, isentas dos headers). */ diff --git a/packages/mock/src/server.ts b/packages/mock/src/server.ts index 9f0ef81..af0ca6d 100644 --- a/packages/mock/src/server.ts +++ b/packages/mock/src/server.ts @@ -3,6 +3,7 @@ import { ChaosFlags, chaosPlugin } from "./chaos/flags.js"; import { headersPlugin } from "./plugins/headers.js"; import { problemPlugin } from "./plugins/problem.js"; import { registrarRotasCenario } from "./scenario/engine.js"; +import { registrarRotasMoc } from "./routes/moc.js"; import { registrarRotasPreliminar } from "./routes/informe-preliminar.js"; import { registrarRotasSegregacao } from "./routes/segregacao.js"; import { registrarRotasStream } from "./routes/stream.js"; @@ -23,6 +24,12 @@ export interface MockServerOptions { * em versoes futuras do manual -- brief, secao 11). Default: desligado. */ resourceIdConsulta?: boolean; + /** + * Recusa requisicao sem `X-JWS-Signature` (400), como a plataforma real faz. + * Desligado por padrao para o `npx splitbr-mock` continuar utilizavel sem par + * de chaves; quando o header vem, a forma dele e conferida de qualquer jeito. + */ + exigirAssinatura?: boolean; } export interface MockServer extends FastifyInstance { @@ -54,10 +61,11 @@ export function buildServer(options: MockServerOptions = {}): MockServer { // Chaos antes dos headers: na plataforma real, auth (401/403) e protecoes // de borda (429/503) precedem a validacao de payload. chaosPlugin(app, chaos); - headersPlugin(app); + headersPlugin(app, { exigirAssinatura: options.exigirAssinatura ?? false }); registrarRotasTransacao(app, { store, registro }); registrarRotasPreliminar(app, { store, registro }); + registrarRotasMoc(app, { store, registro }); registrarRotasSegregacao(app, { store, registro }); registrarRotasStream(app, { store, registro }, { timeoutMs: options.streamTimeoutMs ?? 25_000 }); registrarRotasCenario(app, store); diff --git a/packages/mock/src/spec/gate.ts b/packages/mock/src/spec/gate.ts index 39c085b..db6bba2 100644 --- a/packages/mock/src/spec/gate.ts +++ b/packages/mock/src/spec/gate.ts @@ -1,13 +1,13 @@ import { createHash } from "node:crypto"; /** - * Hash pinado do contrato oficial (OAS v0.0.10), identico ao pinado em + * Hash pinado do contrato oficial (OAS v1.1.0), identico ao pinado em * vendor/MANIFEST.md. O mock recusa boot quando a copia embarcada divergir * (D-2; mesmo padrao do codegen do @splitbr/client). Um teste de repositorio * garante que a copia em data/spec/ e o vendor nao driftam entre si. */ export const PINNED_SPEC_SHA256 = - "c5f60c849b22149d90ac2e3df6fcbe3ff9b0fb1f0c8b6463622fabb415629e2b"; + "1a14b04e7e910b31c14913908ae6a8ce050d5b27afc2cee844a44959ee1621e7"; export class SpecGateError extends Error { constructor(actual: string) { diff --git a/packages/mock/src/spec/load.ts b/packages/mock/src/spec/load.ts index 9db08e5..263f980 100644 --- a/packages/mock/src/spec/load.ts +++ b/packages/mock/src/spec/load.ts @@ -19,9 +19,9 @@ export interface RegistroSpec { // Em dev este modulo vive em src/spec/ (data/ a dois niveis); no pacote // buildado o bundle vive em dist/ (data/ a um nivel). Resolve o primeiro // candidato existente em vez de fixar a profundidade. -const SPEC_EMBARCADO = ["../../data/spec/openapi-v0_0_10.json", "../data/spec/openapi-v0_0_10.json"] +const SPEC_EMBARCADO = ["../../data/spec/openapi-v1_1_0.json", "../data/spec/openapi-v1_1_0.json"] .map((rel) => fileURLToPath(new URL(rel, import.meta.url))) - .find((p) => existsSync(p)) ?? "data/spec/openapi-v0_0_10.json"; + .find((p) => existsSync(p)) ?? "data/spec/openapi-v1_1_0.json"; /** * Carrega o contrato oficial atras da trava de hash (D-2) e compila um diff --git a/packages/mock/src/store/memory.ts b/packages/mock/src/store/memory.ts index 98933c3..45f4a0a 100644 --- a/packages/mock/src/store/memory.ts +++ b/packages/mock/src/store/memory.ts @@ -33,7 +33,16 @@ export function chaveTransacao( } /** Estado in-memory do mock; deterministico por seed (D-3), zera por processo. */ +export interface OcorrenciaMoc { + nsuId: number; + cnpjRaizPspRecDir: string; + retorno: Record; +} + export class MemoryStore { + /** Ocorrencias do MOC (3.9) com a resposta simulada da RFB/CGIBS. */ + readonly moc: OcorrenciaMoc[] = []; + readonly seed: number; private contadorResource: number; readonly transacoes = new Map(); diff --git a/packages/mock/src/stream/queue.ts b/packages/mock/src/stream/queue.ts index af7c118..c503c51 100644 --- a/packages/mock/src/stream/queue.ts +++ b/packages/mock/src/stream/queue.ts @@ -3,7 +3,7 @@ import type { Arranjo } from "../domain/matrices.js"; /** * Pull-based event streaming do Manual (secoes 3.6/3.7): eventos por - * (arranjo, idPsp) com NSU sequencial; leitura por cursor via token opaco com + * (arranjo, cnpjRaizPspRecDir) com NSU sequencial; leitura por cursor via token opaco com * CLAIM ATOMICO (reuso concorrente perde); long polling com resolucao * imediata. Cada stream mantem um LEDGER dos NSUs que entregou, o que da * semantica real aos 3 modos da consulta retroativa (o retroativo devolve @@ -16,12 +16,12 @@ export interface EventoTributo { interface EstadoStream { arranjo: Arranjo; - idPsp: string; + cnpjRaizPspRecDir: string; /** Proximo NSU a ler (exclusivo do ja entregue). */ pos: number; streamId: string; retroativo: boolean; - /** Limite superior inclusivo (toNsu, ledger de stream fechada ou snapshot). */ + /** Limite superior inclusivo (nsuFinal, ledger de stream fechada ou snapshot). */ ateNsu?: number; /** Retroativo por streamId: so NSUs que AQUELE stream entregou. */ somenteNsus?: Set; @@ -31,7 +31,7 @@ interface EstadoStream { interface HistoricoStream { arranjo: Arranjo; - idPsp: string; + cnpjRaizPspRecDir: string; nsusEntregues: Set; } @@ -52,12 +52,12 @@ export class FilaEventos { this.sinais.setMaxListeners(0); } - private chave(arranjo: Arranjo, idPsp: string): string { - return `${arranjo}:${idPsp}`; + private chave(arranjo: Arranjo, cnpjRaizPspRecDir: string): string { + return `${arranjo}:${cnpjRaizPspRecDir}`; } - publicar(arranjo: Arranjo, idPsp: string, dados: Record): EventoTributo { - const chave = this.chave(arranjo, idPsp); + publicar(arranjo: Arranjo, cnpjRaizPspRecDir: string, dados: Record): EventoTributo { + const chave = this.chave(arranjo, cnpjRaizPspRecDir); const fila = this.filas.get(chave) ?? []; const evento: EventoTributo = { ...dados, nsuId: fila.length + 1 }; fila.push(evento); @@ -71,11 +71,11 @@ export class FilaEventos { return `${prefixo}${this.contadorToken.toString(36)}`; } - abrirStream(arranjo: Arranjo, idPsp: string): { token: string; estado: EstadoStream } { + abrirStream(arranjo: Arranjo, cnpjRaizPspRecDir: string): { token: string; estado: EstadoStream } { this.contadorStream += 1; const streamId = `STREAM-${this.contadorStream}`; - const estado: EstadoStream = { arranjo, idPsp, pos: 0, streamId, retroativo: false }; - this.historico.set(streamId, { arranjo, idPsp, nsusEntregues: new Set() }); + const estado: EstadoStream = { arranjo, cnpjRaizPspRecDir, pos: 0, streamId, retroativo: false }; + this.historico.set(streamId, { arranjo, cnpjRaizPspRecDir, nsusEntregues: new Set() }); const token = this.novoToken("S"); this.streams.set(token, estado); return { token, estado }; @@ -89,7 +89,7 @@ export class FilaEventos { */ abrirRetroativo( arranjo: Arranjo, - idPsp: string, + cnpjRaizPspRecDir: string, fromNsu: number, toNsu?: number, streamId?: string, @@ -97,18 +97,18 @@ export class FilaEventos { let somenteNsus: Set | undefined; if (streamId !== undefined) { const hist = this.historico.get(streamId); - if (!hist || hist.arranjo !== arranjo || hist.idPsp !== idPsp) return null; + if (!hist || hist.arranjo !== arranjo || hist.cnpjRaizPspRecDir !== cnpjRaizPspRecDir) return null; somenteNsus = hist.nsusEntregues; } const teto = toNsu ?? (somenteNsus && somenteNsus.size > 0 ? Math.max(...somenteNsus) - : this.maxNsuEntregue(arranjo, idPsp)); + : this.maxNsuEntregue(arranjo, cnpjRaizPspRecDir)); this.contadorStream += 1; const estado: EstadoStream = { arranjo, - idPsp, + cnpjRaizPspRecDir, pos: fromNsu - 1, streamId: streamId ?? `STREAM-${this.contadorStream}`, retroativo: true, @@ -120,10 +120,10 @@ export class FilaEventos { return { token, estado }; } - private maxNsuEntregue(arranjo: Arranjo, idPsp: string): number { + private maxNsuEntregue(arranjo: Arranjo, cnpjRaizPspRecDir: string): number { let max = 0; for (const h of this.historico.values()) { - if (h.arranjo === arranjo && h.idPsp === idPsp) { + if (h.arranjo === arranjo && h.cnpjRaizPspRecDir === cnpjRaizPspRecDir) { for (const n of h.nsusEntregues) if (n > max) max = n; } } @@ -144,7 +144,7 @@ export class FilaEventos { } private disponiveis(estado: EstadoStream, max = 1000): EventoTributo[] { - const fila = this.filas.get(this.chave(estado.arranjo, estado.idPsp)) ?? []; + const fila = this.filas.get(this.chave(estado.arranjo, estado.cnpjRaizPspRecDir)) ?? []; const limite = estado.ateNsu ?? Number.MAX_SAFE_INTEGER; return fila .filter( @@ -178,7 +178,7 @@ export class FilaEventos { try { let eventos = this.disponiveis(estado); if (eventos.length === 0 && !estado.retroativo && timeoutMs > 0) { - const chave = this.chave(estado.arranjo, estado.idPsp); + const chave = this.chave(estado.arranjo, estado.cnpjRaizPspRecDir); const sinais = this.sinais; await new Promise((resolve) => { const aoPublicar = () => fim(); diff --git a/packages/mock/test/chaos.test.ts b/packages/mock/test/chaos.test.ts index a45519c..16efc5a 100644 --- a/packages/mock/test/chaos.test.ts +++ b/packages/mock/test/chaos.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { buildServer } from "../src/server.js"; import { corpoIniciadaBoleto, headersValidos } from "./helpers.js"; +import { gerarIdInfSegr, gerarIdLote } from "../src/domain/ids.js"; // C11 do TEST_STRATEGY: taxonomia exata dos chaos flags e da auth simulada (D-4). @@ -89,7 +90,7 @@ describe("chaos flags (C11)", () => { headers: headersValidos(), payload: { infRequisicao: { cnpjRaizPspRecDir: "12345678", dtHrMsg: "2026-07-20T10:00:00-03:00" }, - dadosLoteSeg: { idLote: "L1" }, + dadosLoteSeg: { idLote: gerarIdLote(gerarIdInfSegr("boleto", 1), 1) }, transacoes: [{ index: 1 }], }, }); diff --git a/packages/mock/test/e2e-client.test.ts b/packages/mock/test/e2e-client.test.ts index e305f43..b8914df 100644 --- a/packages/mock/test/e2e-client.test.ts +++ b/packages/mock/test/e2e-client.test.ts @@ -1,11 +1,8 @@ import { afterAll, beforeAll, describe, expect, it } from "vitest"; -import { - createSplitClient, - gerarCorrelationId, - gerarTimestampSplit, - toProblem, -} from "@splitbr/client"; +import { createSign, generateKeyPairSync } from "node:crypto"; +import { createSplitClient, toProblem } from "@splitbr/client"; import { buildServer, type MockServer } from "../src/server.js"; +import { gerarIdInfSegr, gerarIdLote } from "../src/domain/ids.js"; // R2 do TEST_STRATEGY: o @splitbr/client, SEM nenhuma modificacao, completa // transacao -> segregacao -> consumo de stream contra o mock via HTTP real. @@ -23,20 +20,29 @@ afterAll(async () => { await app.close(); }); +// Chave de teste. O e2e assina de verdade: e o unico teste que exercita o +// caminho completo do X-JWS-Signature, do middleware do client ate a +// conferencia de forma do mock. +const { privateKey } = generateKeyPairSync("rsa", { modulusLength: 2048 }); + function client() { - return createSplitClient({ baseUrl, tenantId: "12345678000199" }); + return createSplitClient({ + baseUrl, + kid: "e2e-01", + assinar: (bytes) => { + const s = createSign("RSA-SHA256"); + s.update(bytes); + s.end(); + return new Uint8Array(s.sign(privateKey)); + }, + }); } -// Os tipos gerados marcam os header params como obrigatorios mesmo com o -// middleware os injetando (achado de DX registrado na task); valores validos -// aqui satisfazem o tipo e o middleware sobrescreve em onRequest. +// Os tipos gerados marcam o header param como obrigatorio mesmo com o +// middleware o injetando (achado de DX registrado na task); um placeholder +// satisfaz o tipo e o middleware sobrescreve em onRequest com o valor real. function hdr() { - return { - messageId: crypto.randomUUID(), - correlationId: gerarCorrelationId(), - tenantId: "12345678000199", - timestamp: gerarTimestampSplit(), - }; + return { "X-JWS-Signature": "placeholder-sobrescrito-pelo-middleware" }; } describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { @@ -52,13 +58,13 @@ describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { index: 1, idDda: "DDA1", numCtrlOrig: "CTRL000001", - numCodBarras: "83660001", + numCodBarras: "83660001000000000000000000000000000000000000", vlInf: 1000.0, vlCbsInf: 9.0, vlIbsInf: 1.0, cnpjRaizPspRecDir: "12345678", cnpjRec: "12345678000199", - cnpjCpfPagOrig: "98765432000188", + cnpjPagOrig: "98765432000188", dtHrIni: TS, dtVenc: "2026-08-01", dtHrLimPgto: "2026-08-01T23:59:59-03:00", @@ -79,7 +85,7 @@ describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { idDda: "DDA1", numCtrlOrig: "CTRL000001", numPgto: 1, - numIdentcBaixa: 1, + numIdentcBaixa: "1", vlPago: 500.0, vlCbsSegr: 4.0, vlIbsSegr: 0.4, @@ -112,14 +118,14 @@ describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { params: { path: { idInfSegr }, header: hdr() }, body: { infRequisicao: { cnpjRaizPspRecDir: "12345678", dtHrMsg: TS }, - dadosLoteSeg: { idLote: "L1" }, + dadosLoteSeg: { idLote: gerarIdLote(gerarIdInfSegr("boleto", 1), 1) }, transacoes: [ { index: 1, idDda: "DDA1", numCtrlOrig: "CTRL000001", numPgto: 1, - numIdentcBaixa: 1, + numIdentcBaixa: "1", vlPago: 500.0, vlCbsSegr: 4.0, vlIbsSegr: 0.4, @@ -142,8 +148,8 @@ describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { dadosFinalSeg: { idInfSegr, totalTrans: 1, - valorTotalCbs: 4.0, - valorTotalIbs: 0.4, + vlTotalCbs: 4.0, + vlTotalIbs: 0.4, }, }, }); @@ -155,20 +161,21 @@ describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { headers: { "content-type": "application/json" }, body: JSON.stringify({ arranjo: "boleto", - idPsp: "PSP00042", + cnpjRaizPspRecDir: "PSP00042", chave: "CTRL000001", tipo: "cbs-correcao", procedimento: "padrao", }), }); - const stream = await c.GET("/api/v1/out/boleto/{idPsp}/tributos/stream/start", { - params: { path: { idPsp: "PSP00042" }, header: hdr() }, + const stream = await c.GET("/api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start", { + params: { path: { cnpjRaizPspRecDir: "PSP00042" }, header: hdr() }, }); expect(stream.response.status).toBe(200); - const tributos = (stream.data as { tributos: Array> }).tributos; - expect(tributos[0]?.["codMsg"]).toBe("RSUP101"); + // v1.1.0: a chave do corpo do Super Inteligente virou `transacoes`. + const transacoes = (stream.data as { transacoes: Array> }).transacoes; + expect(transacoes[0]?.["codMsg"]).toBe("RSUP101"); // padrao: min((500/1000)*9.00; 9.00) = 4.50 - expect(tributos[0]?.["vlCbsCorr"]).toBe(4.5); + expect(transacoes[0]?.["vlCbsCorr"]).toBe(4.5); expect(stream.response.headers.get("proximoToken")).toMatch(/^S/); }); @@ -179,8 +186,8 @@ describe("E2E: client dirige o mock de ponta a ponta (R2)", () => { body: JSON.stringify({ rate429: { retryAfterSeconds: 30 } }), }); const c = client(); - const res = await c.GET("/api/v1/out/boleto/{idPsp}/tributos/stream/start", { - params: { path: { idPsp: "PSP00042" }, header: hdr() }, + const res = await c.GET("/api/v1/out/boleto/{cnpjRaizPspRecDir}/transacoes/stream/start", { + params: { path: { cnpjRaizPspRecDir: "PSP00042" }, header: hdr() }, }); expect(res.response.status).toBe(429); const problem = toProblem(res.error, res.response); diff --git a/packages/mock/test/helpers.ts b/packages/mock/test/helpers.ts index 7265fb9..7d94ee3 100644 --- a/packages/mock/test/helpers.ts +++ b/packages/mock/test/helpers.ts @@ -1,12 +1,37 @@ -import { gerarCorrelationId, gerarTimestampSplit } from "@splitbr/client"; +import { createSign, generateKeyPairSync } from "node:crypto"; +import { + base64url, + canonicalizarJcs, + montarEntradaDeAssinatura, + montarProtectedHeader, +} from "@splitbr/client"; -export function headersValidos(): Record { - return { - messageId: crypto.randomUUID(), - correlationId: gerarCorrelationId(), - tenantId: "12345678000199", - timestamp: gerarTimestampSplit(), - }; +// Par de teste, gerado uma vez por processo. Assinar de verdade nos testes vale +// a pena: um header montado a mao passaria pela conferencia de forma do mock e +// esconderia justamente o erro que ela existe para pegar. +const { privateKey } = generateKeyPairSync("rsa", { modulusLength: 2048 }); + +const assinarRs256 = (bytes: Uint8Array): Uint8Array => { + const s = createSign("RSA-SHA256"); + s.update(bytes); + s.end(); + return new Uint8Array(s.sign(privateKey)); +}; + +/** + * Headers de uma requisicao valida no contrato v1.1.0: so o X-JWS-Signature. + * Os quatro headers do v0.0.10 sairam do contrato e o mock nao os exige mais. + * + * Sincrono de proposito, montado com as mesmas pecas publicas que + * `assinarRequisicao` usa. A versao async obrigaria `await` em 42 pontos dos + * testes sem ganhar cobertura nenhuma, ja que o assinante aqui e sincrono. + */ +export function headersValidos(corpo: unknown = ""): Record { + const protegido = montarProtectedHeader({ kid: "teste-01", assinar: assinarRs256 }); + const protectedB64 = base64url(new TextEncoder().encode(JSON.stringify(protegido))); + const payload = new TextEncoder().encode(canonicalizarJcs(corpo)); + const assinatura = assinarRs256(montarEntradaDeAssinatura(protectedB64, payload)); + return { "X-JWS-Signature": `${protectedB64}..${base64url(assinatura)}` }; } export function itemBoletoIniciada(n: number): Record { @@ -16,13 +41,13 @@ export function itemBoletoIniciada(n: number): Record { index: n, idDda: `DDA${n}`, numCtrlOrig: `CTRL${String(n).padStart(6, "0")}`, - numCodBarras: `8366000${n}`, + numCodBarras: `8366${String(n).padStart(40, "0")}`, vlInf: 1000.0, vlCbsInf: 9.0, vlIbsInf: 1.0, cnpjRaizPspRecDir: "12345678", cnpjRec: "12345678000199", - cnpjCpfPagOrig: "98765432000188", + cnpjPagOrig: "98765432000188", dtHrIni: "2026-07-20T10:00:00-03:00", dtVenc: "2026-08-01", dtHrLimPgto: "2026-08-01T23:59:59-03:00", diff --git a/packages/mock/test/matrices.test.ts b/packages/mock/test/matrices.test.ts index 40e7c9a..2a7c54f 100644 --- a/packages/mock/test/matrices.test.ts +++ b/packages/mock/test/matrices.test.ts @@ -23,13 +23,13 @@ function itemIniciadaBoleto(): Record { index: 1, idDda: "123", numCtrlOrig: "abc", - numCodBarras: "001", + numCodBarras: "00100000000000000000000000000000000000000000", vlInf: 10_000, vlCbsInf: 90, vlIbsInf: 10, cnpjRaizPspRecDir: "12345678", cnpjRec: "12345678000199", - cnpjCpfPagOrig: "98765432000188", + cnpjPagOrig: "98765432000188", dtHrIni: "2026-07-20T10:00:00-03:00", dtVenc: "2026-08-01", dtHrLimPgto: "2026-08-01T23:59:59-03:00", diff --git a/packages/mock/test/moc.test.ts b/packages/mock/test/moc.test.ts new file mode 100644 index 0000000..17cadbc --- /dev/null +++ b/packages/mock/test/moc.test.ts @@ -0,0 +1,215 @@ +// Mecanismo de Ocorrências (3.9), fluxo novo no contrato v1.1.0. +// +// O que estes testes protegem, além do caminho feliz: a discriminação entre +// solicitação e notificação é por PRESENÇA de campo, não por rota. As duas +// aceitam o mesmo tipo de ocorrência, e o que separa uma da outra é +// `codMotOcor`/`vlCbsEst`/`vlIbsEst` estarem presentes ou proibidos. Essa +// regra vem do próprio spec (allOf com required e not) e é o Ajv que a aplica, +// então um teste que só exercitasse o caminho feliz não notaria se ela caísse. +import { describe, expect, it } from "vitest"; +import { buildServer } from "../src/server.js"; +import { headersValidos } from "./helpers.js"; + +const TS = "2026-07-20T10:00:00-03:00"; +const PSP = "12345678"; + +function ocorrenciaBase(n: number): Record { + return { + index: n, + idOcor: `SOL12345678BOL20260623000000${n}`, + arrj: "BOL", + vlPago: 10.02, + vlCbsSegr: 5.01, + vlIbsSegr: 5.01, + dtHrPgto: TS, + dtHrLiq: TS, + cnpjRaizPspPag: "87654321", + cnpjRaizPspRecDir: PSP, + cnpjRec: "11444777000142", + cnpjPagOrig: "11444777000142", + cnpjCpfDest: "11444777000142", + idDda: `123A51231231231${n}FAS1`, + }; +} + +function solicitacao(n = 1): Record { + return { + infRequisicao: { dtHrMsg: TS }, + ocorrencias: [{ ...ocorrenciaBase(n), codMotOcor: "02", vlCbsEst: 5.01, vlIbsEst: 5.01 }], + }; +} + +function notificacao(n = 1): Record { + return { infRequisicao: { dtHrMsg: TS }, ocorrencias: [ocorrenciaBase(n)] }; +} + +describe("MOC: registro de ocorrências (3.9.2, 3.9.3)", () => { + it("aceita uma solicitação de estorno", async () => { + const app = buildServer(); + const res = await app.inject({ + method: "POST", + url: "/api/v1/moc/solicitacao", + headers: headersValidos(), + payload: solicitacao(), + }); + expect(res.statusCode).toBe(201); + expect(res.json().resourceId).toMatch(/^RES/); + }); + + it("aceita uma notificação", async () => { + const app = buildServer(); + const res = await app.inject({ + method: "POST", + url: "/api/v1/moc/notificacao", + headers: headersValidos(), + payload: notificacao(), + }); + expect(res.statusCode).toBe(201); + }); + + it("recusa solicitação sem os valores de estorno, que ela exige", async () => { + const app = buildServer(); + const res = await app.inject({ + method: "POST", + url: "/api/v1/moc/solicitacao", + headers: headersValidos(), + payload: notificacao(), // sem codMotOcor/vlCbsEst/vlIbsEst + }); + expect(res.statusCode).toBe(400); + expect(res.headers["content-type"]).toContain("application/problem+json"); + }); + + it("recusa notificação que traz valores de estorno, que ela proíbe", async () => { + const app = buildServer(); + const res = await app.inject({ + method: "POST", + url: "/api/v1/moc/notificacao", + headers: headersValidos(), + payload: solicitacao(), // com os campos que a notificação proíbe + }); + expect(res.statusCode).toBe(400); + }); +}); + +describe("MOC: consulta de ocorrências (3.9.4)", () => { + async function comUmaSolicitacao() { + const app = buildServer(); + await app.inject({ + method: "POST", + url: "/api/v1/moc/solicitacao", + headers: headersValidos(), + payload: solicitacao(), + }); + return app; + } + + it("devolve a ocorrência com a resposta da RFB/CGIBS", async () => { + const app = await comUmaSolicitacao(); + const res = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=1`, + headers: headersValidos(), + }); + expect(res.statusCode).toBe(200); + const [primeira] = res.json().ocorrencias; + expect(primeira.nsuId).toBe("1"); + expect(["RFB", "CGIBS"]).toContain(primeira.orgRespRes); + expect(["01", "02", "03"]).toContain(primeira.codParecer); + expect(["CBS", "IBS"]).toContain(primeira.tpTrib); + // Amarração com a ocorrência original: o identificador da transação volta. + expect(primeira.idDda).toBe("123A512312312311FAS1"); + }); + + it("204 quando não há ocorrência a partir daquele NSU", async () => { + const app = await comUmaSolicitacao(); + const res = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=99`, + headers: headersValidos(), + }); + expect(res.statusCode).toBe(204); + }); + + it("204 para outro PSP: ocorrência de um não vaza para o outro", async () => { + const app = await comUmaSolicitacao(); + const res = await app.inject({ + method: "GET", + url: "/api/v1/moc/99999999/ocorrencias?nsuInicial=1", + headers: headersValidos(), + }); + expect(res.statusCode).toBe(204); + }); + + it("nsuInicial é obrigatório", async () => { + const app = await comUmaSolicitacao(); + const res = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias`, + headers: headersValidos(), + }); + expect(res.statusCode).toBe(400); + expect(res.json().detail).toContain("nsuInicial"); + }); + + it("limite fora de 1..1000 é recusado, porque o spec limita a página", async () => { + const app = await comUmaSolicitacao(); + for (const limite of [0, 1001]) { + const res = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=1&limite=${limite}`, + headers: headersValidos(), + }); + expect(res.statusCode).toBe(400); + } + }); + + it("limite corta a página e o NSU avança", async () => { + const app = buildServer(); + for (const n of [1, 2, 3]) { + await app.inject({ + method: "POST", + url: "/api/v1/moc/solicitacao", + headers: headersValidos(), + payload: solicitacao(n), + }); + } + const pagina1 = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=1&limite=2`, + headers: headersValidos(), + }); + expect(pagina1.json().ocorrencias.map((o: { nsuId: string }) => o.nsuId)).toEqual(["1", "2"]); + + const pagina2 = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=3`, + headers: headersValidos(), + }); + expect(pagina2.json().ocorrencias.map((o: { nsuId: string }) => o.nsuId)).toEqual(["3"]); + }); + + it("a resposta é determinística: mesma entrada, mesmo parecer", async () => { + const parecer = async () => { + const app = await comUmaSolicitacao(); + const res = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=1`, + headers: headersValidos(), + }); + return res.json().ocorrencias[0].codParecer; + }; + expect(await parecer()).toBe(await parecer()); + }); + + it("idAprovEst só aparece quando o estorno não foi indeferido", async () => { + const app = await comUmaSolicitacao(); + const res = await app.inject({ + method: "GET", + url: `/api/v1/moc/${PSP}/ocorrencias?nsuInicial=1`, + headers: headersValidos(), + }); + const [o] = res.json().ocorrencias; + if (o.codParecer === "02") expect(o.idAprovEst).toBeUndefined(); + else expect(o.idAprovEst).toMatch(/^APROV\d{10}$/); + }); +}); diff --git a/packages/mock/test/scenario.test.ts b/packages/mock/test/scenario.test.ts index ef0e5f4..8ffae44 100644 --- a/packages/mock/test/scenario.test.ts +++ b/packages/mock/test/scenario.test.ts @@ -34,7 +34,7 @@ async function prepararBoletoPaga(app: ReturnType) { idDda: "DDA1", numCtrlOrig: "CTRL000001", numPgto: 1, - numIdentcBaixa: 1, + numIdentcBaixa: "1", vlPago: 500.0, vlCbsSegr: 4.0, vlIbsSegr: 0.4, @@ -59,7 +59,7 @@ describe("motor de cenarios RSUP (C12)", () => { await prepararBoletoPaga(app); const res = await disparar(app, { arranjo: "boleto", - idPsp: "PSP00001", + cnpjRaizPspRecDir: "PSP00001", chave: "CTRL000001", tipo: "cbs-correcao", procedimento: "padrao", @@ -82,7 +82,7 @@ describe("motor de cenarios RSUP (C12)", () => { await prepararBoletoPaga(app); const res = await disparar(app, { arranjo: "boleto", - idPsp: "PSP00001", + cnpjRaizPspRecDir: "PSP00001", chave: "CTRL000001", tipo: "ibs-correcao", procedimento: "padrao", @@ -99,7 +99,7 @@ describe("motor de cenarios RSUP (C12)", () => { await prepararBoletoPaga(app); const res = await disparar(app, { arranjo: "boleto", - idPsp: "PSP00001", + cnpjRaizPspRecDir: "PSP00001", chave: "CTRL000001", tipo: "cbs-em-aberto", procedimento: "padrao", @@ -115,7 +115,7 @@ describe("motor de cenarios RSUP (C12)", () => { await prepararBoletoPaga(app); const res = await disparar(app, { arranjo: "boleto", - idPsp: "PSP00001", + cnpjRaizPspRecDir: "PSP00001", chave: "CTRL000001", tipo: "cbs-correcao", procedimento: "simplificado", @@ -142,28 +142,31 @@ describe("motor de cenarios RSUP (C12)", () => { await prepararBoletoPaga(app); await disparar(app, { arranjo: "boleto", - idPsp: "PSP00009", + cnpjRaizPspRecDir: "PSP00009", chave: "CTRL000001", tipo: "cbs-correcao", procedimento: "padrao", }); const res = await app.inject({ method: "GET", - url: "/api/v1/out/boleto/PSP00009/tributos/stream/start", + url: "/api/v1/out/boleto/PSP00009/transacoes/stream/start", headers: headersValidos(), }); expect(res.statusCode).toBe(200); - const tributos = res.json().tributos; - expect(tributos).toHaveLength(1); - expect(tributos[0].codMsg).toBe("RSUP101"); - expect(tributos[0].nsuId).toBe(1); + // v1.1.0: a chave do corpo virou `transacoes` e o nsuId virou string. + const transacoes = res.json().transacoes; + expect(transacoes).toHaveLength(1); + expect(transacoes[0].codMsg).toBe("RSUP101"); + expect(transacoes[0].nsuId).toBe("1"); + // dtHrDisp entrou como obrigatorio no Retorno Super Inteligente: + expect(transacoes[0].dtHrDisp).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}-03:00$/); }); it("cenario sobre transacao inexistente responde 422", async () => { const app = buildServer(); const res = await disparar(app, { arranjo: "boleto", - idPsp: "PSP00001", + cnpjRaizPspRecDir: "PSP00001", chave: "NAO-EXISTE", tipo: "cbs-correcao", procedimento: "padrao", diff --git a/packages/mock/test/segregacao-fsm.test.ts b/packages/mock/test/segregacao-fsm.test.ts index 3a6bd25..7513a4d 100644 --- a/packages/mock/test/segregacao-fsm.test.ts +++ b/packages/mock/test/segregacao-fsm.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; import { buildServer } from "../src/server.js"; -import { gerarIdInfSegr, gerarIdRepasse } from "../src/domain/ids.js"; +import { gerarIdInfSegr, gerarIdLote, gerarIdRepasse } from "../src/domain/ids.js"; import { headersValidos } from "./helpers.js"; // C7 (rejeicao integral do lote), C8 (cross-validacao da finalizacao), @@ -14,7 +14,7 @@ function itemLoteBoleto(n: number, cbs = 9.0, ibs = 1.0): Record, idInfSegr: st async function enviarLote( app: ReturnType, idInfSegr: string, - idLote: string, + sequencialDoLote: number, itens: Record[], ) { return app.inject({ method: "POST", url: `/api/v1/boleto/segregacao/${idInfSegr}/lotes`, headers: headersValidos(), - payload: { infRequisicao: inf, dadosLoteSeg: { idLote }, transacoes: itens }, + // v1.1.0: idLote = idInfSegr + sequencial de 6 digitos (40 posicoes). + payload: { + infRequisicao: inf, + dadosLoteSeg: { idLote: gerarIdLote(idInfSegr, sequencialDoLote) }, + transacoes: itens, + }, }); } @@ -68,7 +73,7 @@ async function finalizar( headers: headersValidos(), payload: { infRequisicao: inf, - dadosFinalSeg: { idInfSegr, totalTrans, valorTotalCbs: cbs, valorTotalIbs: ibs }, + dadosFinalSeg: { idInfSegr, totalTrans, vlTotalCbs: cbs, vlTotalIbs: ibs }, }, }); } @@ -78,8 +83,8 @@ describe("fluxo feliz dos 3 passos", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 1); expect((await iniciarRemessa(app, id)).statusCode).toBe(201); - expect((await enviarLote(app, id, "L1", [itemLoteBoleto(1), itemLoteBoleto(2)])).statusCode).toBe(201); - expect((await enviarLote(app, id, "L2", [itemLoteBoleto(3)])).statusCode).toBe(201); + expect((await enviarLote(app, id, 1, [itemLoteBoleto(1), itemLoteBoleto(2)])).statusCode).toBe(201); + expect((await enviarLote(app, id, 2, [itemLoteBoleto(3)])).statusCode).toBe(201); const fim = await finalizar(app, id, 3, 27.0, 3.0); expect(fim.statusCode).toBe(201); expect(fim.json().totalTrans).toBe(3); @@ -92,13 +97,13 @@ describe("rejeicao integral do lote (C7)", () => { const id = gerarIdInfSegr("boleto", 2); await iniciarRemessa(app, id); const intruso = { ...itemLoteBoleto(2), txId: "intruso-no-boleto" }; - const res = await enviarLote(app, id, "L1", [itemLoteBoleto(1), intruso]); + const res = await enviarLote(app, id, 1, [itemLoteBoleto(1), intruso]); expect(res.statusCode).toBe(422); expect(res.json().title).toContain("rejeitado integralmente"); // Nada do lote (nem o item valido) entrou nos totais. expect(app.store.segregacao.obter(id)?.totalTrans).toBe(0); // Reenvio corrigido do lote fecha o fluxo (manual 3.5.2: corrigir e reenviar). - expect((await enviarLote(app, id, "L1", [itemLoteBoleto(1), itemLoteBoleto(2)])).statusCode).toBe(201); + expect((await enviarLote(app, id, 1, [itemLoteBoleto(1), itemLoteBoleto(2)])).statusCode).toBe(201); expect((await finalizar(app, id, 2, 18.0, 2.0)).statusCode).toBe(201); }); @@ -106,8 +111,8 @@ describe("rejeicao integral do lote (C7)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 3); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); - const conflito = await enviarLote(app, id, "L1", [itemLoteBoleto(2)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1)]); + const conflito = await enviarLote(app, id, 1, [itemLoteBoleto(2)]); expect(conflito.statusCode).toBe(422); expect(conflito.json().title).toContain("Conflito"); }); @@ -116,9 +121,9 @@ describe("rejeicao integral do lote (C7)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 30); await iniciarRemessa(app, id); - const r1 = await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); + const r1 = await enviarLote(app, id, 1, [itemLoteBoleto(1)]); expect(r1.statusCode).toBe(201); - const r2 = await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); + const r2 = await enviarLote(app, id, 1, [itemLoteBoleto(1)]); expect(r2.statusCode).toBe(200); expect(r2.json().title).toContain("Recebido Anteriormente"); expect(r2.json().resourceId).toBe(r1.json().resourceId); @@ -132,7 +137,7 @@ describe("cross-validacao da finalizacao (C8)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 4); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1)]); const res = await finalizar(app, id, 1, 9.01, 1.0); expect(res.statusCode).toBe(422); expect(res.json().title).toContain("divergente"); @@ -144,7 +149,7 @@ describe("cross-validacao da finalizacao (C8)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 5); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1), itemLoteBoleto(2)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1), itemLoteBoleto(2)]); const res = await finalizar(app, id, 3, 18.0, 2.0); expect(res.statusCode).toBe(422); }); @@ -153,7 +158,7 @@ describe("cross-validacao da finalizacao (C8)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 6); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1, 0.1, 0.1), itemLoteBoleto(2, 0.2, 0.2)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1, 0.1, 0.1), itemLoteBoleto(2, 0.2, 0.2)]); const ok = await finalizar(app, id, 2, 0.3, 0.3); expect(ok.statusCode).toBe(201); }); @@ -162,7 +167,7 @@ describe("cross-validacao da finalizacao (C8)", () => { describe("passos fora de ordem (C9)", () => { it("lote sem remessa iniciada: 422 (idInfSegr nao encontrado)", async () => { const app = buildServer(); - const res = await enviarLote(app, gerarIdInfSegr("boleto", 7), "L1", [itemLoteBoleto(1)]); + const res = await enviarLote(app, gerarIdInfSegr("boleto", 7), 1, [itemLoteBoleto(1)]); expect(res.statusCode).toBe(422); expect(res.json().title).toContain("nao encontrado"); }); @@ -171,7 +176,7 @@ describe("passos fora de ordem (C9)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 8); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1)]); const r1 = await finalizar(app, id, 1, 9.0, 1.0); expect(r1.statusCode).toBe(201); const replay = await finalizar(app, id, 1, 9.0, 1.0); @@ -185,7 +190,7 @@ describe("passos fora de ordem (C9)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 28); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1)]); await finalizar(app, id, 1, 9.0, 1.0); const conflito = await finalizar(app, id, 1, 9.99, 1.0); expect(conflito.statusCode).toBe(422); @@ -196,9 +201,9 @@ describe("passos fora de ordem (C9)", () => { const app = buildServer(); const id = gerarIdInfSegr("boleto", 9); await iniciarRemessa(app, id); - await enviarLote(app, id, "L1", [itemLoteBoleto(1)]); + await enviarLote(app, id, 1, [itemLoteBoleto(1)]); await finalizar(app, id, 1, 9.0, 1.0); - const tardio = await enviarLote(app, id, "L2", [itemLoteBoleto(2)]); + const tardio = await enviarLote(app, id, 2, [itemLoteBoleto(2)]); expect(tardio.statusCode).toBe(422); expect(app.store.segregacao.obter(id)?.totalTrans).toBe(1); }); @@ -235,7 +240,7 @@ describe("passos fora de ordem (C9)", () => { headers: headersValidos(), payload: { infRequisicao: inf, - dadosLoteSeg: { idLote: "L1" }, + dadosLoteSeg: { idLote: gerarIdLote(gerarIdInfSegr("boleto", 1), 1) }, transacoes: [ { index: 1, diff --git a/packages/mock/test/server.test.ts b/packages/mock/test/server.test.ts index 03a98a4..36599eb 100644 --- a/packages/mock/test/server.test.ts +++ b/packages/mock/test/server.test.ts @@ -1,18 +1,10 @@ import { describe, expect, it } from "vitest"; -import { gerarCorrelationId, gerarTimestampSplit } from "@splitbr/client"; import { buildServer } from "../src/server.js"; +import { headersValidos } from "./helpers.js"; -// C1 do TEST_STRATEGY: enforcement dos 4 headers obrigatorios da tabela do -// Manual de Integracao em /api/*, com problem+json nomeando o header. - -function headersValidos(): Record { - return { - messageId: crypto.randomUUID(), - correlationId: gerarCorrelationId(), - tenantId: "12345678000199", - timestamp: gerarTimestampSplit(), - }; -} +// C1 do TEST_STRATEGY, reescrito para o contrato v1.1.0: o enforcement deixou +// de ser dos 4 headers do v0.0.10 (que sumiram do contrato) e passou a ser da +// forma do X-JWS-Signature. function appComRotaDeTeste() { const app = buildServer(); @@ -20,44 +12,81 @@ function appComRotaDeTeste() { return app; } -describe("headers obrigatorios (C1)", () => { - for (const ausente of ["messageId", "correlationId", "tenantId", "timestamp"]) { - it(`400 nomeando '${ausente}' quando ausente`, async () => { - const app = appComRotaDeTeste(); - const h = headersValidos(); - delete h[ausente]; - const res = await app.inject({ method: "GET", url: "/api/v1/_teste", headers: h }); - expect(res.statusCode).toBe(400); - expect(res.headers["content-type"]).toContain("application/problem+json"); - const body = res.json(); - expect(body.header).toBe(ausente); - expect(body.detail).toContain(ausente); +describe("assinatura X-JWS-Signature (C1)", () => { + it("requisicao assinada passa", async () => { + const app = appComRotaDeTeste(); + const res = await app.inject({ + method: "GET", + url: "/api/v1/_teste", + headers: headersValidos(), }); - } + expect(res.statusCode).toBe(200); + }); + + // Decisao do mantenedor: sem assinatura o mock deixa passar por padrao, para + // `npx splitbr-mock` funcionar sem par de chaves. A fidelidade ao contrato + // fica atras de `exigirAssinatura`. + it("sem assinatura passa por padrao", async () => { + const app = appComRotaDeTeste(); + const res = await app.inject({ method: "GET", url: "/api/v1/_teste" }); + expect(res.statusCode).toBe(200); + }); - const invalidos: Array<[string, string]> = [ - ["messageId", "nao-e-uuid"], - ["correlationId", "curto"], - ["tenantId", "123"], - ["timestamp", "2026-07-20T10:00:00Z"], - ["timestamp", "2026-07-20T10:00:00.123-03:00"], + it("sem assinatura da 400 quando exigirAssinatura esta ligado", async () => { + const app = buildServer({ exigirAssinatura: true }); + app.get("/api/v1/_teste", async () => ({ ok: true })); + const res = await app.inject({ method: "GET", url: "/api/v1/_teste" }); + expect(res.statusCode).toBe(400); + expect(res.headers["content-type"]).toContain("application/problem+json"); + expect(res.json().header).toBe("X-JWS-Signature"); + }); + + // O ponto de existir a conferencia de forma: estes sao os erros que passariam + // por um mock que so olha se o header esta presente, e que a plataforma real + // rejeitaria. + const malformados: Array<[string, string]> = [ + ["nao e JWS", "qualquer-coisa"], + ["payload anexado em vez de detached", (() => { + const h = headersValidos()["X-JWS-Signature"] as string; + const [p = "", , a = ""] = h.split("."); + return `${p}.eyJhIjoxfQ.${a}`; + })()], + ["protected header ilegivel", "!!..AAAA"], ]; - for (const [header, valor] of invalidos) { - it(`400 nomeando '${header}' quando invalido (${valor})`, async () => { + for (const [caso, valor] of malformados) { + it(`400 quando a assinatura e malformada: ${caso}`, async () => { const app = appComRotaDeTeste(); - const h = { ...headersValidos(), [header]: valor }; - const res = await app.inject({ method: "GET", url: "/api/v1/_teste", headers: h }); + const res = await app.inject({ + method: "GET", + url: "/api/v1/_teste", + headers: { "X-JWS-Signature": valor }, + }); expect(res.statusCode).toBe(400); - expect(res.json().header).toBe(header); + expect(res.json().header).toBe("X-JWS-Signature"); + expect(res.json().problemas.length).toBeGreaterThan(0); }); } - it("headers validos passam e o correlationId e ecoado na resposta", async () => { + it("os 4 headers do contrato antigo nao sao mais exigidos", async () => { + const app = appComRotaDeTeste(); + // Nenhum deles presente, e mesmo assim passa: eles sairam do contrato. + const res = await app.inject({ + method: "GET", + url: "/api/v1/_teste", + headers: headersValidos(), + }); + expect(res.statusCode).toBe(200); + }); + + it("correlationId continua sendo ecoado quando vem, por utilidade de debug", async () => { const app = appComRotaDeTeste(); - const h = headersValidos(); - const res = await app.inject({ method: "GET", url: "/api/v1/_teste", headers: h }); + const res = await app.inject({ + method: "GET", + url: "/api/v1/_teste", + headers: { ...headersValidos(), correlationId: "txn-abc123def456789" }, + }); expect(res.statusCode).toBe(200); - expect(res.headers["correlationid"]).toBe(h.correlationId); + expect(res.headers["correlationid"]).toBe("txn-abc123def456789"); }); it("rota utilitaria /healthz fica isenta do enforcement", async () => { diff --git a/packages/mock/test/spec.test.ts b/packages/mock/test/spec.test.ts index 58bdfc2..4b04256 100644 --- a/packages/mock/test/spec.test.ts +++ b/packages/mock/test/spec.test.ts @@ -9,7 +9,7 @@ import { carregarSpec } from "../src/spec/load.js"; import { paraRotaFastify } from "../src/spec/routes.js"; const SPEC_EMBARCADO = fileURLToPath( - new URL("../data/spec/openapi-v0_0_10.json", import.meta.url), + new URL("../data/spec/openapi-v1_1_0.json", import.meta.url), ); describe("trava de hash do spec (C2)", () => { @@ -40,7 +40,7 @@ describe("trava de hash do spec (C2)", () => { ); const row = manifest .split("\n") - .find((l) => l.includes("swagger/openapi-v0_0_10.json")); + .find((l) => l.includes("swagger/openapi-v1_1_0.json")); expect(row).toBeDefined(); const pinado = row!.match(/\b([0-9a-f]{64})\b/)?.[1]; expect(pinado).toBe(PINNED_SPEC_SHA256); @@ -54,8 +54,8 @@ describe("trava de hash do spec (C2)", () => { describe("carregamento e compilacao (C3)", () => { const registro = carregarSpec(); - it("registra 32/32 paths do contrato", () => { - expect(registro.totalPaths).toBe(32); + it("registra 35/35 paths do contrato", () => { + expect(registro.totalPaths).toBe(35); }); it("toda operacao com requestBody tem validador compilado", () => { @@ -87,7 +87,7 @@ describe("multipleOf 0.01 sem bug de float (regressao review-hard M2)", () => { idDda: "DDA1", numCtrlOrig: "C1", numPgto: 1, - numIdentcBaixa: 1, + numIdentcBaixa: "1", vlPago: valor, vlCbsSegr: valor, vlIbsSegr: valor, diff --git a/packages/mock/test/stream.test.ts b/packages/mock/test/stream.test.ts index 6a3522c..0167ac0 100644 --- a/packages/mock/test/stream.test.ts +++ b/packages/mock/test/stream.test.ts @@ -22,7 +22,7 @@ async function poll(app: ReturnType, url: string) { describe("stream out (Super Inteligente, 3.6)", () => { it("janela vazia: 204 com proximoToken e streamId nos headers", async () => { const app = servidor(); - const res = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const res = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); expect(res.statusCode).toBe(204); expect(res.headers["proximotoken"]).toMatch(/^S/); expect(res.headers["streamid"]).toMatch(/^STREAM-/); @@ -32,21 +32,21 @@ describe("stream out (Super Inteligente, 3.6)", () => { const app = servidor(); app.store.eventos.publicar("boleto", "PSP00001", evento(1)); app.store.eventos.publicar("boleto", "PSP00001", evento(2)); - const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); expect(r1.statusCode).toBe(200); const corpo1 = r1.json(); - expect(corpo1.tributos.map((t: { nsuId: number }) => t.nsuId)).toEqual([1, 2]); + expect(corpo1.transacoes.map((t: { nsuId: string }) => t.nsuId)).toEqual(["1", "2"]); const token1 = r1.headers["proximotoken"] as string; app.store.eventos.publicar("boleto", "PSP00001", evento(3)); - const r2 = await poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token1}`); + const r2 = await poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token1}`); expect(r2.statusCode).toBe(200); - expect(r2.json().tributos.map((t: { nsuId: number }) => t.nsuId)).toEqual([3]); + expect(r2.json().transacoes.map((t: { nsuId: string }) => t.nsuId)).toEqual(["3"]); }); it("evento publicado DURANTE a janela resolve antes do timeout", async () => { const app = buildServer({ streamTimeoutMs: 2000 }); - const pendente = poll(app, "/api/v1/out/pix-dinamico/PSP00002/tributos/stream/start"); + const pendente = poll(app, "/api/v1/out/pix-dinamico/PSP00002/transacoes/stream/start"); const inicio = Date.now(); setTimeout(() => { app.store.eventos.publicar("pix-dinamico", "PSP00002", { codMsg: "RSUP201", txId: "t1", vlInf: 5.0 }); @@ -59,31 +59,31 @@ describe("stream out (Super Inteligente, 3.6)", () => { it("token antigo e invalidado apos o consumo (rotacao)", async () => { const app = servidor(); app.store.eventos.publicar("boleto", "PSP00001", evento(1)); - const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); const token1 = r1.headers["proximotoken"] as string; - await poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token1}`); - const reuso = await poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token1}`); + await poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token1}`); + const reuso = await poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token1}`); expect(reuso.statusCode).toBe(422); }); it("DELETE encerra o stream; poll seguinte responde 422", async () => { const app = servidor(); - const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); const token = r1.headers["proximotoken"] as string; const del = await app.inject({ method: "DELETE", - url: `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`, + url: `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`, headers: headersValidos(), }); expect(del.statusCode).toBe(204); - const depois = await poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`); + const depois = await poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`); expect(depois.statusCode).toBe(422); }); - it("streams por arranjo/idPsp sao independentes", async () => { + it("streams por arranjo/cnpjRaizPspRecDir sao independentes", async () => { const app = servidor(); app.store.eventos.publicar("boleto", "PSPA0001", evento(1)); - const outro = await poll(app, "/api/v1/out/boleto/PSPB0002/tributos/stream/start"); + const outro = await poll(app, "/api/v1/out/boleto/PSPB0002/transacoes/stream/start"); expect(outro.statusCode).toBe(204); }); }); @@ -92,19 +92,19 @@ describe("modos retroativo com ledger de entregas (3.7, review-hard M3)", () => async function entregarTudo(app: ReturnType, qtde: number) { // publica e CONSOME via out-stream para alimentar o ledger de entregas for (let i = 1; i <= qtde; i++) app.store.eventos.publicar("boleto", "PSP00001", evento(i)); - const r = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const r = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); return { streamId: r.headers["streamid"] as string, res: r }; } - it("modo 2 (fromNsu+toNsu+streamId): so o que AQUELE stream entregou", async () => { + it("modo 2 (nsuInicial+nsuFinal+streamId): so o que AQUELE stream entregou", async () => { const app = servidor(); const { streamId } = await entregarTudo(app, 3); const res = await poll( app, - `/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=1&toNsu=2&streamId=${streamId}`, + `/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=1&nsuFinal=2&streamId=${streamId}`, ); expect(res.statusCode).toBe(200); - expect(res.json().tributos.map((t: { nsuId: number }) => t.nsuId)).toEqual([1, 2]); + expect(res.json().transacoes.map((t: { nsuId: string }) => t.nsuId)).toEqual(["1", "2"]); }); it("modo 3 (stream encerrada): limitado ao entregue, nunca tail vivo", async () => { @@ -113,24 +113,24 @@ describe("modos retroativo com ledger de entregas (3.7, review-hard M3)", () => const token = res.headers["proximotoken"] as string; await app.inject({ method: "DELETE", - url: `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`, + url: `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`, headers: headersValidos(), }); // eventos publicados DEPOIS do encerramento nao entram na consulta app.store.eventos.publicar("boleto", "PSP00001", evento(3)); const retro = await poll( app, - `/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=1&streamId=${streamId}`, + `/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=1&streamId=${streamId}`, ); expect(retro.statusCode).toBe(200); - expect(retro.json().tributos.map((t: { nsuId: number }) => t.nsuId)).toEqual([1, 2]); + expect(retro.json().transacoes.map((t: { nsuId: string }) => t.nsuId)).toEqual(["1", "2"]); }); it("streamId desconhecido: 422", async () => { const app = servidor(); const res = await poll( app, - "/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=1&streamId=STREAM-999", + "/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=1&streamId=STREAM-999", ); expect(res.statusCode).toBe(422); }); @@ -142,17 +142,17 @@ describe("modos retroativo com ledger de entregas (3.7, review-hard M3)", () => app.store.eventos.publicar("boleto", "PSP00001", evento(3)); const res = await poll( app, - "/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=1", + "/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=1", ); expect(res.statusCode).toBe(200); - expect(res.json().tributos.map((t: { nsuId: number }) => t.nsuId)).toEqual([1, 2]); + expect(res.json().transacoes.map((t: { nsuId: string }) => t.nsuId)).toEqual(["1", "2"]); }); - it("toNsu nao numerico: 400", async () => { + it("nsuFinal nao numerico: 400", async () => { const app = servidor(); const res = await poll( app, - "/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=1&toNsu=abc", + "/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=1&nsuFinal=abc", ); expect(res.statusCode).toBe(400); }); @@ -160,12 +160,12 @@ describe("modos retroativo com ledger de entregas (3.7, review-hard M3)", () => it("reuso concorrente do mesmo token: exatamente um poll vence (claim atomico)", async () => { const app = servidor(); app.store.eventos.publicar("boleto", "PSP00001", evento(1)); - const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); const token = r1.headers["proximotoken"] as string; app.store.eventos.publicar("boleto", "PSP00001", evento(2)); const [a, b] = await Promise.all([ - poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`), - poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`), + poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`), + poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`), ]); const codes = [a.statusCode, b.statusCode].sort(); expect(codes).toEqual([200, 422]); @@ -175,15 +175,15 @@ describe("modos retroativo com ledger de entregas (3.7, review-hard M3)", () => const app = buildServer({ streamTimeoutMs: 400 }); const r1 = await app.inject({ method: "GET", - url: "/api/v1/out/boleto/PSP00001/tributos/stream/start", + url: "/api/v1/out/boleto/PSP00001/transacoes/stream/start", headers: headersValidos(), }); const token = r1.headers["proximotoken"] as string; - const emVoo = poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`); + const emVoo = poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`); await new Promise((r) => setTimeout(r, 50)); const del = await app.inject({ method: "DELETE", - url: `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`, + url: `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`, headers: headersValidos(), }); expect(del.statusCode).toBe(204); @@ -194,47 +194,47 @@ describe("modos retroativo com ledger de entregas (3.7, review-hard M3)", () => it("streamId so vai no header do start do out-stream (spec)", async () => { const app = servidor(); app.store.eventos.publicar("boleto", "PSP00001", evento(1)); - const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/tributos/stream/start"); + const r1 = await poll(app, "/api/v1/out/boleto/PSP00001/transacoes/stream/start"); expect(r1.headers["streamid"]).toBeDefined(); const token = r1.headers["proximotoken"] as string; app.store.eventos.publicar("boleto", "PSP00001", evento(2)); - const r2 = await poll(app, `/api/v1/out/boleto/PSP00001/tributos/stream/${token}`); + const r2 = await poll(app, `/api/v1/out/boleto/PSP00001/transacoes/stream/${token}`); expect(r2.headers["streamid"]).toBeUndefined(); - const retro = await poll(app, "/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=1"); + const retro = await poll(app, "/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=1"); expect(retro.headers["streamid"]).toBeUndefined(); }); }); describe("consulta retroativa (3.7)", () => { - it("intervalo fromNsu/toNsu entrega o recorte e depois 204 com token final", async () => { + it("intervalo nsuInicial/nsuFinal entrega o recorte e depois 204 com token final", async () => { const app = servidor(); for (let i = 1; i <= 4; i++) app.store.eventos.publicar("boleto", "PSP00001", evento(i)); const r1 = await poll( app, - "/api/v1/retroativo/boleto/PSP00001/tributos/stream/start?fromNsu=2&toNsu=3", + "/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start?nsuInicial=2&nsuFinal=3", ); expect(r1.statusCode).toBe(200); - expect(r1.json().tributos.map((t: { nsuId: number }) => t.nsuId)).toEqual([2, 3]); + expect(r1.json().transacoes.map((t: { nsuId: string }) => t.nsuId)).toEqual(["2", "3"]); const token = r1.headers["proximotoken"] as string; expect(token).toMatch(/^R/); - const r2 = await poll(app, `/api/v1/retroativo/boleto/PSP00001/tributos/stream/${token}`); + const r2 = await poll(app, `/api/v1/retroativo/boleto/PSP00001/transacoes/stream/${token}`); expect(r2.statusCode).toBe(204); const tokenFinal = r2.headers["proximotoken"] as string; const del = await app.inject({ method: "DELETE", - url: `/api/v1/retroativo/boleto/PSP00001/tributos/stream/${tokenFinal}`, + url: `/api/v1/retroativo/boleto/PSP00001/transacoes/stream/${tokenFinal}`, headers: headersValidos(), }); expect(del.statusCode).toBe(204); }); - it("fromNsu ausente responde 400 (parametro obrigatorio do contrato)", async () => { + it("nsuInicial ausente responde 400 (parametro obrigatorio do contrato)", async () => { const app = servidor(); - const res = await poll(app, "/api/v1/retroativo/boleto/PSP00001/tributos/stream/start"); + const res = await poll(app, "/api/v1/retroativo/boleto/PSP00001/transacoes/stream/start"); expect(res.statusCode).toBe(400); - expect(res.json().detail).toContain("fromNsu"); + expect(res.json().detail).toContain("nsuInicial"); }); it("retroativo nao espera a janela: 204 imediato sem eventos no recorte", async () => { @@ -242,7 +242,7 @@ describe("consulta retroativa (3.7)", () => { const inicio = Date.now(); const res = await poll( app, - "/api/v1/retroativo/pix-dinamico/PSP00001/tributos/stream/start?fromNsu=1", + "/api/v1/retroativo/pix-dinamico/PSP00001/transacoes/stream/start?nsuInicial=1", ); expect(res.statusCode).toBe(204); expect(Date.now() - inicio).toBeLessThan(1000); diff --git a/packages/mock/test/transacao.test.ts b/packages/mock/test/transacao.test.ts index a307a99..6f83a1b 100644 --- a/packages/mock/test/transacao.test.ts +++ b/packages/mock/test/transacao.test.ts @@ -38,7 +38,7 @@ function itemPreliminarBoleto(n: number): Record { idDda: `DDA${n}`, numCtrlOrig: `CTRL${String(n).padStart(6, "0")}`, numPgto: n, - numIdentcBaixa: n, + numIdentcBaixa: String(n), vlPago: 1000.0, vlCbsSegr: 9.0, vlIbsSegr: 1.0, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4bfd086..1dcdef1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,6 +25,9 @@ importers: specifier: ^0.17.0 version: 0.17.0 devDependencies: + '@types/node': + specifier: ^26.1.1 + version: 26.1.1 tsdown: specifier: ^0.22.12 version: 0.22.12(typescript@7.0.2) diff --git a/scripts/drift-check.mjs b/scripts/drift-check.mjs index 39e64ff..e178c68 100644 --- a/scripts/drift-check.mjs +++ b/scripts/drift-check.mjs @@ -10,7 +10,8 @@ // vendorado e "setup-error": problema nosso, nao drift, e reprova sempre. // // Cobertura: os tres primeiros alvos NAO alimentam o codegen. O spec que gera -// @splitbr/client e @splitbr/mock e vendor/swagger/openapi-v0_0_10.json. +// @splitbr/client e @splitbr/mock e vendor/swagger/openapi-v1_1_0.json (desde a +// versao 0.2.0 dos pacotes; ate a 0.1.1 era o openapi-v0_0_10.json). // // Ate 2026-09-04 este comentario afirmava que nao havia fonte publica para ele // e que por isso nao dava para monitora-lo (o gap D-4). A afirmacao era falsa: diff --git a/vendor/MANIFEST.md b/vendor/MANIFEST.md index 32b7cd4..51a010d 100644 --- a/vendor/MANIFEST.md +++ b/vendor/MANIFEST.md @@ -10,14 +10,14 @@ When a file carries more than one row, the row with the latest `Retrieved` date | File | Version | Source | Retrieved | SHA-256 | |---|---|---|---|---| -| swagger/openapi-v0_0_10.json | OAS 3.1, API v0.0.10, 32 paths, 57 schemas (SUPERSEDIDO pelo v1.1.0 em 24/08/2026; ainda e o contrato que gera os pacotes publicados) | https://www.cgibs.gov.br/upload/arquivos/202606/03172158-openapi-v0-0-10.zip (URL confirmada em 2026-09-04: o zip baixa sem login e o JSON dentro dele e byte-identico a este hash; listado em https://www.cgibs.gov.br/split-payment sob "Versoes anteriores") | 2026-07-19 | c5f60c849b22149d90ac2e3df6fcbe3ff9b0fb1f0c8b6463622fabb415629e2b | +| swagger/openapi-v0_0_10.json | OAS 3.1, API v0.0.10, 32 paths, 57 schemas (SUPERSEDIDO pelo v1.1.0 em 24/08/2026; gerou os pacotes ate a versao 0.1.1) | https://www.cgibs.gov.br/upload/arquivos/202606/03172158-openapi-v0-0-10.zip (URL confirmada em 2026-09-04: o zip baixa sem login e o JSON dentro dele e byte-identico a este hash; listado em https://www.cgibs.gov.br/split-payment sob "Versoes anteriores") | 2026-07-19 | c5f60c849b22149d90ac2e3df6fcbe3ff9b0fb1f0c8b6463622fabb415629e2b | | swagger/calculadora-openapi.portal.json | OAS 3.1.0, info.version v0, 36 paths | https://consumo.tributos.gov.br/servico/calcular-tributos-consumo/api/api-docs | 2026-07-20 | fc821c94dcfc3efebdddbbe033a0cdaeb0041a210e12111c169af7f452918c36 | | swagger/calculadora-openapi.piloto.json | OAS 3.1.0, info.version v0, 36 paths | https://piloto-cbs.tributos.gov.br/servico/calculadora-consumo/api/api-docs | 2026-07-20 | 7483d0029c985c46da901509977a1f4644e172d27168d4c53421202b468464be | | swagger/calculadora-openapi.piloto.json | OAS 3.1.0, info.version v0, 36 paths (re-vendorado apos o drift da issue #1; PINADO) | https://piloto-cbs.tributos.gov.br/servico/calculadora-consumo/api/api-docs | 2026-08-03 | 1ce6a0cb9a695669f751f9ab76d9068b4e82fbdd9df202d9fc61b58cd4b17ae0 | | swagger/calculadora-openapi.local.json | OAS 3.1.0, info.version v0, 37 paths (component api-regime-geral 1.2.4 via Docker) | http://localhost:18080/api/api-docs (container from calculadora/calculadora.tar.gz) | 2026-07-20 | 957593b74a81109fa66acfe570ab875225e620facf60f13258042220a075cf35 | | swagger/api-split-openapi.portal.json | OAS 3.1.0, info.version v0, 2 paths (Split Payment Simplificado) | https://consumo.tributos.gov.br/servico/calcular-tributos-consumo/api-split/api-docs | 2026-07-20 | 82c95912c1aed19ae77059a0b99afa42eb2f868bb198e9b9a74bf23581c9be42 | | swagger/api-split-openapi.local.json | OAS 3.1.0, info.version v0, 2 paths (api-split-payment-simplificado.jar via Docker, :8081/api) | http://localhost:18081/api/api-docs (container from calculadora/calculadora.tar.gz) | 2026-07-20 | 43ca11b929d01abecf4b249c4351cf56383ce5deaeda025135071bf5f43954d9 | -| swagger/openapi-v1_1_0.json | OAS 3.1, API v1.1.0, 35 paths, 78 schemas (SUBSTITUI o v0.0.10 como contrato corrente da Plataforma; ainda NAO alimenta o codegen) | https://www.cgibs.gov.br/upload/arquivos/202608/24154448-openapi-v1-1-0.zip (listado em https://www.cgibs.gov.br/split-payment sob "Manual de Integracao - Versao atual") | 2026-09-04 | 1a14b04e7e910b31c14913908ae6a8ce050d5b27afc2cee844a44959ee1621e7 | +| swagger/openapi-v1_1_0.json | OAS 3.1, API v1.1.0, 35 paths, 78 schemas (contrato corrente da Plataforma; ALIMENTA o codegen desde @splitbr/client 0.2.0) | https://www.cgibs.gov.br/upload/arquivos/202608/24154448-openapi-v1-1-0.zip (listado em https://www.cgibs.gov.br/split-payment sob "Manual de Integracao - Versao atual") | 2026-09-04 | 1a14b04e7e910b31c14913908ae6a8ce050d5b27afc2cee844a44959ee1621e7 | | swagger/calculadora-openapi.portal.json | OAS 3.1.0, info.version v0, 40 paths, 82 schemas (re-vendorado apos o drift da issue #6; PINADO) | https://consumo.tributos.gov.br/servico/calcular-tributos-consumo/api/api-docs | 2026-09-04 | ac750153380b873185423a55f525748bbb15844ec93b600c6e1a8ae3d3ab58c5 | | swagger/calculadora-openapi.piloto.json | OAS 3.1.0, info.version v0, 40 paths, 82 schemas (re-vendorado junto com o portal; PINADO) | https://piloto-cbs.tributos.gov.br/servico/calculadora-consumo/api/api-docs | 2026-09-04 | c86c47d3be7bbbe32fe70c69ac5fa3cf5613628b5175ac4455f477774c10aefa | | cgibs-split-payment-artefatos.json | Inventario dos 6 artefatos linkados na pagina oficial do Split Payment no CGIBS; alvo do quarto check de drift | https://www.cgibs.gov.br/split-payment (derivado: extracao dos links /upload/arquivos/) | 2026-09-04 | 9c101d0def12d2bc0f48e6c4ffa14d2803786dcfd1b613f32dafcc3937977638 | @@ -26,7 +26,7 @@ Contract diff note (2026-07-20) **[SUPERSEDIDA em 2026-08-03, veja a nota abaixo Contract diff note (2026-08-03) **[SUPERSEDIDA em 2026-09-04, veja a nota abaixo; mantida como registro do que era verdade naquela data]**: o piloto **convergiu para o portal**. O `cTribNac` do piloto agora aceita só 4 dígitos (`^\d{4}$`), igual ao portal, e a descrição do campo mudou junto ("4 ou 6 dígitos" virou "4 dígitos"). Ou seja, a divergência descrita na nota de 2026-07-20 deixou de existir, e na direção oposta à esperada: o piloto recuou para o comportamento do portal em vez de anteceder uma mudança dele. Portal e api-split seguem inalterados (verificado ao vivo em 2026-08-03). Uma segunda diferença apareceu no mesmo intervalo: no exemplo `Transferências CBS Example` de `/calculadora/dados-abertos/transferencias-cbs`, o valor deixou de ser um array JSON e virou uma string contendo JSON, e essa string tem vírgula sobrando, então não é JSON válido. É regressão de autoria upstream num exemplo, não mudança de schema, e não afeta geração de código. Detectado pelo workflow semanal (issue #1, run 30274464570). Local (1.2.4) adds `/versao/status` and has further minor diffs vs portal. Nota de hash (vale para portal, piloto e api-split): the hosted spec's `servers[0].url` stamps the responding backend instance's port (observed :11088 then :11011 an hour apart, e :11202 -> :6069 na captura de 2026-09-04), so its byte hash is capture-specific; por isso o `drift-check.mjs` compara conteudo normalizado sem o bloco `servers` da raiz, e nunca hash de bytes; the local api-split spec is content-identical to the portal one after removing the servers block. -Contract diff note (2026-09-04, ATUAL): **o contrato da Plataforma Publica saiu do v0.0.10 para o v1.1.0**, publicado no CGIBS em 24/08/2026 e pareado com o Manual de Integracao v1.1.0. A mudanca quebra o contrato: as 12 rotas de stream trocaram `{idPsp}/tributos` por `{cnpjRaizPspRecDir}/transacoes`, entraram 3 rotas do Mecanismo de Ocorrencias (`/api/v1/moc/notificacao`, `/api/v1/moc/solicitacao`, `/api/v1/moc/{cnpjRaizPspRecDir}/ocorrencias`), os schemas foram de 57 para 78 com 33 dos 55 compartilhados alterados, e o header `X-JWS-Signature` passou a ser `required: true` nas 43 operacoes. O v1.1.0 esta vendorado aqui como arquivo NOVO e **ainda nao alimenta o codegen**: `@splitbr/client` e `@splitbr/mock` seguem gerados do v0.0.10, e a migracao e um major bump com task propria. Na familia Calculadora, o portal divergiu (issue #6, aberta em 2026-08-31) e foi re-vendorado: 36 -> 40 rotas, com `/calculadora/nfse/local-operacao` trocando o campo unico `localOperacao` por `codigoLocalFornecimento`/`localFornecimento`/`codigoLocalIncidencia`/`localIncidencia`, e `/calculadora/nfse/indicador-operacao` apontando para um schema proprio (`NfseIndicadorOperacaoOutput`). A Calculadora de producao esta em app 1.3.1-0e46e51f e banco V0043 (31/08/2026), contra o 1.2.4 / V0039 da distribuicao offline vendorada em vendor/calculadora/. +Contract diff note (2026-09-04, ATUAL): **o contrato da Plataforma Publica saiu do v0.0.10 para o v1.1.0**, publicado no CGIBS em 24/08/2026 e pareado com o Manual de Integracao v1.1.0. A mudanca quebra o contrato: as 12 rotas de stream trocaram `{idPsp}/tributos` por `{cnpjRaizPspRecDir}/transacoes`, entraram 3 rotas do Mecanismo de Ocorrencias (`/api/v1/moc/notificacao`, `/api/v1/moc/solicitacao`, `/api/v1/moc/{cnpjRaizPspRecDir}/ocorrencias`), os schemas foram de 57 para 78 com 33 dos 55 compartilhados alterados, e o header `X-JWS-Signature` passou a ser `required: true` nas 43 operacoes. O v1.1.0 esta vendorado aqui como arquivo NOVO e **alimenta o codegen desde a versao 0.2.0** dos dois pacotes; o v0.0.10 fica como historico do que gerou ate a 0.1.1. Na familia Calculadora, o portal divergiu (issue #6, aberta em 2026-08-31) e foi re-vendorado: 36 -> 40 rotas, com `/calculadora/nfse/local-operacao` trocando o campo unico `localOperacao` por `codigoLocalFornecimento`/`localFornecimento`/`codigoLocalIncidencia`/`localIncidencia`, e `/calculadora/nfse/indicador-operacao` apontando para um schema proprio (`NfseIndicadorOperacaoOutput`). A Calculadora de producao esta em app 1.3.1-0e46e51f e banco V0043 (31/08/2026), contra o 1.2.4 / V0039 da distribuicao offline vendorada em vendor/calculadora/. Aviso de coleta (2026-09-04): o `api-docs` do **piloto** passou a responder um desafio anti-bot (F5 Shape/TSPD, HTML com `window["bobcmn"]`) com HTTP 200 no lugar do JSON, ao menos sob requisicoes repetidas. O `curl` toma o desafio; o `fetch` do Node (undici) passa, provavelmente por fingerprint TLS diferente, e foi por ele que a captura saiu. Quem for recapturar a mao pelo curl vai concluir por engano que o piloto esta fora do ar. Um coletor que so olhe o status code trata esse HTML como sucesso; o `drift-check.mjs` cobre isso classificando resposta nao-JSON como `malformed`.