diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml new file mode 100644 index 0000000..4d5677d --- /dev/null +++ b/.github/codeql/codeql-config.yml @@ -0,0 +1,8 @@ +name: "Configuracao do CodeQL" + +# Arquivos de teste usam certificados autoassinados e chaves fracas de +# proposito (servidor mTLS local, senhas de fixture) - padroes que disparariam +# alertas de seguranca que nao se aplicam fora de teste. O codigo de producao +# (fora de src/**/*.teste.ts) continua totalmente analisado. +paths-ignore: + - '**/*.teste.ts' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index ace09d0..91912e1 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -28,6 +28,7 @@ jobs: uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} + config-file: ./.github/codeql/codeql-config.yml - name: Analisar uses: github/codeql-action/analyze@v3 diff --git a/README.md b/README.md index ecef5ef..fe538fa 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Em desenvolvimento inicial. A tabela abaixo reflete o estado real de cada módul | `certificado` | Leitura de certificado A1 (.pfx/.p12) | Feito | | `assinatura` | Assinatura XML (XMLDSig) | Feito | | `dps` | Tipos e serialização da DPS, incluindo o bloco IBSCBS (XML validado contra o XSD oficial) | Feito; grupo gReeRepRes (reembolso/repasse/ressarcimento de terceiros) ainda não | -| `cliente` | Cliente HTTP mTLS para o SEFIN Nacional (produção e homologação) | Feito; endpoints do ADN (DFe, parametrização) ainda não | +| `cliente` | Cliente HTTP mTLS para o SEFIN Nacional e o ADN (produção e homologação) | Feito | | `danfse` | Geração do DANFSe em PDF (NT 008/2026) | Feito; canhoto e dedução por documento ficam pra depois | ## Por que este projeto existe @@ -32,6 +32,7 @@ O restante do SDK (certificado, assinatura, cliente HTTP) existe porque é pré- - [nfse-nacional/nfse-php](https://github.com/nfse-nacional/nfse-php): usado como referência de escopo e organização. - [Nota Técnica nº 008 (DANFSe)](https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/rtc/nt-008-se-cgnfse-danfse-20260714-v1-02.pdf): especificação oficial usada como fonte do leiaute do DANFSe. - [Esquemas XSD da NFS-e Nacional](https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/documentacao-atual/nfse-esquemas_xsd-v1-01-20260209.zip): baixados direto do gov.br e versionados em [`schemas/nfse/v1.01`](schemas/nfse/v1.01) - fonte de verdade dos tipos e da serialização da DPS, e usados nos testes pra validar o XML gerado contra o schema oficial. +- Especificações OpenAPI do ADN (Ambiente de Dados Nacional) e do SEFIN Nacional: baixadas direto do gov.br e versionadas em [`schemas/adn/v1`](schemas/adn/v1) - fonte de verdade dos endpoints do módulo `cliente`. - [Liberation Sans](https://github.com/liberationfonts/liberation-fonts) e [DejaVu Sans](https://dejavu-fonts.github.io/): fontes livres embutidas no gerador de DANFSe (substitutas de Arial e Microsoft Sans Serif, que são proprietárias e não podem ser redistribuídas). Licenças em [`assets/fonts`](assets/fonts). ## Especificações @@ -41,6 +42,7 @@ O restante do SDK (certificado, assinatura, cliente HTTP) existe porque é pré- - NFS-e Nacional - Esquemas XML v1.01 - [gov.br/nfse](https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/documentacao-atual/nfse-esquemas_xsd-v1-01-20260209.zip) - DANFSe - Nota Técnica nº 008, versão 1.02 - [gov.br/nfse](https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/rtc/nt-008-se-cgnfse-danfse-20260714-v1-02.pdf) +- API do ADN (Contribuinte e Parâmetros Municipais) e do SEFIN Nacional - [gov.br/nfse](https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/apis-prod-restrita-e-producao) - XML Signature (XMLDSig) - [W3C](https://www.w3.org/TR/xmldsig-core1/), conforme exigido pelo contrato da DPS diff --git a/package.json b/package.json index 401e769..114b3a5 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "files": [ "dist", "schemas/**/*.xsd", + "schemas/**/*.json", "assets/fonts", "LICENSE", "NOTICE" diff --git a/schemas/adn/v1/adn-contribuinte-v1.json b/schemas/adn/v1/adn-contribuinte-v1.json new file mode 100644 index 0000000..c481b74 --- /dev/null +++ b/schemas/adn/v1/adn-contribuinte-v1.json @@ -0,0 +1,399 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - ADN Contribuinte", + "description": "# Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a distribuição de documentos fiscais para os contribuintes.\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso.\n\n # Padrões técnicos\n A API NFS-e utiliza a arquitetura RESTful que segue os seguintes padrões técnicos:\n\t \n- **Protocolo de comunicação** : TLS 1.2 ou superior com autenticação mútua\n\n- **Formato para troca de mensagens** : JSON\n\n- **Formato dos documentos** : XML 1.0 (https://www.w3.org/TR/REC-xml)\n\n- **Codificação de caracteres** : UTF-8\n\n- **Certificado digital** : Emitido por Autoridade Certificadora ICP-Brasil, tipo A1 ou A3, CNPJ , com \"Autenticação do Cliente\"\n\n- **Padrão de assinatura dos documentos XML** : XMLDSIG (https://www.w3.org/TR/xmldsig-core/)\n\n- **Padrão de compactação dos documentos XML para troca de mensagens** : GZip com representao base64binary", + "version": "v1", + "x-logo": { + "url": "/contribuintes/images/logo_nfse_vertical.png", + "altText": "Logo da API", + "backgroundColor": "#FFFFFF" + } + }, + "paths": { + "/DFe/{NSU}": { + "get": { + "tags": [ + "DistribuicaoContribuinte" + ], + "summary": "Retorna o Documento Fiscal de Serviço correspondenente ao NSU informado", + "parameters": [ + { + "name": "NSU", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "cnpjConsulta", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "lote", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + } + } + } + }, + "/NFSe/{ChaveAcesso}/Eventos": { + "get": { + "tags": [ + "DistribuicaoContribuinte" + ], + "summary": "Retorna os Documentos Fiscais de Serviço do tipo Evento vinculados à chave de acesso informada", + "parameters": [ + { + "name": "ChaveAcesso", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "StatusProcessamentoDistribuicao": { + "enum": [ + "REJEICAO", + "NENHUM_DOCUMENTO_LOCALIZADO", + "DOCUMENTOS_LOCALIZADOS" + ], + "type": "string" + }, + "TipoDocumentoRequisicao": { + "enum": [ + "NENHUM", + "DPS", + "PEDIDO_REGISTRO_EVENTO", + "NFSE", + "EVENTO", + "CNC" + ], + "type": "string" + }, + "TipoEvento": { + "enum": [ + "CANCELAMENTO", + "SOLICITACAO_CANCELAMENTO_ANALISE_FISCAL", + "CANCELAMENTO_POR_SUBSTITUICAO", + "CANCELAMENTO_DEFERIDO_ANALISE_FISCAL", + "CANCELAMENTO_INDEFERIDO_ANALISE_FISCAL", + "CONFIRMACAO_PRESTADOR", + "REJEICAO_PRESTADOR", + "CONFIRMACAO_TOMADOR", + "REJEICAO_TOMADOR", + "CONFIRMACAO_INTERMEDIARIO", + "REJEICAO_INTERMEDIARIO", + "CONFIRMACAO_TACITA", + "ANULACAO_REJEICAO", + "CANCELAMENTO_POR_OFICIO", + "BLOQUEIO_POR_OFICIO", + "DESBLOQUEIO_POR_OFICIO", + "INCLUSAO_NFSE_DAN", + "TRIBUTOS_NFSE_RECOLHIDOS" + ], + "type": "string" + }, + "DistribuicaoNSU": { + "type": "object", + "properties": { + "NSU": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "ChaveAcesso": { + "type": "string", + "nullable": true + }, + "TipoDocumento": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoDocumentoRequisicao" + } + ] + }, + "TipoEvento": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoEvento" + } + ], + "nullable": true + }, + "ArquivoXml": { + "type": "string", + "nullable": true + }, + "DataHoraGeracao": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "Enum": { + "type": "object", + "additionalProperties": false + }, + "MensagemProcessamento": { + "type": "object", + "properties": { + "Mensagem": { + "allOf": [ + { + "$ref": "#/components/schemas/Enum" + } + ], + "nullable": true + }, + "Parametros": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "Codigo": { + "type": "string", + "nullable": true + }, + "Descricao": { + "type": "string", + "nullable": true + }, + "Complemento": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "TipoAmbiente": { + "enum": [ + "PRODUCAO", + "HOMOLOGACAO" + ], + "type": "string" + }, + "LoteDistribuicaoNSUResponse": { + "type": "object", + "properties": { + "StatusProcessamento": { + "allOf": [ + { + "$ref": "#/components/schemas/StatusProcessamentoDistribuicao" + } + ] + }, + "LoteDFe": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DistribuicaoNSU" + }, + "nullable": true + }, + "Alertas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "Erros": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "TipoAmbiente": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoAmbiente" + } + ] + }, + "VersaoAplicativo": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/adn-municipio-v1.json b/schemas/adn/v1/adn-municipio-v1.json new file mode 100644 index 0000000..842040b --- /dev/null +++ b/schemas/adn/v1/adn-municipio-v1.json @@ -0,0 +1,424 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - ADN Município", + "description": "# Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a distribuição de documentos fiscais para os municípios.\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso.\n\n # Padrões técnicos\n A API NFS-e utiliza a arquitetura RESTful que segue os seguintes padrões técnicos:\n\t \n- **Protocolo de comunicação** : TLS 1.2 ou superior com autenticação mútua\n\n- **Formato para troca de mensagens** : JSON\n\n- **Formato dos documentos** : XML 1.0 (https://www.w3.org/TR/REC-xml)\n\n- **Codificação de caracteres** : UTF-8\n\n- **Certificado digital** : Emitido por Autoridade Certificadora ICP-Brasil, tipo A1 ou A3, CNPJ , com \"Autenticação do Cliente\"\n\n- **Padrão de assinatura dos documentos XML** : XMLDSIG (https://www.w3.org/TR/xmldsig-core/)\n\n- **Padrão de compactação dos documentos XML para troca de mensagens** : GZip com representao base64binary", + "version": "v1", + "x-logo": { + "url": "/municipios/images/logo_nfse_vertical.png", + "altText": "Logo da API", + "backgroundColor": "#FFFFFF" + } + }, + "servers": [ + { + "url": "/municipios" + } + ], + "paths": { + "/DFe/{NSU}": { + "get": { + "tags": [ + "DistribuicaoMunicipio" + ], + "summary": "Retorna um lote contendo até 50 Documentos Fiscais de Serviço a partir do NSU informado (inclusive)", + "parameters": [ + { + "name": "NSU", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "tipoNSU", + "in": "query", + "schema": { + "$ref": "#/components/schemas/TipoNSU" + } + }, + { + "name": "lote", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + } + } + } + }, + "/NFSe/{ChaveAcesso}/Eventos": { + "get": { + "tags": [ + "DistribuicaoMunicipio" + ], + "summary": "Retorna os Documentos Fiscais de Serviço do tipo Evento vinculados à chave de acesso informada", + "parameters": [ + { + "name": "ChaveAcesso", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoNSUResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "TipoNSU": { + "enum": [ + "RECEPCAO", + "DISTRIBUICAO", + "GERAL", + "MEI" + ], + "type": "string" + }, + "StatusProcessamentoDistribuicao": { + "enum": [ + "REJEICAO", + "NENHUM_DOCUMENTO_LOCALIZADO", + "DOCUMENTOS_LOCALIZADOS" + ], + "type": "string" + }, + "TipoDocumentoRequisicao": { + "enum": [ + "NENHUM", + "DPS", + "PEDIDO_REGISTRO_EVENTO", + "NFSE", + "EVENTO", + "CNC" + ], + "type": "string" + }, + "TipoEvento": { + "enum": [ + "CANCELAMENTO", + "SOLICITACAO_CANCELAMENTO_ANALISE_FISCAL", + "CANCELAMENTO_POR_SUBSTITUICAO", + "CANCELAMENTO_DEFERIDO_ANALISE_FISCAL", + "CANCELAMENTO_INDEFERIDO_ANALISE_FISCAL", + "CONFIRMACAO_PRESTADOR", + "REJEICAO_PRESTADOR", + "CONFIRMACAO_TOMADOR", + "REJEICAO_TOMADOR", + "CONFIRMACAO_INTERMEDIARIO", + "REJEICAO_INTERMEDIARIO", + "CONFIRMACAO_TACITA", + "ANULACAO_REJEICAO", + "CANCELAMENTO_POR_OFICIO", + "BLOQUEIO_POR_OFICIO", + "DESBLOQUEIO_POR_OFICIO", + "TRIBUTOS_NFSE_RECOLHIDOS", + "INCLUSAO_NFSE_DAN" + ], + "type": "string" + }, + "DistribuicaoNSU": { + "type": "object", + "properties": { + "NSU": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "ChaveAcesso": { + "type": "string", + "nullable": true + }, + "TipoDocumento": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoDocumentoRequisicao" + } + ] + }, + "TipoEvento": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoEvento" + } + ], + "nullable": true + }, + "ArquivoXml": { + "type": "string", + "nullable": true + }, + "DataHoraGeracao": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "MensagemProcessamento": { + "type": "object", + "properties": { + "Codigo": { + "type": "string", + "nullable": true + }, + "Descricao": { + "type": "string", + "nullable": true + }, + "Complemento": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "TipoAmbiente": { + "enum": [ + "PRODUCAO", + "HOMOLOGACAO" + ], + "type": "string" + }, + "LoteDistribuicaoNSUResponse": { + "type": "object", + "properties": { + "StatusProcessamento": { + "allOf": [ + { + "$ref": "#/components/schemas/StatusProcessamentoDistribuicao" + } + ] + }, + "LoteDFe": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DistribuicaoNSU" + }, + "nullable": true + }, + "Alertas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "Erros": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "TipoAmbiente": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoAmbiente" + } + ] + }, + "VersaoAplicativo": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/adn-parametros-municipais-v1.json b/schemas/adn/v1/adn-parametros-municipais-v1.json new file mode 100644 index 0000000..ffd6529 --- /dev/null +++ b/schemas/adn/v1/adn-parametros-municipais-v1.json @@ -0,0 +1,1079 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - ADN Parâmetros Municipais", + "description": "# Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a parametrização de municípios.\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso.", + "version": "v1", + "x-logo": { + "url": "/parametrizacao/images/logo_nfse_vertical.png", + "altText": "Logo da API", + "backgroundColor": "#FFFFFF" + } + }, + "servers": [ + { + "url": "/parametrizacao" + } + ], + "paths": { + "/{codigoMunicipio}/{codigoServico}/{competencia}/aliquota": { + "get": { + "tags": [ + "Aliquotas" + ], + "summary": "Consulta alíquotas", + "description": "Retorna uma alíquota do ISSQN parametrizada de um município a partir desta consulta.", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "description": "Código do município", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "codigoServico", + "in": "path", + "description": "Código do serviço", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "competencia", + "in": "path", + "description": "Data de competência", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaAliquotas" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaAliquotas" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaAliquotas" + } + } + } + } + } + } + }, + "/{codigoMunicipio}/{codigoServico}/historicoaliquotas": { + "get": { + "tags": [ + "Aliquotas" + ], + "summary": "Consulta histórico de alíquotas", + "description": "Retorna histórico de alíquotas do ISSQN parametrizadas de um município a partir de um código de município e código de serviço.", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "description": "Código do município", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "codigoServico", + "in": "path", + "description": "Código do serviço", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaAliquotas" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaAliquotas" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaAliquotas" + } + } + } + } + } + } + }, + "/{codigoMunicipio}/{numeroBeneficio}/{competencia}/beneficio": { + "get": { + "tags": [ + "Beneficio" + ], + "summary": "Consulta benefício municipal", + "description": "Retorna os parâmetros de um número de benefício municipal a partir desta consulta.", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "description": "Código do município", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "numeroBeneficio", + "in": "path", + "description": "Número do benefício municipal", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "competencia", + "in": "path", + "description": "Data de competência", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaBeneficio" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaBeneficio" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaBeneficio" + } + } + } + } + } + } + }, + "/{codigoMunicipio}/beneficiomunicipal/{idManut}": { + "post": { + "tags": [ + "Beneficio" + ], + "summary": "Alteração de parâmetros de benefícios municipais", + "description": "Recepciona um arquivo PARAM para a manutenção de beneficiários dos beneficios municipais", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "idManut", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Estrutura contendo um arquivo PARAM compactado no padrão gZip (base64Binary)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/{codigoMunicipio}/convenio": { + "get": { + "tags": [ + "Convenio" + ], + "summary": "Consulta convênios municipais", + "description": "Retorna os parâmetros do convênio de um município a partir desta consulta.", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "description": "Código do município", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaConfiguracoesConvenio" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaConfiguracoesConvenio" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaConfiguracoesConvenio" + } + } + } + } + } + } + }, + "/{codigoMunicipio}/{codigoServico}/{competencia}/regimes_especiais": { + "get": { + "tags": [ + "RegimesEspeciais" + ], + "summary": "Consulta regimes especiais", + "description": "Retorna os parâmetros de regimes especiais de tributação de um município a partir desta consulta.", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "description": "Código do município", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "codigoServico", + "in": "path", + "description": "Código do serviço", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "competencia", + "in": "path", + "description": "Data de competência", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaRegimesEspeciais" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaRegimesEspeciais" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaRegimesEspeciais" + } + } + } + } + } + } + }, + "/{codigoMunicipio}/regimes_especiais/{idManut}": { + "post": { + "tags": [ + "RegimesEspeciais" + ], + "summary": "Alteração parâmetros regimes especiais", + "description": "Recepciona um arquivo PARAM para a manutenção de beneficiários de regimes especiais", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "idManut", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Estrutura contendo um arquivo PARAM compactado no padrão gZip (base64Binary)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + }, + "/{codigoMunicipio}/{competencia}/retencoes": { + "get": { + "tags": [ + "Retencoes" + ], + "summary": "Consulta retenções município", + "description": "Retorna os parâmetros para retenções do ISSQN de um município a partir desta consulta.", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "description": "Código do município", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "competencia", + "in": "path", + "description": "Data de competencia", + "required": true, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaRetencoes" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaRetencoes" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResultadoConsultaRetencoes" + } + } + } + } + } + } + }, + "/{codigoMunicipio}/retencoes/{idManut}": { + "post": { + "tags": [ + "Retencoes" + ], + "summary": "Alteração de parametros de retenções municipais", + "description": "Recepciona um arquivo PARAM para a manutenção de beneficiários das retenções municipais", + "parameters": [ + { + "name": "codigoMunicipio", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "idManut", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Estrutura contendo um arquivo PARAM compactado no padrão gZip (base64Binary)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/ParamPostRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success" + } + } + } + } + }, + "components": { + "schemas": { + "Aliquota": { + "type": "object", + "properties": { + "Incidencia": { + "type": "string", + "nullable": true + }, + "Aliq": { + "type": "number", + "format": "double", + "nullable": true + }, + "DtIni": { + "type": "string", + "format": "date-time" + }, + "DtFim": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "Beneficio": { + "type": "object", + "properties": { + "codigoBeneficio": { + "type": "string", + "nullable": true + }, + "descricao": { + "type": "string", + "description": "", + "nullable": true + }, + "dataInicioVigencia": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFimVigencia": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + }, + "tipoBeneficio": { + "$ref": "#/components/schemas/TipoBeneficioMunicipal" + }, + "tipoReducaoBC": { + "$ref": "#/components/schemas/TipoReducaoBaseDeCalculo" + }, + "reducaoPercentualBC": { + "type": "number", + "description": "", + "format": "double", + "nullable": true + }, + "aliquotaDiferenciada": { + "type": "number", + "description": "", + "format": "double", + "nullable": true + }, + "restritoAoMunicipio": { + "type": "boolean", + "description": "", + "nullable": true + }, + "servicos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BeneficioServico" + }, + "description": "", + "nullable": true + }, + "contribuintes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BeneficioInscricao" + }, + "description": "", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "BeneficioInscricao": { + "type": "object", + "properties": { + "tipoInscricao": { + "$ref": "#/components/schemas/TipoInscricao" + }, + "inscricao": { + "type": "string", + "nullable": true + }, + "dataInicioVigencia": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFimVigencia": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "BeneficioServico": { + "type": "object", + "properties": { + "codigoServico": { + "type": "string", + "description": "", + "nullable": true + }, + "dataInicioVigencia": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFimVigencia": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "ParamPostRequest": { + "type": "object", + "properties": { + "tipoAmbiente": { + "$ref": "#/components/schemas/TipoAmbiente" + }, + "paramXmlGZipB64": { + "type": "string", + "description": "PARAM compactado no padrão gZip (base64Binary)", + "nullable": true + } + }, + "additionalProperties": false + }, + "ParametrosConfiguracaoConvenio": { + "type": "object", + "properties": { + "tipoConvenioDeserializationSetter": { + "$ref": "#/components/schemas/TipoConvenio" + }, + "aderenteAmbienteNacional": { + "$ref": "#/components/schemas/TipoSimNao" + }, + "aderenteEmissorNacional": { + "$ref": "#/components/schemas/TipoSimNao" + }, + "situacaoEmissaoPadraoContribuintesRFB": { + "$ref": "#/components/schemas/TipoSituacaoEmissaoPadraoContribuintesRFB" + }, + "aderenteMAN": { + "$ref": "#/components/schemas/TipoSimNao" + }, + "permiteAproveitametoDeCreditos": { + "type": "boolean", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "RegimeEspecial": { + "type": "object", + "properties": { + "situacao": { + "$ref": "#/components/schemas/TipoConfiguracaoRegimeEspecial" + }, + "dataInicio": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFim": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + }, + "observacoes": { + "type": "string", + "description": "", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "ResultadoConsultaAliquotas": { + "type": "object", + "properties": { + "mensagem": { + "type": "string", + "nullable": true + }, + "aliquotas": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Aliquota" + } + }, + "description": "Alíquotas", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Resultado da consulta de alíquotas" + }, + "ResultadoConsultaBeneficio": { + "type": "object", + "properties": { + "mensagem": { + "type": "string", + "nullable": true + }, + "beneficio": { + "$ref": "#/components/schemas/Beneficio" + } + }, + "additionalProperties": false, + "description": "Resultado da consulta dos benefícios municipais" + }, + "ResultadoConsultaConfiguracoesConvenio": { + "type": "object", + "properties": { + "mensagem": { + "type": "string", + "nullable": true + }, + "parametrosConvenio": { + "$ref": "#/components/schemas/ParametrosConfiguracaoConvenio" + } + }, + "additionalProperties": false, + "description": "Resultado da consulta dos convênios municipais" + }, + "ResultadoConsultaRegimesEspeciais": { + "type": "object", + "properties": { + "mensagem": { + "type": "string", + "nullable": true + }, + "regimesEspeciais": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RegimeEspecial" + } + } + }, + "description": "Regimes especiais", + "nullable": true + } + }, + "additionalProperties": false, + "description": "Resultado da consulta de regimes especiais" + }, + "ResultadoConsultaRetencoes": { + "type": "object", + "properties": { + "mensagem": { + "type": "string", + "nullable": true + }, + "retencoes": { + "$ref": "#/components/schemas/Retencoes" + } + }, + "additionalProperties": false, + "description": "Resultado da consulta de retenções" + }, + "RetencaoArtigoSexto": { + "type": "object", + "properties": { + "dataInicioVigencia": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFimVigencia": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "RetencaoMunicipal": { + "type": "object", + "properties": { + "descricao": { + "type": "string", + "description": "", + "nullable": true + }, + "dataInicioVigencia": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFimVigencia": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + }, + "tiposRetencao": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TipoRetencaoISSQN" + }, + "description": "", + "nullable": true + }, + "servicos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RetencaoMunicipalPorCodigoServico" + }, + "description": "", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "RetencaoMunicipalPorCodigoServico": { + "type": "object", + "properties": { + "codigoCompleto": { + "type": "string", + "description": "", + "nullable": true + }, + "historico": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RetencaoMunicipalServico" + }, + "description": "", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "RetencaoMunicipalServico": { + "type": "object", + "properties": { + "dataInicioVigencia": { + "type": "string", + "description": "", + "format": "date-time" + }, + "dataFimVigencia": { + "type": "string", + "description": "", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "Retencoes": { + "type": "object", + "properties": { + "artigoSexto": { + "$ref": "#/components/schemas/RetencoesArtigoSexto" + }, + "retencoesMunicipais": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RetencaoMunicipal" + }, + "description": "", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "RetencoesArtigoSexto": { + "type": "object", + "properties": { + "habilitado": { + "type": "boolean", + "description": "" + }, + "historico": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RetencaoArtigoSexto" + }, + "description": "", + "nullable": true + } + }, + "additionalProperties": false, + "description": "" + }, + "TipoAmbiente": { + "enum": [ + 1, + 2 + ], + "type": "integer", + "format": "int32" + }, + "TipoBeneficioMunicipal": { + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "format": "int32" + }, + "TipoConfiguracaoRegimeEspecial": { + "enum": [ + 1, + 2, + 3 + ], + "type": "integer", + "format": "int32" + }, + "TipoConvenio": { + "enum": [ + 1, + 2 + ], + "type": "integer", + "format": "int32" + }, + "TipoInscricao": { + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "format": "int32" + }, + "TipoReducaoBaseDeCalculo": { + "enum": [ + 1, + 2 + ], + "type": "integer", + "format": "int32" + }, + "TipoRetencaoISSQN": { + "enum": [ + 0, + 1, + 2, + 3 + ], + "type": "integer", + "format": "int32" + }, + "TipoSimNao": { + "enum": [ + 0, + 1, + -1 + ], + "type": "integer", + "format": "int32" + }, + "TipoSituacaoEmissaoPadraoContribuintesRFB": { + "enum": [ + 0, + 1, + -1 + ], + "type": "integer", + "format": "int32" + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/adn-recepcao-v1.json b/schemas/adn/v1/adn-recepcao-v1.json new file mode 100644 index 0000000..d2ff502 --- /dev/null +++ b/schemas/adn/v1/adn-recepcao-v1.json @@ -0,0 +1,216 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - ADN Recepção", + "description": " # Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a recepção de documentos compartilhados no ambiente nacional (ADN).\n\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso.\n", + "version": "v1", + "x-logo": { + "url": "/adn/images/logo_nfse_vertical.png", + "altText": "NFS-e", + "backgroundColor": "#FFFFFF" + } + }, + "servers": [ + { + "url": "/adn" + } + ], + "paths": { + "/DFe": { + "post": { + "tags": [ + "Recepcao" + ], + "summary": "Recepciona um lote de Documentos", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecepcaoRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponseLote" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponseLote" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponseLote" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponseLote" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponseLote" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "RecepcaoRequest": { + "type": "object", + "properties": { + "LoteXmlGZipB64": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "MensagemProcessamento": { + "type": "object", + "properties": { + "Codigo": { + "type": "string", + "nullable": true + }, + "Descricao": { + "type": "string", + "nullable": true + }, + "Complemento": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "RecepcaoResponseDocumento": { + "type": "object", + "properties": { + "ChaveAcesso": { + "type": "string", + "description": "Chave de acesso", + "nullable": true + }, + "NsuRecepcao": { + "type": "string", + "description": "NSU - Número Sequencial de Busca", + "nullable": true + }, + "StatusProcessamento": { + "type": "string", + "description": "Status do processamento", + "nullable": true + }, + "Alertas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "description": "Alertas da NFS-e", + "nullable": true, + "readOnly": true + }, + "Erros": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "description": "Erros da NFS-e gerada", + "nullable": true, + "readOnly": true + } + }, + "additionalProperties": false + }, + "TipoAmbiente": { + "enum": [ + "PRODUCAO", + "HOMOLOGACAO" + ], + "type": "string" + }, + "RecepcaoResponseLote": { + "type": "object", + "properties": { + "Lote": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RecepcaoResponseDocumento" + }, + "description": "Lote de documentos processados", + "nullable": true + }, + "TipoAmbiente": { + "allOf": [ + { + "$ref": "#/components/schemas/TipoAmbiente" + } + ] + }, + "VersaoAplicativo": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false + }, + "ProblemDetails": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": false + } + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/cnc-consulta-v1.json b/schemas/adn/v1/cnc-consulta-v1.json new file mode 100644 index 0000000..5c2196a --- /dev/null +++ b/schemas/adn/v1/cnc-consulta-v1.json @@ -0,0 +1,278 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - CNC Consulta", + "description": " # Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a consulta do Cadastro Nacional de Contribuintes (CNC).\n\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso. \n\n # Sobre o CNC\n O CNC é um módulo do Sistema Nacional NFS-e que trata informações de contribuintes emissores de documentos de NFS-e. Para emissão de notas, o Sistema Nacional NFS-e utiliza as bases oficiais da Receita Federal do Brasil (CNPJ/CPF) \n como fonte principal de informações dos contribuintes. O CNC serve como base de informações complementares de uso opcional pelos municípios conveniados ao Sistema.\n\n Através desta API, os municípios conveniados ao Sistema Nacional da NFS-e podem consultar as informações complementares dos contribuintes sob sua gestão, recuperando informações sobre eles em formato JSON (JavaScript Object Notation).\n\n # Requisitos para uso\n Para estabelecer conexão com esta API, é necessário informar um Certificado Digital do tipo e-CNPJ. O Cerfificado Digital deve seguir as especificações detalhadas nos padrões técnicos do projeto e o CNPJ do mesmo deve possuir autorização\n a acessar o endpoint da API. Esta autorização deve ser adquirida junto ao Comitê Gestor da NFS-e.\n\n # Padrões técnicos\n A API NFS-e de Consulta do CNC é uma API RESTful que segue os seguintes padrões técnicos:\n\t \n- **Protocolo de comunicação** : TLS 1.2 ou superior com autenticação mútua\n\n- **Formato para troca de mensagens** : JSON\n\n- **Formato dos documentos do CNC** : XML 1.0 (https://www.w3.org/TR/REC-xml)\n\n- **Codificação de caracteres** : UTF-8\n\n- **Certificado digital** : Emitido por Autoridade Certificadora ICP-Brasil, tipo A1 ou A3, CNPJ , com \"Autenticação do Cliente\"\n\n- **Padrão de assinatura dos documentos XML** : XMLDSIG (https://www.w3.org/TR/xmldsig-core/)\n\n- **Padrão de compactação dos documentos XML para troca de mensagens** : GZip com representao base64binary", + "version": "v1", + "x-logo": { + "url": "/cnc/consulta/images/logo_nfse_vertical.png", + "altText": "Logo da API", + "backgroundColor": "#FFFFFF" + } + }, + "servers": [ + { + "url": "/cnc/consulta" + } + ], + "paths": { + "/cad": { + "get": { + "tags": [ + "Consulta" + ], + "summary": "Este endpoint permite a consulta das informações atuais de contribuintes no CNC", + "parameters": [ + { + "name": "codMunicipio", + "in": "query", + "description": "Código IBGE do município do contribuinte.", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "inscricaoFederal", + "in": "query", + "description": "Inscrição federal do contribuinte, podendo ser CPF ou CNPJ.", + "schema": { + "type": "string" + } + }, + { + "name": "indicadorMunicipal", + "in": "query", + "description": "Indicador Municipal do contribuinte.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoCadastro" + }, + "example": {"ListaCadastroMunicipal":[{"OrigemDados":"CNC","CodigoMunicipio":1234567,"TipoAmbiente":"HOMOLOGACAO","Id":1,"CodigoUF":12,"InfCad":{"Inscricao":"99999999999999","TpInscricao":"CNPJ","InscricaoMunicipal":"1234567","DataInicioInscricaoMunicipal":"2026-08-13T20:37:46.0657532-03:00","DataApenasInicioInscricaoMunicipal":"2026-08-13","RazaoSocial":"Razao Social","InfoEndereco":{"CEP":"12345678","Logradouro":"Logradouro","Numero":"123","Complemento":"Complemento","Bairro":"Bairro"},"Telefone":"1234567890","Email":"email@email.com","SituacaoEmissaoNFSe":"HABILITADO","SituacaoCadastral":"1","MotivoSituacaoCadastral":"Motivo"},"DhCadastro":"2026-08-13T20:37:46.0657534-03:00","DhAtualizacao":"2026-08-13T20:37:46.0657536-03:00","OpcaoSimplesNacional":"NENHUM"},{"OrigemDados":"CNC","CodigoMunicipio":1234567,"TipoAmbiente":"HOMOLOGACAO","Id":1,"CodigoUF":12,"InfCad":{"Inscricao":"99999999999999","TpInscricao":"CNPJ","InscricaoMunicipal":"7654321","DataInicioInscricaoMunicipal":"2026-08-13T20:37:46.0657552-03:00","DataApenasInicioInscricaoMunicipal":"2026-08-13","RazaoSocial":"Razao Social","InfoEndereco":{"CEP":"12345678","Logradouro":"Logradouro","Numero":"123","Complemento":"Complemento","Bairro":"Bairro"},"Telefone":"1234567890","Email":"email@email.com","SituacaoEmissaoNFSe":"NAO_HABILITADO","SituacaoCadastral":"1","MotivoSituacaoCadastral":"Motivo"},"DhCadastro":"2026-08-13T20:37:46.0657553-03:00","DhAtualizacao":"2026-08-13T20:37:46.0657555-03:00","OpcaoSimplesNacional":"NENHUM"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0657882-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoCadastro" + }, + "example": {"ListaCadastroMunicipal":[{"OrigemDados":"CNC","CodigoMunicipio":1234567,"TipoAmbiente":"HOMOLOGACAO","Id":1,"CodigoUF":12,"InfCad":{"Inscricao":"99999999999999","TpInscricao":"CNPJ","InscricaoMunicipal":"1234567","DataInicioInscricaoMunicipal":"2026-08-13T20:37:46.0657532-03:00","DataApenasInicioInscricaoMunicipal":"2026-08-13","RazaoSocial":"Razao Social","InfoEndereco":{"CEP":"12345678","Logradouro":"Logradouro","Numero":"123","Complemento":"Complemento","Bairro":"Bairro"},"Telefone":"1234567890","Email":"email@email.com","SituacaoEmissaoNFSe":"HABILITADO","SituacaoCadastral":"1","MotivoSituacaoCadastral":"Motivo"},"DhCadastro":"2026-08-13T20:37:46.0657534-03:00","DhAtualizacao":"2026-08-13T20:37:46.0657536-03:00","OpcaoSimplesNacional":"NENHUM"},{"OrigemDados":"CNC","CodigoMunicipio":1234567,"TipoAmbiente":"HOMOLOGACAO","Id":1,"CodigoUF":12,"InfCad":{"Inscricao":"99999999999999","TpInscricao":"CNPJ","InscricaoMunicipal":"7654321","DataInicioInscricaoMunicipal":"2026-08-13T20:37:46.0657552-03:00","DataApenasInicioInscricaoMunicipal":"2026-08-13","RazaoSocial":"Razao Social","InfoEndereco":{"CEP":"12345678","Logradouro":"Logradouro","Numero":"123","Complemento":"Complemento","Bairro":"Bairro"},"Telefone":"1234567890","Email":"email@email.com","SituacaoEmissaoNFSe":"NAO_HABILITADO","SituacaoCadastral":"1","MotivoSituacaoCadastral":"Motivo"},"DhCadastro":"2026-08-13T20:37:46.0657553-03:00","DhAtualizacao":"2026-08-13T20:37:46.0657555-03:00","OpcaoSimplesNacional":"NENHUM"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0657882-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoCadastro" + }, + "example": {"ListaCadastroMunicipal":[{"OrigemDados":"CNC","CodigoMunicipio":1234567,"TipoAmbiente":"HOMOLOGACAO","Id":1,"CodigoUF":12,"InfCad":{"Inscricao":"99999999999999","TpInscricao":"CNPJ","InscricaoMunicipal":"1234567","DataInicioInscricaoMunicipal":"2026-08-13T20:37:46.0657532-03:00","DataApenasInicioInscricaoMunicipal":"2026-08-13","RazaoSocial":"Razao Social","InfoEndereco":{"CEP":"12345678","Logradouro":"Logradouro","Numero":"123","Complemento":"Complemento","Bairro":"Bairro"},"Telefone":"1234567890","Email":"email@email.com","SituacaoEmissaoNFSe":"HABILITADO","SituacaoCadastral":"1","MotivoSituacaoCadastral":"Motivo"},"DhCadastro":"2026-08-13T20:37:46.0657534-03:00","DhAtualizacao":"2026-08-13T20:37:46.0657536-03:00","OpcaoSimplesNacional":"NENHUM"},{"OrigemDados":"CNC","CodigoMunicipio":1234567,"TipoAmbiente":"HOMOLOGACAO","Id":1,"CodigoUF":12,"InfCad":{"Inscricao":"99999999999999","TpInscricao":"CNPJ","InscricaoMunicipal":"7654321","DataInicioInscricaoMunicipal":"2026-08-13T20:37:46.0657552-03:00","DataApenasInicioInscricaoMunicipal":"2026-08-13","RazaoSocial":"Razao Social","InfoEndereco":{"CEP":"12345678","Logradouro":"Logradouro","Numero":"123","Complemento":"Complemento","Bairro":"Bairro"},"Telefone":"1234567890","Email":"email@email.com","SituacaoEmissaoNFSe":"NAO_HABILITADO","SituacaoCadastral":"1","MotivoSituacaoCadastral":"Motivo"},"DhCadastro":"2026-08-13T20:37:46.0657553-03:00","DhAtualizacao":"2026-08-13T20:37:46.0657555-03:00","OpcaoSimplesNacional":"NENHUM"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0657882-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoCadastro" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:46.0657882-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1234567\n 2\n \n 99999999999999\n 1234567\n 2026-08-13\n \n 12345678\n Logradouro\n 123\n Complemento\n Bairro\n \n 1234567890\n email@email.com\n 1\n \n 1\n Motivo\n \n \n \n 1234567\n 2\n \n 99999999999999\n 7654321\n 2026-08-13\n \n 12345678\n Logradouro\n 123\n Complemento\n Bairro\n \n 1234567890\n email@email.com\n 0\n \n 1\n Motivo\n \n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoCadastro" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:46.0657882-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1234567\n 2\n \n 99999999999999\n 1234567\n 2026-08-13\n \n 12345678\n Logradouro\n 123\n Complemento\n Bairro\n \n 1234567890\n email@email.com\n 1\n \n 1\n Motivo\n \n \n \n 1234567\n 2\n \n 99999999999999\n 7654321\n 2026-08-13\n \n 12345678\n Logradouro\n 123\n Complemento\n Bairro\n \n 1234567890\n email@email.com\n 0\n \n 1\n Motivo\n \n \n \n" + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0661876-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0661876-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0661876-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:46.0661876-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:46.0661876-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": {"StatusProcessamento":"REJEICAO","Alertas":[],"Erros":[{"Mensagem":{},"Codigo":"E3317","Descricao":"Certificado expirado"}],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0662762-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": {"StatusProcessamento":"REJEICAO","Alertas":[],"Erros":[{"Mensagem":{},"Codigo":"E3317","Descricao":"Certificado expirado"}],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0662762-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": {"StatusProcessamento":"REJEICAO","Alertas":[],"Erros":[{"Mensagem":{},"Codigo":"E3317","Descricao":"Certificado expirado"}],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:46.0662762-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:46.0662762-03:00\n REJEICAO\n \n \n \n E3317\n Certificado expirado\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteConsultaCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:46.0662762-03:00\n REJEICAO\n \n \n \n E3317\n Certificado expirado\n \n \n" + } + } + } + } + } + } + }, + "components": { + "schemas": { + "ConsultaCNC": { + "type": "object", + "properties": { + "NSU": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "ArquivoXml": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "Enum": { + "type": "object", + "additionalProperties": false + }, + "ExemploRetornoSucessoCadastro": { + "type": "object", + "additionalProperties": false + }, + "LoteConsultaCNCResponse": { + "type": "object", + "properties": { + "TipoAmbiente": { + "$ref": "#/components/schemas/TipoAmbiente" + }, + "VersaoAplicativo": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time" + }, + "StatusProcessamento": { + "$ref": "#/components/schemas/StatusProcessamentoConsulta" + }, + "Alertas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "Erros": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "LoteConsultaCNC": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConsultaCNC" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "MensagemProcessamento": { + "type": "object", + "properties": { + "Mensagem": { + "$ref": "#/components/schemas/Enum" + }, + "Parametros": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "Codigo": { + "type": "string", + "nullable": true + }, + "Descricao": { + "type": "string", + "nullable": true + }, + "Complemento": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "StatusProcessamentoConsulta": { + "enum": [ + "REJEICAO", + "NENHUM_DOCUMENTO_LOCALIZADO", + "DOCUMENTOS_LOCALIZADOS" + ], + "type": "string" + }, + "TipoAmbiente": { + "enum": [ + "PRODUCAO", + "HOMOLOGACAO" + ], + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/cnc-municipio-v1.json b/schemas/adn/v1/cnc-municipio-v1.json new file mode 100644 index 0000000..75a8604 --- /dev/null +++ b/schemas/adn/v1/cnc-municipio-v1.json @@ -0,0 +1,439 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - CNC Município", + "description": " # Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a distribuição do Cadastro Nacional de Contribuintes (CNC).\n\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso.\n\n # Sobre o CNC\n O CNC é um módulo do Sistema Nacional NFS-e que trata informações de contribuintes emissores de documentos de NFS-e. Para emissão de notas, o Sistema Nacional NFS-e utiliza as bases oficiais da Receita Federal do Brasil (CNPJ/CPF) \n como fonte principal de informações dos contribuintes. O CNC serve como base de informações complementares de uso opcional pelos municípios conveniados ao Sistema.\n\n Através desta API, os municípios conveniados ao Sistema Nacional da NFS-e podem consultar as informações complementares dos contribuintes sob sua gestão, recuperando informações sobre eles por meio de um arquivo XML específico para tal fim.\n\n # Requisitos para uso\n Para estabelecer conexão com esta API, é necessário informar um Certificado Digital do tipo e-CNPJ. O Cerfificado Digital deve seguir as especificações detalhadas nos padrões técnicos do projeto e o CNPJ do mesmo deve possuir autorização\n a acessar o endpoint da API. Esta autorização deve ser adquirida junto ao Comitê Gestor da NFS-e.\n\n # Padrões técnicos\n A API NFS-e de Recepção do CNC é uma API RESTful que segue os seguintes padrões técnicos:\n\t \n- **Protocolo de comunicação** : TLS 1.2 ou superior com autenticação mútua\n\n- **Formato para troca de mensagens** : JSON\n\n- **Formato dos documentos do CNC** : XML 1.0 (https://www.w3.org/TR/REC-xml)\n\n- **Codificação de caracteres** : UTF-8\n\n- **Certificado digital** : Emitido por Autoridade Certificadora ICP-Brasil, tipo A1 ou A3, CNPJ , com \"Autenticação do Cliente\"\n\n- **Padrão de assinatura dos documentos XML** : XMLDSIG (https://www.w3.org/TR/xmldsig-core/)\n\n- **Padrão de compactação dos documentos XML para troca de mensagens** : GZip com representao base64binary", + "version": "v1", + "x-logo": { + "url": "/cnc/municipio/images/logo_nfse_vertical.png", + "altText": "Logo da API", + "backgroundColor": "#FFFFFF" + } + }, + "servers": [ + { + "url": "/cnc/municipio" + } + ], + "paths": { + "/cad/NSU": { + "get": { + "tags": [ + "Distribuicao" + ], + "summary": "Este endpoint permite a consulta de um lote de até 50 documentos CNC correspondentes aos cadastros ou movimentações de contribuintes no CNC", + "parameters": [ + { + "name": "NSUMovimento", + "in": "query", + "description": "Numero sequencial único a partir do qual se deseja obter os documentos de movimentação no CNC.", + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "NSUCadastro", + "in": "query", + "description": "Numero sequencial único a partir do qual se deseja obter os documentos de cadastro no CNC.", + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516214-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516297-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516358-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516419-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516476-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.051648-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516214-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516297-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516358-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516419-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516476-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.051648-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516214-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516297-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516358-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516419-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0516476-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.051648-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": "\n 2\n 2026-08-13T20:37:05.051648-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1\n H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=\n 2026-08-13T20:37:05.0516214-03:00\n \n \n 2\n H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=\n 2026-08-13T20:37:05.0516297-03:00\n \n \n 3\n H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=\n 2026-08-13T20:37:05.0516358-03:00\n \n \n 4\n H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=\n 2026-08-13T20:37:05.0516419-03:00\n \n \n 5\n H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=\n 2026-08-13T20:37:05.0516476-03:00\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": "\n 2\n 2026-08-13T20:37:05.051648-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1\n H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=\n 2026-08-13T20:37:05.0516214-03:00\n \n \n 2\n H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=\n 2026-08-13T20:37:05.0516297-03:00\n \n \n 3\n H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=\n 2026-08-13T20:37:05.0516358-03:00\n \n \n 4\n H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=\n 2026-08-13T20:37:05.0516419-03:00\n \n \n 5\n H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=\n 2026-08-13T20:37:05.0516476-03:00\n \n \n" + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0518543-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0518543-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0518543-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:05.0518543-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:05.0518543-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + } + } + } + } + } + }, + "/cad/{inscricaoFederal}/{NSUMovimento}": { + "get": { + "tags": [ + "Distribuicao" + ], + "summary": "Este endpoint permite a consulta de um lote de até 50 documentos CNC correspondentes às movimentações de um determinado contribuinte", + "parameters": [ + { + "name": "inscricaoFederal", + "in": "path", + "description": "Inscrição federal do contribuinte, podendo ser CPF ou CNPJ.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "NSUMovimento", + "in": "path", + "description": "Numero sequencial único a partir do qual se deseja obter os documentos de movimentação do CNC.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525672-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525735-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525791-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525844-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525897-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.0525901-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525672-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525735-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525791-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525844-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525897-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.0525901-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525672-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525735-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525791-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525844-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0525897-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.0525901-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": "\n 2\n 2026-08-13T20:37:05.0525901-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1\n H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=\n 2026-08-13T20:37:05.0525672-03:00\n \n \n 2\n H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=\n 2026-08-13T20:37:05.0525735-03:00\n \n \n 3\n H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=\n 2026-08-13T20:37:05.0525791-03:00\n \n \n 4\n H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=\n 2026-08-13T20:37:05.0525844-03:00\n \n \n 5\n H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=\n 2026-08-13T20:37:05.0525897-03:00\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": "\n 2\n 2026-08-13T20:37:05.0525901-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1\n H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=\n 2026-08-13T20:37:05.0525672-03:00\n \n \n 2\n H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=\n 2026-08-13T20:37:05.0525735-03:00\n \n \n 3\n H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=\n 2026-08-13T20:37:05.0525791-03:00\n \n \n 4\n H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=\n 2026-08-13T20:37:05.0525844-03:00\n \n \n 5\n H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=\n 2026-08-13T20:37:05.0525897-03:00\n \n \n" + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0527232-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0527232-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0527232-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:05.0527232-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:05.0527232-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + } + } + } + } + } + }, + "/mun/{codMunicipio}/{NSUMunicipio}": { + "get": { + "tags": [ + "Distribuicao" + ], + "summary": "Este endpoint permite a consulta de um lote de até 50 documentos CNC correspondentes às movimentações de um determinado município", + "parameters": [ + { + "name": "codMunicipio", + "in": "path", + "description": "Código IBGE do município que se deseja recuperar as movimentações do CNC", + "required": true, + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "NSUMunicipio", + "in": "path", + "description": "Numero sequencial único a partir do qual se deseja obter os documentos de movimentação do município no CNC.", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532372-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532427-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.053248-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532529-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532579-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.0532583-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532372-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532427-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.053248-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532529-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532579-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.0532583-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": {"LoteDistribuicaoCNC":[{"NSU":1,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532372-03:00"},{"NSU":2,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532427-03:00"},{"NSU":3,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.053248-03:00"},{"NSU":4,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532529-03:00"},{"NSU":5,"ArquivoXml":"H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=","DataHoraProcessamento":"2026-08-13T20:37:05.0532579-03:00"}],"StatusProcessamento":"DOCUMENTOS_LOCALIZADOS","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:37:05.0532583-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": "\n 2\n 2026-08-13T20:37:05.0532583-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1\n H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=\n 2026-08-13T20:37:05.0532372-03:00\n \n \n 2\n H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=\n 2026-08-13T20:37:05.0532427-03:00\n \n \n 3\n H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=\n 2026-08-13T20:37:05.053248-03:00\n \n \n 4\n H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=\n 2026-08-13T20:37:05.0532529-03:00\n \n \n 5\n H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=\n 2026-08-13T20:37:05.0532579-03:00\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucessoDistribuicao" + }, + "example": "\n 2\n 2026-08-13T20:37:05.0532583-03:00\n DOCUMENTOS_LOCALIZADOS\n \n \n \n \n 1\n H4sIAAAAAAAAA7OpyM0xtNPT07PRB7MAjYPXARAAAAA=\n 2026-08-13T20:37:05.0532372-03:00\n \n \n 2\n H4sIAAAAAAAAA7OpyM0xstPT07PRB7MAvgJkXRAAAAA=\n 2026-08-13T20:37:05.0532427-03:00\n \n \n 3\n H4sIAAAAAAAAA7OpyM0xttPT07PRB7MAkH/a3xAAAAA=\n 2026-08-13T20:37:05.053248-03:00\n \n \n 4\n H4sIAAAAAAAAA7OpyM0xsdPT07PRB7MA2AAD5BAAAAA=\n 2026-08-13T20:37:05.0532529-03:00\n \n \n 5\n H4sIAAAAAAAAA7OpyM0xtdPT07PRB7MA9n29ZhAAAAA=\n 2026-08-13T20:37:05.0532579-03:00\n \n \n" + } + } + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0533647-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0533647-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": {"StatusProcessamento":"NENHUM_DOCUMENTO_LOCALIZADO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:37:05.0533647-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:05.0533647-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/LoteDistribuicaoCNCResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:37:05.0533647-03:00\n NENHUM_DOCUMENTO_LOCALIZADO\n \n \n" + } + } + } + } + } + } + }, + "components": { + "schemas": { + "DistribuicaoCNC": { + "type": "object", + "properties": { + "NSU": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "ArquivoXml": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time", + "nullable": true + } + }, + "additionalProperties": false + }, + "Enum": { + "type": "object", + "additionalProperties": false + }, + "ExemploRetornoSucessoDistribuicao": { + "type": "object", + "additionalProperties": false + }, + "LoteDistribuicaoCNCResponse": { + "type": "object", + "properties": { + "TipoAmbiente": { + "$ref": "#/components/schemas/TipoAmbiente" + }, + "VersaoAplicativo": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time" + }, + "StatusProcessamento": { + "$ref": "#/components/schemas/StatusProcessamentoDistribuicao" + }, + "Alertas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "Erros": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "LoteDistribuicaoCNC": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DistribuicaoCNC" + }, + "nullable": true + } + }, + "additionalProperties": false + }, + "MensagemProcessamento": { + "type": "object", + "properties": { + "Mensagem": { + "$ref": "#/components/schemas/Enum" + }, + "Parametros": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + }, + "Codigo": { + "type": "string", + "nullable": true + }, + "Descricao": { + "type": "string", + "nullable": true + }, + "Complemento": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "StatusProcessamentoDistribuicao": { + "enum": [ + "REJEICAO", + "NENHUM_DOCUMENTO_LOCALIZADO", + "DOCUMENTOS_LOCALIZADOS" + ], + "type": "string" + }, + "TipoAmbiente": { + "enum": [ + "PRODUCAO", + "HOMOLOGACAO" + ], + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/cnc-recepcao-v1.json b/schemas/adn/v1/cnc-recepcao-v1.json new file mode 100644 index 0000000..f0fef0b --- /dev/null +++ b/schemas/adn/v1/cnc-recepcao-v1.json @@ -0,0 +1,189 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "API NFS-e - CNC Recepção", + "description": "# Apresentação\n Bem-vindo a documentação técnica da API do Projeto Nota Fiscal de Serviços Eletrônica (NFS-e) que trata a recepção do Cadastro Nacional de Contribuintes (CNC).\n Aqui você encontrará informações detalhadas sobre os endpoints, parâmetros, respostas e exemplos de uso. \n\n # Sobre o CNC\n O CNC é um módulo do Sistema Nacional NFS-e que trata informações de contribuintes emissores de documentos de NFS-e. Para emissão de notas, o Sistema Nacional NFS-e utiliza as bases oficiais da Receita Federal do Brasil (CNPJ/CPF) \n como fonte principal de informações dos contribuintes. O CNC serve como base de informações complementares de uso opcional pelos municípios conveniados ao Sistema.\n\n Através desta API, os municípios conveniados ao Sistema Nacional da NFS-e podem alimentar as informações complementares dos contribuintes sob sua gestão, enviando informações sobre eles utilizando um arquivo XML específico para tal fim.\n\n # Requisitos para uso\n Para estabelecer conexão com esta API, é necessário informar um Certificado Digital do tipo e-CNPJ. O Cerfificado Digital deve seguir as especificações detalhadas nos padrões técnicos do projeto e o CNPJ do mesmo deve possuir autorização\n a acessar o endpoint da API. Esta autorização deve ser adquirida junto ao Comitê Gestor da NFS-e.\n\n # Padrões técnicos\n A API NFS-e de Recepção do CNC é uma API RESTful que segue os seguintes padrões técnicos:\n\t \n- **Protocolo de comunicação** : TLS 1.2 ou superior com autenticação mútua\n\n- **Formato para troca de mensagens** : JSON\n\n- **Formato dos documentos do CNC** : XML 1.0 (https://www.w3.org/TR/REC-xml)\n\n- **Codificação de caracteres** : UTF-8\n\n- **Certificado digital** : Emitido por Autoridade Certificadora ICP-Brasil, tipo A1 ou A3, CNPJ , com \"Autenticação do Cliente\"\n\n- **Padrão de assinatura dos documentos XML** : XMLDSIG (https://www.w3.org/TR/xmldsig-core/)\n\n- **Padrão de compactação dos documentos XML para troca de mensagens** : GZip com representao base64binary", + "version": "v1", + "x-logo": { + "url": "/cnc/images/logo_nfse_vertical.png", + "altText": "Logo da API", + "backgroundColor": "#FFFFFF" + } + }, + "servers": [ + { + "url": "/cnc" + } + ], + "paths": { + "/CNC": { + "post": { + "tags": [ + "Cnc" + ], + "summary": "Este endpoint recepciona um contribuinte para cadastro ou atualização no CNC.\r\nCaso o contribuinte não esteja presente no CNC, seu cadastro será feito, do contrário, será feita uma atualização de seus dados", + "requestBody": { + "description": "XML CNC do contribuinte compactado em base64binary.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucesso" + }, + "example": {"ChaveMovimentacao":"MOV1234567890","StatusProcessamento":"PROCESSADO_COM_SUCESSO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:36:33.9972403-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucesso" + }, + "example": {"ChaveMovimentacao":"MOV1234567890","StatusProcessamento":"PROCESSADO_COM_SUCESSO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:36:33.9972403-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucesso" + }, + "example": {"ChaveMovimentacao":"MOV1234567890","StatusProcessamento":"PROCESSADO_COM_SUCESSO","Alertas":[],"Erros":[],"TipoAmbiente":"HOMOLOGACAO","DataHoraProcessamento":"2026-08-13T20:36:33.9972403-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucesso" + }, + "example": "\n 2\n 2026-08-13T20:36:33.9972403-03:00\n PROCESSADO_COM_SUCESSO\n \n \n MOV1234567890\n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/ExemploRetornoSucesso" + }, + "example": "\n 2\n 2026-08-13T20:36:33.9972403-03:00\n PROCESSADO_COM_SUCESSO\n \n \n MOV1234567890\n" + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponse" + }, + "example": {"StatusProcessamento":"FALHA_NO_PROCESSAMENTO","Alertas":[],"Erros":[{"Codigo":"E3317","Descricao":"Certificado expirado"}],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:36:33.9974118-03:00"} + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponse" + }, + "example": {"StatusProcessamento":"FALHA_NO_PROCESSAMENTO","Alertas":[],"Erros":[{"Codigo":"E3317","Descricao":"Certificado expirado"}],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:36:33.9974118-03:00"} + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponse" + }, + "example": {"StatusProcessamento":"FALHA_NO_PROCESSAMENTO","Alertas":[],"Erros":[{"Codigo":"E3317","Descricao":"Certificado expirado"}],"TipoAmbiente":"HOMOLOGACAO","VersaoAplicativo":"1.0.0.0","DataHoraProcessamento":"2026-08-13T20:36:33.9974118-03:00"} + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:36:33.9974118-03:00\n FALHA_NO_PROCESSAMENTO\n \n \n \n E3317\n Certificado expirado\n \n \n" + }, + "text/xml": { + "schema": { + "$ref": "#/components/schemas/RecepcaoResponse" + }, + "example": "\n 2\n 1.0.0.0\n 2026-08-13T20:36:33.9974118-03:00\n FALHA_NO_PROCESSAMENTO\n \n \n \n E3317\n Certificado expirado\n \n \n" + } + } + } + } + } + } + }, + "components": { + "schemas": { + "ExemploRetornoSucesso": { + "type": "object", + "additionalProperties": false + }, + "MensagemProcessamento": { + "type": "object", + "properties": { + "Codigo": { + "type": "string", + "nullable": true + }, + "Descricao": { + "type": "string", + "nullable": true + }, + "Complemento": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "RecepcaoResponse": { + "type": "object", + "properties": { + "TipoAmbiente": { + "$ref": "#/components/schemas/TipoAmbiente" + }, + "VersaoAplicativo": { + "type": "string", + "nullable": true + }, + "DataHoraProcessamento": { + "type": "string", + "format": "date-time" + }, + "StatusProcessamento": { + "$ref": "#/components/schemas/StatusProcessamento" + }, + "Alertas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "Erros": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MensagemProcessamento" + }, + "nullable": true + }, + "ChaveMovimentacao": { + "type": "string", + "nullable": true + } + }, + "additionalProperties": false + }, + "StatusProcessamento": { + "enum": [ + "PROCESSADO_COM_SUCESSO", + "PROCESSADO_COM_ERROS", + "FALHA_NO_PROCESSAMENTO" + ], + "type": "string" + }, + "TipoAmbiente": { + "enum": [ + "PRODUCAO", + "HOMOLOGACAO" + ], + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/schemas/adn/v1/sefin-nacional-v1.json b/schemas/adn/v1/sefin-nacional-v1.json new file mode 100644 index 0000000..9c759a5 --- /dev/null +++ b/schemas/adn/v1/sefin-nacional-v1.json @@ -0,0 +1 @@ +{"swagger":"2.0","info":{"version":"v1","title":"API NFS-e - Sefin Nacional","description":"

Protocolo de comunicação: TLS 1.0, TLS 1.1 e TLS 1.2 com autenticação mútua


\r\n

Formato para troca de mensagens: JSON


\r\n

Formato dos documentos da NFS-e: XML 1.0 (https://www.w3.org/TR/REC-xml)


\r\n

Codificação de caracteres: UTF-8


\r\n

Certificado digital: Emitido por Autoridade Certificadora ICP-Brasil, tipo A1 ou A3, CNPJ ou CPF, com \"Autenticação Cliente\"


\r\n

Padrão de assinatura dos documentos XML: XMLDSIG (https://www.w3.org/TR/xmldsig-core/)


\r\n

Padrão de compactação dos documentos XML para troca de mensagens: GZip com representação base64binary


","x-logo":{"url":"https://sefin.producaorestrita.nfse.gov.br/SefinNacional/img/logo_nfse_vertical.png","altText":"Logo da API"}},"host":"sefin.producaorestrita.nfse.gov.br","basePath":"/SefinNacional","schemes":["http"],"paths":{"/DANFSe":{"get":{"tags":["DANFSe"],"summary":"Este serviço foi movido para https://adn.producaorestrita.nfse.gov.br/danfse/docs/index.html","operationId":"DANFSe_Get","consumes":[],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"type":"object"}},"501":{"description":"Este serviço foi movido para o novo endereço"}}}},"/decisao-judicial/nfse":{"post":{"tags":["NFS-e com indicativo de decisão judicial"],"summary":"Recepção de NFSe gerada de acordo com a decisão judicial.","operationId":"NFSeByPass_Post","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"nfsePostRequest","in":"body","required":true,"schema":{"$ref":"#/definitions/NFSeBypassPostRequest"}}],"responses":{"201":{"description":"A NFS-e foi com indicativo de decisão judicial foi recebida com sucesso","schema":{"$ref":"#/definitions/NFSePostResponseSucesso"}},"400":{"description":"Não foi possível recepcionar a NFS-e com indicativo de decisão judicial","schema":{"$ref":"#/definitions/NFSePostResponseErro"}},"403":{"description":"Certificado digital da transmissão inválido ou fora dos padrões da NFS-e","schema":{"$ref":"#/definitions/NFSePostResponseErro"}},"500":{"description":"Falha durante o processamento da NFSe com indicativo de decisão judicial","schema":{"$ref":"#/definitions/NFSePostResponseErro"}}}}},"/dps/{id}":{"get":{"tags":["DPS"],"summary":"Retorna a chave de acesso da NFS-e a partir do identificador do DPS.","operationId":"Dps_Get","consumes":[],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Identificador do DPS","required":true,"type":"string"}],"responses":{"200":{"description":"Foi gerada uma NFS-e com o identificador de DPS informado","schema":{"$ref":"#/definitions/DpsGetResponse"}},"400":{"description":"Identificador de DPS inválido","schema":{"$ref":"#/definitions/ResponseErro"}},"404":{"description":"Não foi gerada uma NFS-e com o identificador de DPS informado","schema":{"$ref":"#/definitions/ResponseErro"}}}},"head":{"tags":["DPS"],"summary":"Verifica se uma NFS-e foi emitida a partir do Id do DPS","operationId":"Dps_Head","consumes":[],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Identificador do DPS","required":true,"type":"string"}],"responses":{"200":{"description":"Identificador do DPS encontrado"},"400":{"description":"Identificador inválido"},"404":{"description":"Identificador do DPS não encontrado"}}}},"/nfse":{"post":{"tags":["NFS-e"],"summary":"Recepciona a DPS e Gera a NFS-e de forma síncrona.","operationId":"NFSe_Post","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"nfsePostRequest","in":"body","description":"Estrutura contendo um DPS compactado no padrão gZip (base64Binary)","required":true,"schema":{"$ref":"#/definitions/NFSePostRequest"}}],"responses":{"201":{"description":"A NFS-e foi criada com sucesso","schema":{"$ref":"#/definitions/NFSePostResponseSucesso"}},"400":{"description":"Não foi possível criar a NFS-e","schema":{"$ref":"#/definitions/NFSePostResponseErro"}},"403":{"description":"Certificado digital da transmissão inválido ou fora dos padrões da NFS-e","schema":{"$ref":"#/definitions/NFSePostResponseErro"}},"500":{"description":"Falha durante o processamento do DPS","schema":{"$ref":"#/definitions/NFSePostResponseErro"}}}}},"/nfse/{chaveAcesso}":{"get":{"tags":["NFS-e"],"summary":"Retorna a NFS-e a partir da consulta pela chave de acesso correspondente (50 posições).","operationId":"NFSe_Get","consumes":[],"produces":["application/json"],"parameters":[{"name":"chaveAcesso","in":"path","description":"","required":true,"type":"string"}],"responses":{"200":{"description":"NFS-e encontrada","schema":{"$ref":"#/definitions/NFSeGetResponseSucesso"}},"400":{"description":"A chave de acesso consultada deve conter 50 números.","schema":{"$ref":"#/definitions/ResponseErro"}},"401":{"description":"Não foi possível obter o certificado de cliente.","schema":{"$ref":"#/definitions/ResponseErro"}},"403":{"description":"Consulta desta NFS-e não é permitida para este usuário.","schema":{"$ref":"#/definitions/ResponseErro"}},"404":{"description":"Chave de acesso não encontrada.","schema":{"$ref":"#/definitions/ResponseErro"}}}}},"/nfse/{chaveAcesso}/eventos":{"post":{"tags":["Eventos"],"summary":"Recepciona o Pedido de Registro de Evento e gera o Evento de forma síncrona","operationId":"Eventos_Post","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"eventosPostRequest","in":"body","description":"Estrutura contendo o pedido de registro de evento compactado\r\n no padrão GZip com representação base64binary","required":true,"schema":{"$ref":"#/definitions/EventosPostRequest"}},{"name":"chaveAcesso","in":"path","required":true,"type":"string"}],"responses":{"201":{"description":"O evento da NFS-e foi registrado com sucesso","schema":{"$ref":"#/definitions/EventosPostResponseSucesso"}},"400":{"description":"Não foi possível registrar o pedido de evento de NFS-e por violar alguma regra de negócio","schema":{"$ref":"#/definitions/ResponseErro"}},"401":{"description":"Usuário não tem permissão para acessar os eventos","schema":{"$ref":"#/definitions/ResponseErro"}}}}},"/nfse/{chaveAcesso}/eventos/{tipoEvento}/{numSeqEvento}":{"get":{"tags":["Eventos"],"summary":"Consulta eventos por chave de acesso, tipo de evento e número sequencial do evento","operationId":"Eventos_Get","consumes":[],"produces":["application/json"],"parameters":[{"name":"chaveAcesso","in":"path","description":"Chave de acesso","required":true,"type":"string"},{"name":"tipoEvento","in":"path","description":"Tipo de evento","required":true,"type":"integer","format":"int32","enum":[101101,101103,105102,105104,105105,202201,202205,203202,203206,204203,204207,205204,205208,305101,305102,305103,467201,907201]},{"name":"numSeqEvento","in":"path","description":"Número sequencial do evento. Se informado, os demais parâmetros são obrigatórios","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"Eventos encontrados","schema":{"$ref":"#/definitions/EventosPostResponseSucesso"}},"401":{"description":"Usuário não tem permissão para acessar os eventos","schema":{"$ref":"#/definitions/ResponseErro"}},"404":{"description":"Nenhum evento encontrado para a NFS-e","schema":{"$ref":"#/definitions/ResponseErro"}},"422":{"description":"A requisição violou alguma regra de negócio","schema":{"$ref":"#/definitions/ResponseErro"}}}}},"/ParametrosMunicipais":{"get":{"tags":["Parâmetros Municipais"],"summary":"Este serviço foi movido para https://adn.producaorestrita.nfse.gov.br/parametrizacao/docs/index.html","operationId":"ParametrosMunicipais_Get","consumes":[],"produces":["application/json"],"responses":{"200":{"description":"OK","schema":{"type":"object"}},"501":{"description":"Este serviço foi movido para o novo endereço"}}}}},"definitions":{"DpsGetResponse":{"description":"Estrutura de resposta para consulta de DPS","required":["tipoAmbiente","versaoAplicativo","dataHoraProcessamento","idDps","chaveAcesso"],"type":"object","properties":{"tipoAmbiente":{"format":"int32","description":"Tipo de ambiente (1-Produção | 2-Homologação)","enum":[1,2],"type":"integer"},"versaoAplicativo":{"description":"Versão do aplicativo que processou a requisição","type":"string"},"dataHoraProcessamento":{"format":"date-time","description":"Data e hora de processamento da requisição","type":"string","example":"2026-08-13T20:43:37.6460172-03:00"},"idDps":{"description":"Identificador do DPS","type":"string"},"chaveAcesso":{"description":"Chave de acesso da NFS-e","type":"string"}}},"ResponseErro":{"description":"Estrutura de resposta padrão para erros","required":["tipoAmbiente","versaoAplicativo","dataHoraProcessamento","erro"],"type":"object","properties":{"tipoAmbiente":{"format":"int32","description":"Tipo de ambiente (1-Produção | 2-Homologação)","enum":[1,2],"type":"integer"},"versaoAplicativo":{"description":"Versão do aplicativo que processou a requisição","type":"string"},"dataHoraProcessamento":{"format":"date-time","description":"Data e hora de processamento da requisição","type":"string","example":"2026-08-13T20:43:37.6460172-03:00"},"erro":{"$ref":"#/definitions/MensagemProcessamento","description":"Erro de processamento do DPS"}}},"MensagemProcessamento":{"type":"object","properties":{"codigo":{"type":"string"},"descricao":{"type":"string"},"complemento":{"type":"string"}}},"EventosPostRequest":{"description":"Estrutura para requisição de pedido de registro de evento","required":["pedidoRegistroEventoXmlGZipB64"],"type":"object","properties":{"pedidoRegistroEventoXmlGZipB64":{"description":"Pedido de registro de evento no formato Xml compactado no padrão gZip (base64Binary)","type":"string"}}},"EventosPostResponseSucesso":{"description":"Estrutura de resposta de sucesso do processamento do pedido de registro de evento\r\ncontendo o evento no formato Xml compactado no padrão gZip(base64Binary)","required":["tipoAmbiente","versaoAplicativo","dataHoraProcessamento","eventoXmlGZipB64"],"type":"object","properties":{"tipoAmbiente":{"format":"int32","description":"Tipo de ambiente (1-Produção | 2-Homologação)","enum":[1,2],"type":"integer"},"versaoAplicativo":{"description":"Versão do aplicativo que processou a requisição","type":"string"},"dataHoraProcessamento":{"format":"date-time","description":"Data e hora de processamento da requisição","type":"string","example":"2026-08-13T20:43:37.6460172-03:00"},"eventoXmlGZipB64":{"description":"Evento no formato Xml compactado no padrão gZip (base64Binary)","type":"string"}}},"NFSePostRequest":{"description":"Estrutura para enviar o DPS para processamento síncrono","required":["dpsXmlGZipB64"],"type":"object","properties":{"dpsXmlGZipB64":{"description":"DPS compactado no padrão gZip (base64Binary)","type":"string"}}},"NFSePostResponseSucesso":{"description":"Estrutura para resposta de sucesso para a criação da NFS-e síncrona","required":["tipoAmbiente","versaoAplicativo","dataHoraProcessamento","idDps","chaveAcesso","nfseXmlGZipB64"],"type":"object","properties":{"tipoAmbiente":{"format":"int32","description":"Tipo de ambiente (1-Produção | 2-Homologação)","enum":[1,2],"type":"integer"},"versaoAplicativo":{"description":"Versão do aplicativo que processou a requisição","type":"string"},"dataHoraProcessamento":{"format":"date-time","description":"Data e hora de processamento da requisição","type":"string","example":"2026-08-13T20:43:37.6460172-03:00"},"idDps":{"description":"Identificador do DPS","type":"string","readOnly":true},"chaveAcesso":{"description":"Chave de acesso da NFS-e","type":"string","readOnly":true},"nfseXmlGZipB64":{"description":"NFS-e em formato Xml compactado no padrão gZip (base64Binary)","type":"string","readOnly":true},"alertas":{"description":"Alertas da NFS-e gerada","type":"array","items":{"$ref":"#/definitions/MensagemProcessamento"},"readOnly":true}}},"NFSePostResponseErro":{"description":"Estrutura para resposta de erro no processamento do DPS","required":["tipoAmbiente","versaoAplicativo","dataHoraProcessamento","erros"],"type":"object","properties":{"tipoAmbiente":{"format":"int32","description":"Tipo de ambiente (1-Produção | 2-Homologação)","enum":[1,2],"type":"integer"},"versaoAplicativo":{"description":"Versão do aplicativo que processou a requisição","type":"string"},"dataHoraProcessamento":{"format":"date-time","description":"Data e hora de processamento da requisição","type":"string","example":"2026-08-13T20:43:37.6460172-03:00"},"idDPS":{"description":"Id do DPS (se tiver conseguido capturar do Xml)","type":"string","readOnly":true},"erros":{"description":"Erro de processamento do DPS","type":"array","items":{"$ref":"#/definitions/MensagemProcessamento"},"readOnly":true}}},"NFSeGetResponseSucesso":{"description":"Estrutura de resposta para consulta de NFS-e","required":["tipoAmbiente","versaoAplicativo","dataHoraProcessamento","chaveAcesso","nfseXmlGZipB64"],"type":"object","properties":{"tipoAmbiente":{"format":"int32","description":"Tipo de ambiente (1-Produção | 2-Homologação)","enum":[1,2],"type":"integer"},"versaoAplicativo":{"description":"Versão do aplicativo que processou a requisição","type":"string"},"dataHoraProcessamento":{"format":"date-time","description":"Data e hora de processamento da requisição","type":"string","example":"2026-08-13T20:43:37.6460172-03:00"},"chaveAcesso":{"description":"Chave de acesso da NFS-e","type":"string"},"nfseXmlGZipB64":{"description":"NFS-e em formato Xml compactado no padrão gZip (base64Binary)","type":"string"}}},"NFSeBypassPostRequest":{"description":"Estrutura para enviar a NFSe com decisão judicial para processamento síncrono","type":"object","properties":{"xmlGZipB64":{"description":"Documento XML da NFSe compactado no padrão GZIP (base64Binary)","type":"string"}}}}} \ No newline at end of file diff --git a/src/cliente/ambiente.ts b/src/cliente/ambiente.ts index 544b065..83d1532 100644 --- a/src/cliente/ambiente.ts +++ b/src/cliente/ambiente.ts @@ -1,11 +1,23 @@ export type Ambiente = 'producao' | 'homologacao'; // homologacao = "producao restrita", o ambiente de testes do SEFIN Nacional. -const URL_BASE_POR_AMBIENTE: Record = { +const URL_BASE_SEFIN_POR_AMBIENTE: Record = { producao: 'https://sefin.nfse.gov.br/SefinNacional', homologacao: 'https://sefin.producaorestrita.nfse.gov.br/SefinNacional', }; +// ADN (Ambiente de Dados Nacional) e um host separado do SEFIN Nacional - +// trata distribuicao de documentos (DFe por NSU) e parametrizacao municipal, +// nao emissao/consulta de NFS-e. +const URL_BASE_ADN_POR_AMBIENTE: Record = { + producao: 'https://adn.nfse.gov.br', + homologacao: 'https://adn.producaorestrita.nfse.gov.br', +}; + export function urlBaseSefin(ambiente: Ambiente): string { - return URL_BASE_POR_AMBIENTE[ambiente]; + return URL_BASE_SEFIN_POR_AMBIENTE[ambiente]; +} + +export function urlBaseAdn(ambiente: Ambiente): string { + return URL_BASE_ADN_POR_AMBIENTE[ambiente]; } diff --git a/src/cliente/convenio.teste.ts b/src/cliente/convenio.teste.ts new file mode 100644 index 0000000..686491a --- /dev/null +++ b/src/cliente/convenio.teste.ts @@ -0,0 +1,30 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { normalizarConvenio } from './convenio.js'; + +test('normaliza os parametros de convenio, incluindo os campos com nome literal da spec oficial', () => { + const resultado = normalizarConvenio({ + mensagem: null, + parametrosConvenio: { + tipoConvenioDeserializationSetter: 1, + aderenteAmbienteNacional: 1, + aderenteEmissorNacional: 0, + situacaoEmissaoPadraoContribuintesRFB: 1, + aderenteMAN: -1, + permiteAproveitametoDeCreditos: true, + }, + }); + + assert.equal(resultado.parametros.tipoConvenio, 1); + assert.equal(resultado.parametros.aderenteAmbienteNacional, 1); + assert.equal(resultado.parametros.aderenteEmissorNacional, 0); + assert.equal(resultado.parametros.situacaoEmissaoPadraoContribuintesRfb, 1); + assert.equal(resultado.parametros.aderenteMan, -1); + assert.equal(resultado.parametros.permiteAproveitamentoDeCreditos, true); +}); + +test('lida com parametrosConvenio ausente sem lancar erro', () => { + const resultado = normalizarConvenio({ mensagem: 'Municipio nao conveniado' }); + assert.equal(resultado.mensagem, 'Municipio nao conveniado'); + assert.equal(resultado.parametros.tipoConvenio, undefined); +}); diff --git a/src/cliente/convenio.ts b/src/cliente/convenio.ts new file mode 100644 index 0000000..8cfbd64 --- /dev/null +++ b/src/cliente/convenio.ts @@ -0,0 +1,42 @@ +// Tipos fieis a schemas/adn/v1/adn-parametros-municipais-v1.json (spec +// oficial do ADN, endpoint GET /{codigoMunicipio}/convenio). + +export type TipoConvenio = 1 | 2; +export type IndicadorSimNao = 0 | 1 | -1; + +export interface ParametrosConvenio { + tipoConvenio?: TipoConvenio; + aderenteAmbienteNacional?: IndicadorSimNao; + aderenteEmissorNacional?: IndicadorSimNao; + situacaoEmissaoPadraoContribuintesRfb?: IndicadorSimNao; + aderenteMan?: IndicadorSimNao; + permiteAproveitamentoDeCreditos?: boolean; +} + +export interface ResultadoConsultaConvenio { + mensagem?: string; + parametros: ParametrosConvenio; +} + +// O nome dos campos abaixo (`tipoConvenioDeserializationSetter`, +// `permiteAproveitametoDeCreditos` sem o "n") vem literal da spec oficial do +// governo - nao sao erros de digitacao nossos, sao o formato real da +// resposta. Normalizamos pra nomes corretos no tipo exposto pelo SDK. +export function normalizarConvenio(corpo: unknown): ResultadoConsultaConvenio { + const objeto = (corpo ?? {}) as Record; + const parametros = (objeto.parametrosConvenio ?? {}) as Record; + + return { + mensagem: objeto.mensagem as string | undefined, + parametros: { + tipoConvenio: parametros.tipoConvenioDeserializationSetter as TipoConvenio | undefined, + aderenteAmbienteNacional: parametros.aderenteAmbienteNacional as IndicadorSimNao | undefined, + aderenteEmissorNacional: parametros.aderenteEmissorNacional as IndicadorSimNao | undefined, + situacaoEmissaoPadraoContribuintesRfb: parametros.situacaoEmissaoPadraoContribuintesRFB as + | IndicadorSimNao + | undefined, + aderenteMan: parametros.aderenteMAN as IndicadorSimNao | undefined, + permiteAproveitamentoDeCreditos: parametros.permiteAproveitametoDeCreditos as boolean | undefined, + }, + }; +} diff --git a/src/cliente/distribuicao.teste.ts b/src/cliente/distribuicao.teste.ts new file mode 100644 index 0000000..3a14f67 --- /dev/null +++ b/src/cliente/distribuicao.teste.ts @@ -0,0 +1,57 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { compactarGZipBase64 } from './compressao.js'; +import { normalizarLoteDistribuicao } from './distribuicao.js'; + +function loteExemplo(overrides: Record = {}) { + return { + StatusProcessamento: 'DOCUMENTOS_LOCALIZADOS', + LoteDFe: [ + { + NSU: 1, + ChaveAcesso: '1'.repeat(50), + TipoDocumento: 'NFSE', + TipoEvento: null, + ArquivoXml: compactarGZipBase64('conteudo'), + DataHoraGeracao: '2026-06-15T10:30:00-03:00', + }, + ], + Alertas: [], + Erros: [], + TipoAmbiente: 'HOMOLOGACAO', + VersaoAplicativo: '1.0.0', + DataHoraProcessamento: '2026-06-15T10:31:00-03:00', + ...overrides, + }; +} + +test('normaliza o lote de distribuicao, descompactando o XML de cada documento', () => { + const resultado = normalizarLoteDistribuicao(loteExemplo()); + + assert.equal(resultado.statusProcessamento, 'DOCUMENTOS_LOCALIZADOS'); + assert.equal(resultado.ambiente, 'HOMOLOGACAO'); + assert.equal(resultado.documentos.length, 1); + assert.equal(resultado.documentos[0]?.nsu, 1); + assert.equal(resultado.documentos[0]?.chaveAcesso, '1'.repeat(50)); + assert.equal(resultado.documentos[0]?.xml, 'conteudo'); +}); + +test('normaliza mensagens de alerta e erro (campos PascalCase)', () => { + const resultado = normalizarLoteDistribuicao( + loteExemplo({ + Erros: [{ Codigo: 'E001', Descricao: 'NSU invalido', Complemento: null, Parametros: [] }], + }) + ); + + assert.equal(resultado.erros[0]?.codigo, 'E001'); + assert.equal(resultado.erros[0]?.descricao, 'NSU invalido'); +}); + +test('lida com lote vazio (nenhum documento localizado)', () => { + const resultado = normalizarLoteDistribuicao( + loteExemplo({ StatusProcessamento: 'NENHUM_DOCUMENTO_LOCALIZADO', LoteDFe: null }) + ); + + assert.equal(resultado.statusProcessamento, 'NENHUM_DOCUMENTO_LOCALIZADO'); + assert.deepEqual(resultado.documentos, []); +}); diff --git a/src/cliente/distribuicao.ts b/src/cliente/distribuicao.ts new file mode 100644 index 0000000..b52f27e --- /dev/null +++ b/src/cliente/distribuicao.ts @@ -0,0 +1,94 @@ +import { descompactarGZipBase64 } from './compressao.js'; + +// Tipos fieis a schemas/adn/v1/adn-contribuinte-v1.json (spec oficial do ADN, +// endpoint GET /DFe/{NSU}). Os nomes dos campos da resposta original vem em +// PascalCase (padrao .NET do governo); aqui normalizamos pra camelCase, no +// mesmo estilo do restante do modulo `cliente`. + +export type StatusProcessamentoDistribuicao = + | 'REJEICAO' + | 'NENHUM_DOCUMENTO_LOCALIZADO' + | 'DOCUMENTOS_LOCALIZADOS'; + +export type TipoDocumentoDistribuicao = 'NENHUM' | 'DPS' | 'PEDIDO_REGISTRO_EVENTO' | 'NFSE' | 'EVENTO' | 'CNC'; + +export type TipoEventoDistribuicao = + | 'CANCELAMENTO' + | 'SOLICITACAO_CANCELAMENTO_ANALISE_FISCAL' + | 'CANCELAMENTO_POR_SUBSTITUICAO' + | 'CANCELAMENTO_DEFERIDO_ANALISE_FISCAL' + | 'CANCELAMENTO_INDEFERIDO_ANALISE_FISCAL' + | 'CONFIRMACAO_PRESTADOR' + | 'REJEICAO_PRESTADOR' + | 'CONFIRMACAO_TOMADOR' + | 'REJEICAO_TOMADOR' + | 'CONFIRMACAO_INTERMEDIARIO' + | 'REJEICAO_INTERMEDIARIO' + | 'CONFIRMACAO_TACITA' + | 'ANULACAO_REJEICAO' + | 'CANCELAMENTO_POR_OFICIO' + | 'BLOQUEIO_POR_OFICIO' + | 'DESBLOQUEIO_POR_OFICIO' + | 'INCLUSAO_NFSE_DAN' + | 'TRIBUTOS_NFSE_RECOLHIDOS'; + +export interface MensagemProcessamentoAdn { + codigo?: string; + descricao?: string; + complemento?: string; + parametros?: string[]; +} + +export interface DocumentoDistribuicao { + nsu?: number; + chaveAcesso?: string; + tipoDocumento: TipoDocumentoDistribuicao; + tipoEvento?: TipoEventoDistribuicao; + /** XML original do documento, ja descompactado (o ADN devolve GZip+Base64). */ + xml?: string; + dataHoraGeracao?: string; +} + +export interface LoteDistribuicaoNsu { + statusProcessamento: StatusProcessamentoDistribuicao; + documentos: DocumentoDistribuicao[]; + alertas: MensagemProcessamentoAdn[]; + erros: MensagemProcessamentoAdn[]; + ambiente: 'PRODUCAO' | 'HOMOLOGACAO'; + versaoAplicativo?: string; + dataHoraProcessamento: string; +} + +function normalizarMensagens(lista: unknown): MensagemProcessamentoAdn[] { + if (!Array.isArray(lista)) return []; + return (lista as Record[]).map((item) => ({ + codigo: item.Codigo as string | undefined, + descricao: item.Descricao as string | undefined, + complemento: item.Complemento as string | undefined, + parametros: item.Parametros as string[] | undefined, + })); +} + +export function normalizarLoteDistribuicao(corpo: unknown): LoteDistribuicaoNsu { + const objeto = (corpo ?? {}) as Record; + const lote = (objeto.LoteDFe as Record[] | undefined) ?? []; + + const documentos: DocumentoDistribuicao[] = lote.map((doc) => ({ + nsu: doc.NSU as number | undefined, + chaveAcesso: doc.ChaveAcesso as string | undefined, + tipoDocumento: doc.TipoDocumento as TipoDocumentoDistribuicao, + tipoEvento: doc.TipoEvento as TipoEventoDistribuicao | undefined, + xml: typeof doc.ArquivoXml === 'string' ? descompactarGZipBase64(doc.ArquivoXml) : undefined, + dataHoraGeracao: doc.DataHoraGeracao as string | undefined, + })); + + return { + statusProcessamento: objeto.StatusProcessamento as StatusProcessamentoDistribuicao, + documentos, + alertas: normalizarMensagens(objeto.Alertas), + erros: normalizarMensagens(objeto.Erros), + ambiente: objeto.TipoAmbiente as 'PRODUCAO' | 'HOMOLOGACAO', + versaoAplicativo: objeto.VersaoAplicativo as string | undefined, + dataHoraProcessamento: objeto.DataHoraProcessamento as string, + }; +} diff --git a/src/cliente/indice.teste.ts b/src/cliente/indice.teste.ts index 50a0c6f..7720e38 100644 --- a/src/cliente/indice.teste.ts +++ b/src/cliente/indice.teste.ts @@ -137,3 +137,70 @@ test('consultarNfse monta o caminho com a chave de acesso', async () => { await fechar(); } }); + +test('baixarDfe monta o caminho e a query string, e descompacta os XMLs do lote', async () => { + const { urlBase, fechar } = await subirServidorDeTeste((req, _corpo, res) => { + assert.equal(req.method, 'GET'); + assert.equal(req.url, '/contribuintes/DFe/10?cnpjConsulta=12345678000199&lote=false'); + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end( + JSON.stringify({ + StatusProcessamento: 'DOCUMENTOS_LOCALIZADOS', + LoteDFe: [ + { + NSU: 11, + ChaveAcesso: '1'.repeat(50), + TipoDocumento: 'NFSE', + ArquivoXml: compactarGZipBase64('doc'), + DataHoraGeracao: '2026-06-15T10:30:00-03:00', + }, + ], + Alertas: [], + Erros: [], + TipoAmbiente: 'HOMOLOGACAO', + DataHoraProcessamento: '2026-06-15T10:31:00-03:00', + }) + ); + }); + + try { + const cliente = criarClienteSefin({ + ambiente: 'homologacao', + certificado: clienteDeTeste, + urlBaseAdn: urlBase, + agenteOpcoes: { rejectUnauthorized: false }, + }); + const resultado = await cliente.baixarDfe(10, { cnpjConsulta: '12345678000199', lote: false }); + assert.equal(resultado.statusProcessamento, 'DOCUMENTOS_LOCALIZADOS'); + assert.equal(resultado.documentos[0]?.xml, 'doc'); + } finally { + await fechar(); + } +}); + +test('consultarConvenio monta o caminho com o codigo do municipio', async () => { + const { urlBase, fechar } = await subirServidorDeTeste((req, _corpo, res) => { + assert.equal(req.method, 'GET'); + assert.equal(req.url, '/parametrizacao/3550308/convenio'); + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end( + JSON.stringify({ + mensagem: null, + parametrosConvenio: { tipoConvenioDeserializationSetter: 1, aderenteAmbienteNacional: 1 }, + }) + ); + }); + + try { + const cliente = criarClienteSefin({ + ambiente: 'homologacao', + certificado: clienteDeTeste, + urlBaseAdn: urlBase, + agenteOpcoes: { rejectUnauthorized: false }, + }); + const resultado = await cliente.consultarConvenio('3550308'); + assert.equal(resultado.parametros.tipoConvenio, 1); + } finally { + await fechar(); + } +}); diff --git a/src/cliente/indice.ts b/src/cliente/indice.ts index 3db7c77..910365d 100644 --- a/src/cliente/indice.ts +++ b/src/cliente/indice.ts @@ -1,11 +1,21 @@ import https from 'node:https'; -import { urlBaseSefin, type Ambiente } from './ambiente.js'; +import { urlBaseAdn, urlBaseSefin, type Ambiente } from './ambiente.js'; import { compactarGZipBase64, descompactarGZipBase64 } from './compressao.js'; +import { normalizarConvenio, type ResultadoConsultaConvenio } from './convenio.js'; +import { normalizarLoteDistribuicao, type LoteDistribuicaoNsu } from './distribuicao.js'; import { ErroComunicacaoSefin, type ErroSefin } from './erros.js'; -export { urlBaseSefin } from './ambiente.js'; +export { urlBaseAdn, urlBaseSefin } from './ambiente.js'; export type { Ambiente } from './ambiente.js'; export type { ErroSefin } from './erros.js'; +export type { ParametrosConvenio, ResultadoConsultaConvenio } from './convenio.js'; +export type { + DocumentoDistribuicao, + LoteDistribuicaoNsu, + MensagemProcessamentoAdn, + TipoDocumentoDistribuicao, + TipoEventoDistribuicao, +} from './distribuicao.js'; /** Par mínimo necessário para autenticação mTLS: as mesmas PEMs usadas em `assinatura`. */ export interface ChaveClienteSefin { @@ -19,11 +29,14 @@ export interface OpcoesClienteSefin { /** Tempo limite por requisição, em milissegundos. Padrão: 60000. */ timeoutMs?: number; /** - * Substitui a URL base padrão do ambiente. Alguns municípios conveniados - * expõem o mesmo contrato de API em infraestrutura própria; também é o - * ponto usado pelos testes para apontar a um servidor local. + * Substitui a URL base padrão do ambiente para o SEFIN Nacional. Alguns + * municípios conveniados expõem o mesmo contrato de API em infraestrutura + * própria; também é o ponto usado pelos testes para apontar a um servidor + * local. */ urlBase?: string; + /** Substitui a URL base padrão do ambiente para o ADN (distribuição de DFe e parametrização). */ + urlBaseAdn?: string; /** Opções adicionais repassadas ao `https.Agent` (ex.: `ca`, `rejectUnauthorized` em testes). */ agenteOpcoes?: https.AgentOptions; } @@ -51,23 +64,37 @@ export interface ClienteSefin { registrarEvento(chaveAcesso: string, pedRegXmlAssinado: string): Promise; /** GET /nfse/{chave}/eventos - lista os eventos registrados para a NFS-e. */ listarEventos(chaveAcesso: string): Promise; + /** + * GET /contribuintes/DFe/{nsu} no ADN - baixa o próximo lote de documentos + * fiscais (até 50) a partir do NSU informado. Use `0` para sincronizar + * desde o início; o NSU do último documento recebido para continuar depois. + */ + baixarDfe(nsu: number, opcoes?: { cnpjConsulta?: string; lote?: boolean }): Promise; + /** GET /parametrizacao/{codigoMunicipio}/convenio no ADN - parâmetros de convênio do município. */ + consultarConvenio(codigoMunicipio: string | number): Promise; } -/** Cria um cliente HTTP autenticado por mTLS para o SEFIN Nacional. */ +/** Cria um cliente HTTP autenticado por mTLS para o SEFIN Nacional e o ADN. */ export function criarClienteSefin(opcoes: OpcoesClienteSefin): ClienteSefin { const urlBase = opcoes.urlBase ?? urlBaseSefin(opcoes.ambiente); + const urlAdn = opcoes.urlBaseAdn ?? urlBaseAdn(opcoes.ambiente); const agente = new https.Agent({ ...opcoes.agenteOpcoes, key: opcoes.certificado.chavePrivadaPem, cert: opcoes.certificado.certificadoPem, }); - async function requisitar(metodo: 'GET' | 'POST', caminho: string, corpo?: unknown): Promise { + async function requisitar( + metodo: 'GET' | 'POST', + urlBaseAlvo: string, + caminho: string, + corpo?: unknown + ): Promise { const corpoSerializado = corpo === undefined ? undefined : JSON.stringify(corpo); return new Promise((resolve, reject) => { const requisicao = https.request( - `${urlBase}/${caminho}`, + `${urlBaseAlvo}/${caminho}`, { method: metodo, agent: agente, @@ -124,7 +151,7 @@ export function criarClienteSefin(opcoes: OpcoesClienteSefin): ClienteSefin { return { async emitirDps(dpsXmlAssinado) { - const { status, corpo } = await requisitar('POST', 'nfse', { + const { status, corpo } = await requisitar('POST', urlBase, 'nfse', { dpsXmlGZipB64: compactarGZipBase64(dpsXmlAssinado), }); const objeto = corpo as Record; @@ -145,21 +172,36 @@ export function criarClienteSefin(opcoes: OpcoesClienteSefin): ClienteSefin { }, consultarNfse(chaveAcesso) { - return requisitar('GET', `nfse/${chaveAcesso}`); + return requisitar('GET', urlBase, `nfse/${chaveAcesso}`); }, consultarDps(idDps) { - return requisitar('GET', `dps/${idDps}`); + return requisitar('GET', urlBase, `dps/${idDps}`); }, registrarEvento(chaveAcesso, pedRegXmlAssinado) { - return requisitar('POST', `nfse/${chaveAcesso}/eventos`, { + return requisitar('POST', urlBase, `nfse/${chaveAcesso}/eventos`, { pedRegXmlGZipB64: compactarGZipBase64(pedRegXmlAssinado), }); }, listarEventos(chaveAcesso) { - return requisitar('GET', `nfse/${chaveAcesso}/eventos`); + return requisitar('GET', urlBase, `nfse/${chaveAcesso}/eventos`); + }, + + async baixarDfe(nsu, opcoesConsulta) { + const parametros = new URLSearchParams(); + if (opcoesConsulta?.cnpjConsulta) parametros.set('cnpjConsulta', opcoesConsulta.cnpjConsulta); + if (opcoesConsulta?.lote !== undefined) parametros.set('lote', String(opcoesConsulta.lote)); + const query = parametros.size > 0 ? `?${parametros.toString()}` : ''; + + const { corpo } = await requisitar('GET', urlAdn, `contribuintes/DFe/${nsu}${query}`); + return normalizarLoteDistribuicao(corpo); + }, + + async consultarConvenio(codigoMunicipio) { + const { corpo } = await requisitar('GET', urlAdn, `parametrizacao/${codigoMunicipio}/convenio`); + return normalizarConvenio(corpo); }, }; }