Skip to content

Release v3.1.0 - Expansão Massiva de Recursos NFE.io SDK#20

Merged
andrekutianski merged 20 commits intomasterfrom
develop
Feb 23, 2026
Merged

Release v3.1.0 - Expansão Massiva de Recursos NFE.io SDK#20
andrekutianski merged 20 commits intomasterfrom
develop

Conversation

@andrekutianski
Copy link
Member

📊 Resumo Executivo

Branch de origem: develop
Branch de destino: master
Versão: v3.0.2 → v3.1.0
Commits: 17 commits
Arquivos modificados: 58 arquivos
Linhas adicionadas: +14,176
Linhas removidas: -102
Autor principal: Andre Kutianski
Período: 16 de fevereiro - 22 de fevereiro de 2026


🎯 Objetivo

Esta release representa uma expansão massiva do NFE.io SDK, adicionando suporte completo para 10 novos recursos da API NFE.io, transformando o SDK de uma solução focada em NFS-e para uma plataforma completa de gestão de documentos fiscais eletrônicos brasileiros.


✨ Principais Destaques

🚀 Novos Recursos Implementados (10)

  1. 🚚 CT-e (Conhecimento de Transporte Eletrônico)

    • Consulta via Distribuição DFe
    • Habilitação/desabilitação de busca automática
    • Download de XML do CT-e e eventos
    • Configuração de NSU inicial
  2. 📥 NF-e de Entrada (Distribuição NF-e)

    • Consulta de NF-e recebidas via Distribuição
    • Manifestação automática (Ciência, Confirmação, Desconhecimento, Operação Não Realizada)
    • Download de XML completo
    • Configuração por ambiente SEFAZ
  3. 📋 Consulta NF-e por Chave de Acesso

    • Busca detalhada de NF-e emitida
    • Informações completas (emitente, destinatário, itens, impostos, pagamento)
    • Consulta de eventos associados
  4. 🧾 Consulta CFe-SAT (Cupom Fiscal Eletrônico)

    • Consulta de cupons fiscais SAT
    • Informações de emitente, comprador, itens e pagamento
  5. 🏢 Consulta CNPJ (Legal Entity Lookup)

    • Informações básicas de pessoa jurídica
    • Inscrições estaduais por estado
    • Inscrições estaduais por estado para nota fiscal
    • Validação de CNPJ ativo
  6. 👤 Consulta CPF (Natural Person Lookup)

    • Validação de status de CPF (Regular, Pendente, Cancelado, Suspenso, etc.)
  7. 📊 NF-e de Produto (Emissão)

    • Criação de NF-e de produto
    • Cancelamento, carta de correção
    • Download de PDF e XML
    • Consulta de status
  8. 🧮 Cálculo de Impostos

    • Cálculo automático de ICMS, IPI, PIS, COFINS, II
    • Múltiplos itens por requisição
    • Suporte a diferentes regimes tributários
  9. 📖 Códigos Auxiliares de Tributação

    • Lista de códigos CFOP
    • Lista de NCM
    • Lista de origens de mercadoria
  10. 🗺️ Inscrições Estaduais

    • Lista de inscrições estaduais por estado brasileiro

📦 Detalhamento Técnico das Mudanças

Arquivos Criados (30 novos arquivos)

Recursos (10 arquivos)

src/core/resources/consumer-invoice-query.ts        (141 linhas)
src/core/resources/inbound-product-invoices.ts      (654 linhas)
src/core/resources/legal-entity-lookup.ts           (334 linhas)
src/core/resources/natural-person-lookup.ts         (214 linhas)
src/core/resources/product-invoice-query.ts         (204 linhas)
src/core/resources/product-invoices.ts              (526 linhas)
src/core/resources/state-taxes.ts                   (268 linhas)
src/core/resources/tax-calculation.ts               (194 linhas)
src/core/resources/tax-codes.ts                     (214 linhas)
src/core/resources/transportation-invoices.ts       (397 linhas)

Testes Unitários (11 arquivos)

tests/unit/consumer-invoice-query.test.ts           (275 linhas)
tests/unit/legal-entity-lookup.test.ts              (587 linhas)
tests/unit/natural-person-lookup.test.ts            (300 linhas)
tests/unit/resources/inbound-product-invoices.test.ts  (510 linhas)
tests/unit/resources/product-invoice-query.test.ts  (335 linhas)
tests/unit/resources/product-invoices.test.ts       (560 linhas)
tests/unit/resources/state-taxes.test.ts            (225 linhas)
tests/unit/resources/tax-calculation.test.ts        (176 linhas)
tests/unit/resources/tax-codes.test.ts              (196 linhas)
tests/unit/resources/tax-types.test.ts              (231 linhas)
tests/unit/resources/transportation-invoices.test.ts (487 linhas)

Exemplos (9 arquivos)

examples/cnpj-lookup.js                             (255 linhas)
examples/consumer-invoice-query.js                  (91 linhas)
examples/cpf-lookup.js                              (117 linhas)
examples/inbound-product-invoices.js                (258 linhas)
examples/product-invoice-query.js                   (163 linhas)
examples/product-invoices.js                        (128 linhas)
examples/state-taxes.js                             (85 linhas)
examples/tax-calculation.js                         (165 linhas)
examples/transportation-invoices.js                 (289 linhas)

Arquivos Modificados Principais

1. Core Client (client.ts)

  • +521 linhas adicionadas
  • Adicionados 10 novos getters de recursos lazy-loaded
  • Adicionados 4 novos HTTP clients para diferentes APIs:
    • _cteHttp - API de CT-e (api.nfse.io)
    • _nfeQueryHttp - API de consulta NF-e
    • _legalEntityHttp - API de consulta CNPJ
    • _naturalPersonHttp - API de consulta CPF
  • Atualizada configuração para suportar dataApiKey (unificação de chaves auxiliares)

2. Tipos TypeScript (types.ts)

  • +2,922 linhas adicionadas
  • Adicionados 227+ novos tipos exportados
  • Tipos completos para todos os 10 novos recursos
  • Enums extensivos para códigos fiscais, status, métodos de pagamento, etc.

3. Exportações Públicas (index.ts)

  • +248 linhas adicionadas
  • Exportados 227+ novos tipos públicos
  • Exportadas 3 novas constantes de URL de API base

4. Documentação

README.md
  • +411 linhas adicionadas
  • Seções completas para todos os 10 novos recursos
  • Exemplos de código para cada recurso
  • Notas sobre pré-requisitos e configurações especiais
API.md
  • +1,212 linhas adicionadas
  • Documentação detalhada de cada novo método
  • Parâmetros, retornos e exceções documentados
  • Exemplos práticos para cada operação

5. HTTP Client (client.ts)

  • Adicionado tratamento para novos endpoints
  • Melhorias no handling de requests multi-API

6. OpenAPI Specs

  • Renomeado cpf-api.yaml para consulta-cpf.yaml
  • Atualizado timestamp em calculo-impostos-v1.yaml

🔧 Mudanças de Configuração

Breaking Changes (Configuração)

Removido: addressApiKey
Removido: cteApiKey

Adicionado: dataApiKey (unifica todas as chaves de APIs auxiliares)

// Antes (v3.0.2)
const nfe = new NfeClient({
  apiKey: 'xxx',
  addressApiKey: 'yyy',  // ❌ Descontinuado
  cteApiKey: 'zzz'       // ❌ Descontinuado
});

// Agora (v3.1.0)
const nfe = new NfeClient({
  apiKey: 'xxx',
  dataApiKey: 'yyy'      // ✅ Unificado
});

📊 Cobertura de Testes

Novos Testes Adicionados

  • 11 novos arquivos de teste
  • 3,882+ linhas de código de teste
  • Cobertura completa dos 10 novos recursos
  • Testes unitários com mocks para todas as operações
  • Testes de validação de parâmetros
  • Testes de tratamento de erros

Status de Testes

✅ Todos os testes existentes continuam passando
✅ Novos testes implementados para todos os recursos
✅ Cobertura estimada > 85%


🔍 Exemplos de Uso dos Novos Recursos

1. Consulta CNPJ

const nfe = new NfeClient({ apiKey: 'xxx', dataApiKey: 'yyy' });

// Informações básicas
const info = await nfe.legalEntityLookup.getBasicInfo('12345678000190');
console.log('Razão Social:', info.name);
console.log('Regime Tributário:', info.taxRegime);

// Inscrições estaduais para nota fiscal
const inscricoes = await nfe.legalEntityLookup.getStateTaxForInvoice(
  '12345678000190',
  'SP'
);
console.log('IE SP:', inscricoes.stateRegistration);

2. CT-e (Transporte)

// Ativar busca automática
const settings = await nfe.transportationInvoices.enable('empresa-id', {
  startFromNsu: 12345
});

// Consultar CT-e por chave
const cte = await nfe.transportationInvoices.retrieve(
  'empresa-id',
  '35240112345678000190570010000001231234567890'
);

// Download XML
const xml = await nfe.transportationInvoices.downloadXml(
  'empresa-id',
  '35240112345678000190570010000001231234567890'
);

3. NF-e de Produto

// Criar NF-e de produto
const nfe = await nfe.productInvoices.create('empresa-id', {
  buyer: { /* ... */ },
  items: [{ /* ... */ }],
  payment: { /* ... */ }
});

// Cancelar NF-e
await nfe.productInvoices.cancel('empresa-id', 'nfe-id', {
  reason: 'Erro no pedido'
});

// Download PDF
const pdf = await nfe.productInvoices.downloadPdf('empresa-id', 'nfe-id');

4. Cálculo de Impostos

const calculo = await nfe.taxCalculation.calculate({
  issuer: {
    federalTaxNumber: '12345678000190',
    state: 'SP'
  },
  recipient: {
    federalTaxNumber: '98765432000100',
    state: 'RJ'
  },
  items: [{
    code: 'PROD-001',
    description: 'Produto teste',
    ncm: '12345678',
    cfop: '5102',
    unitValue: 100.00,
    quantity: 2
  }]
});

console.log('ICMS:', calculo.items[0].icms);
console.log('PIS:', calculo.items[0].pis);
console.log('COFINS:', calculo.items[0].cofins);

🐛 Correções Incluídas

.gitignore

  • ✅ Corrigida entrada do diretório client-python
  • ✅ Removidos arquivos de teste obsoletos

CI/CD

  • ✅ Adicionados triggers para branches bugfix/* e chore/*

Documentação

  • ✅ Corrigidos headers de seção no README.md

Generated Files

  • ✅ Atualizados timestamps de regeneração dos tipos OpenAPI

📈 Impacto e Métricas

Crescimento do SDK

  • Recursos: 5 → 15 (+200%)
  • Linhas de código (src/): ~3,500 → ~10,000 (+186%)
  • Linhas de teste: ~2,000 → ~6,000 (+200%)
  • Exemplos: 8 → 17 (+112%)
  • Tipos exportados: ~100 → 327+ (+227%)

APIs Suportadas

  • ✅ NFS-e (Service Invoices) - Existente
  • ✅ Pessoa Jurídica/Física - Existente
  • ✅ Webhooks - Existente
  • ✅ Endereços - Existente
  • ✅ CT-e - NOVO
  • ✅ NF-e Distribuição - NOVO
  • ✅ NF-e Consulta - NOVO
  • ✅ CFe-SAT - NOVO
  • ✅ Consulta CNPJ - NOVO
  • ✅ Consulta CPF - NOVO
  • ✅ NF-e Produto - NOVO
  • ✅ Cálculo Impostos - NOVO
  • ✅ Códigos Auxiliares - NOVO
  • ✅ Inscrições Estaduais - NOVO

andrekutianski and others added 20 commits February 2, 2026 22:13
…ource

- Introduced `cteApiKey` in NfeConfig and RequiredNfeConfig interfaces for CT-e API key management.
- Added TransportationInvoicesResource for handling CT-e operations, including enabling/disabling automatic searches, retrieving settings, and managing events.
- Implemented comprehensive unit tests for TransportationInvoicesResource covering all functionalities and edge cases.
- Updated NfeClient to support multi-API key configuration, including fallback mechanisms for CT-e API key.
- Regenerated OpenAPI types and updated generated files with new timestamps.
Consolida as chaves de API separadas para serviços de consulta
(addressApiKey e cteApiKey) em uma única propriedade dataApiKey,
simplificando a configuração do SDK e refletindo a arquitetura
real da API NFE.io (duas categorias: fiscal e consulta).

Motivação:
- A API NFE.io utiliza apenas duas categorias de chave: uma para
  operações fiscais (NFS-e, Companies, etc.) e outra para todos
  os serviços de consulta (Endereços, CT-e, CNPJ, CPF)
- Ter chaves separadas (addressApiKey, cteApiKey) adicionava
  complexidade desnecessária sem benefício real
- A unificação prepara o SDK para futuros serviços de consulta
  que usarão a mesma chave

Alterações em tipos (src/core/types.ts):
- NfeConfig: remove addressApiKey e cteApiKey, adiciona dataApiKey
- RequiredNfeConfig: idem, mantendo tipagem string | undefined

Alterações no client (src/core/client.ts):
- Remove resolveAddressApiKey() e resolveCteApiKey()
- Adiciona resolveDataApiKey() com cadeia de fallback:
  config.dataApiKey → config.apiKey → NFE_DATA_API_KEY → NFE_API_KEY
- getAddressHttpClient() e getCteHttpClient() usam resolveDataApiKey()
- validateAndNormalizeConfig() normaliza dataApiKey ao invés de duas
- updateConfig() preserva cache de dataApiKey ao invés de duas
- Mensagens de erro atualizadas para referenciar dataApiKey
- JSDoc atualizado nos getters addresses e transportationInvoices

Alterações em resources:
- addresses.ts: JSDoc atualizado para referenciar dataApiKey
- transportation-invoices.ts: JSDoc atualizado para referenciar dataApiKey

Alterações em testes:
- tests/unit/client-multikey.test.ts: reescrito (38 testes)
  - Testa cadeia de fallback para Addresses e CT-e via dataApiKey
  - Testa que ambos services resolvem a mesma chave
  - Testa uso isolado de dataApiKey sem apiKey
  - Testa que NFE_ADDRESS_API_KEY e NFE_CTE_API_KEY não são mais
    reconhecidas (breaking change documentada)
- tests/integration/addresses.integration.test.ts: atualizado

Alterações em documentação:
- README.md: config examples, tabela env vars (2 vars ao invés de 3),
  notas sobre Address API e CT-e
- docs/API.md: NfeConfig type, nota do recurso CT-e

Alterações em exemplos:
- examples/setup.js: template .env.test usa NFE_DATA_API_KEY
- examples/address-lookup.js: config e env vars atualizados
- examples/transportation-invoices.js: config e env vars atualizados

Arquivos gerados (src/generated/):
- Timestamps atualizados pela regeneração do openapi-typescript

Validação:
- TypeScript: zero erros (npx tsc --noEmit)
- Testes: 381 passed, 47 skipped (integration)
- Build: ESM + CJS + DTS gerados com sucesso

BREAKING CHANGE: addressApiKey e cteApiKey foram removidos de NfeConfig.
Use dataApiKey para configurar a chave de serviços de consulta.
As variáveis de ambiente NFE_ADDRESS_API_KEY e NFE_CTE_API_KEY foram
substituídas por NFE_DATA_API_KEY.
…buição)

Adiciona suporte completo à API consulta-nfe-distribuicao-v1 para consulta
de NF-e recebidas via Distribuição DFe (SEFAZ), seguindo o padrão do
TransportationInvoicesResource existente.

## Novos arquivos

- src/core/resources/inbound-product-invoices.ts
  Classe InboundProductInvoicesResource com 13 métodos públicos:
  - enableAutoFetch / disableAutoFetch / getSettings (gerenciamento)
  - getDetails / getProductInvoiceDetails (consulta webhook v1/v2)
  - getEventDetails / getProductInvoiceEventDetails (eventos)
  - getXml / getEventXml / getPdf / getJson (downloads)
  - manifest (Manifestação do Destinatário: 210210/210220/210240)
  - reprocessWebhook (reprocessar por chave de acesso ou NSU)

- tests/unit/resources/inbound-product-invoices.test.ts
  31 testes unitários cobrindo validação de parâmetros, caminhos HTTP
  corretos, métodos HTTP corretos e valores de retorno.

- examples/inbound-product-invoices.js
  Exemplo completo demonstrando todos os fluxos principais.

## Arquivos modificados

- src/core/types.ts
  12 novos tipos/interfaces: InboundInvoiceMetadata,
  InboundProductInvoiceMetadata, InboundSettings, EnableInboundOptions,
  ManifestEventType, InboundCompany, InboundIssuer, InboundBuyer,
  InboundTransportation, InboundLinks, InboundProductInvoice,
  AutomaticManifesting.

- src/core/client.ts
  Lazy getter `inboundProductInvoices` usando cteHttp (api.nfse.io).

- src/core/resources/index.ts
  Export do InboundProductInvoicesResource.

- src/index.ts
  Re-exports de todos os tipos de NF-e Distribuição.

- docs/API.md
  Referência completa da API com assinaturas, tabelas de parâmetros,
  tabelas de resposta e exemplos de código para todos os 13 métodos.

- README.md
  Seção "NF-e de Entrada - Distribuição" com exemplos de uso em
  português e tabela de tipos de manifestação.

## Decisões técnicas

- Reutiliza o HttpClient de CT-e (mesmo host api.nfse.io)
- Tipos handwritten (nomes gerados são ilegíveis: Sucessonarequisio)
- tpEvent do manifest é passado como query param na URL
- Webhook v2 (getProductInvoice*) omite nsuParent/nfeSerialNumber/
  operationType e adiciona productInvoices[]
- Validação de chave de acesso: 44 dígitos numéricos
feat(inbound): implementa recurso InboundProductInvoices (NF-e Distribuição)
…sulta-nf)

Adiciona recurso ProductInvoiceQuery para consulta de NF-e (Nota Fiscal
Eletrônica de Produto) diretamente na SEFAZ por chave de acesso de 44 dígitos.
Recurso somente leitura sem necessidade de escopo de empresa, usando host
dedicado nfe.api.nfe.io com resolução de dataApiKey/apiKey.

Resource (src/core/resources/product-invoice-query.ts):
- retrieve(accessKey) — consulta dados completos da NF-e (emissor, destinatário,
  itens, totais, transporte, pagamento)
- downloadPdf(accessKey) — baixa DANFE em PDF como Buffer
- downloadXml(accessKey) — baixa XML da NF-e como Buffer
- listEvents(accessKey) — lista eventos fiscais (cancelamentos, correções,
  manifestações)
- Validação de chave de acesso (44 dígitos numéricos) com ValidationError

HTTP Client (src/core/http/client.ts):
- Adiciona método getBuffer(path, accept) para requisições GET com resposta
  binária (PDF/XML), enviando header Accept customizado

Client (src/core/client.ts):
- Registra productInvoiceQuery como getter lazy-init com JSDoc completo
- Adiciona getNfeQueryHttpClient() com HTTP client dedicado para nfe.api.nfe.io
- Usa resolveDataApiKey() para cadeia de fallback dataApiKey → apiKey → env vars

Types (src/core/types.ts):
- ~550 linhas de tipos TypeScript: 16 string unions (ProductInvoiceStatus,
  PaymentType, OperationType, etc.) e ~30 interfaces (ProductInvoiceDetails,
  Issuer, Buyer, Totals, IcmsTotals, Item, ItemIcms, ItemTax, Transport,
  Payment, Protocol, Billing, Event, EventsResponse, etc.)
- Exporta todos os tipos via src/index.ts

Testes (21 novos testes de resource + 5 de integração):
- tests/unit/resources/product-invoice-query.test.ts: validação de chave de
  acesso (vazio, não-numérico, curto, longo, válido), retrieve (sucesso, 404,
  401), downloadPdf/Xml (Buffer, endpoint correto, 404), listEvents (com
  eventos, array vazio, endpoint, 404)
- tests/unit/nfe-client.test.ts: getter productInvoiceQuery (definido, lazy
  init, erro sem API key)
- tests/unit/http-client.test.ts: getBuffer (Accept header, XML, propagação
  de erros)

Documentação:
- docs/API.md: seção Product Invoice Query com assinaturas, parâmetros, tipos
  de retorno e exemplos de código
- README.md: seção de uso com exemplos de retrieve, downloadPdf/Xml, listEvents
- examples/product-invoice-query.js: exemplo completo executável

Baseado na spec OpenAPI: openapi/spec/consulta-nf.yaml (Swagger 2.0,
host nfe.api.nfe.io, 4 endpoints GET /v2/productinvoices/)

Refs: openspec/changes/implement-consulta-nf
Implementa o recurso ConsumerInvoiceQueryResource para consulta de
Cupons Fiscais Eletrônicos (CFe-SAT) por chave de acesso, baseado
na spec consulta-nf-consumidor.yaml.

Novos arquivos:
- src/core/resources/consumer-invoice-query.ts: resource com retrieve() e downloadXml()
- tests/unit/consumer-invoice-query.test.ts: 17 testes unitários
- examples/consumer-invoice-query.js: exemplo de uso completo

Tipos adicionados (src/core/types.ts):
- TaxCoupon: interface principal do cupom fiscal
- CouponIssuer, CouponBuyer: entidades emissor/destinatário
- CouponItem, CouponItemTax: itens com detalhamento tributário
- CouponPayment, CouponPaymentDetail: dados de pagamento
- CouponTotal, CouponIcmsTotal, CouponIssqnTotal: totalizadores
- CouponIcmsTax, CouponPisTax, CouponCofinsTax, CouponIssqnTax: impostos
- CouponAddress, CouponCity, CouponDelivery: endereços
- CouponAdditionalInformation, CouponFiscoField, CouponReferencedDocument
- Enums: CouponStatus, CouponPersonType, CouponTaxRegime, CouponPaymentMethod

Integração no client:
- NfeClient.consumerInvoiceQuery: lazy getter reutilizando getNfeQueryHttpClient()
- Exportações públicas de todos os tipos em src/index.ts
- Host: nfe.api.nfe.io (mesmo da consulta NF-e, autenticação via dataApiKey)

Documentação:
- docs/API.md: seção Consumer Invoice Query com assinaturas e exemplos
- README.md: seção CFe-SAT com exemplos de uso

Validação:
- npm run typecheck: zero erros
- npm test: 456 testes passando (17 novos)
Adiciona novo resource LegalEntityLookupResource exposto como
nfe.legalEntityLookup, conectando à API legalentity.api.nfe.io
para consulta de dados cadastrais de pessoas jurídicas (CNPJ).

4 métodos implementados:
- getBasicInfo(cnpj, options?) — dados cadastrais da Receita Federal
  (razão social, endereço, sócios, CNAE, natureza jurídica, capital social)
- getStateTaxInfo(uf, cnpj) — inscrição estadual e regime tributário
- getStateTaxForInvoice(uf, cnpj) — avaliação de IE para emissão de NF-e
- getSuggestedStateTaxForInvoice(uf, cnpj) — melhor IE sugerida para emissão

Arquitetura:
- HttpClient dedicado com base URL legalentity.api.nfe.io
- Resolução de API key via cadeia dataApiKey → apiKey → env vars
- Lazy instantiation e cache do resource (padrão existente do SDK)
- Validação client-side de CNPJ (14 dígitos, aceita pontuação) e UF (29 códigos)

Tipos TypeScript:
- 30+ interfaces/types com prefixo LegalEntity em src/core/types.ts
- BrazilianState union type (27 UFs + EX + NA)
- Enums tipados para status, porte, regime tributário, natureza jurídica
- Todos os campos opcionais (?) exceto onde garantido pela API
- Exportados via src/index.ts

Testes:
- 38 testes unitários cobrindo validação, métodos e error handling
- Mock de HttpClient com vitest (padrão existente)

Documentação:
- README.md: seção Consulta CNPJ com exemplos de código
- docs/API.md: documentação completa (métodos, parâmetros, tipos, exemplos)
- examples/cnpj-lookup.js: 6 exemplos demonstrando todos os métodos

Validação: typecheck ✓ | 494 tests passing ✓ | build ✓

Ref: openapi/spec/consulta-cnpj.yaml (Swagger 2.0)
…a CPF)

Adiciona suporte completo para consulta de situação cadastral de CPF
na Receita Federal via a API naturalperson.api.nfe.io.

## Novos arquivos

- src/core/resources/natural-person-lookup.ts
  Resource com validação de CPF (11 dígitos, aceita pontuação),
  validação de data de nascimento (string YYYY-MM-DD ou Date object),
  e método getStatus() que consulta a API.

- openapi/spec/consulta-cpf.yaml
  Spec OpenAPI (Swagger 2.0) da API de Consulta CPF, renomeado de
  cpf-api.yaml para seguir o padrão de nomenclatura do projeto.

- tests/unit/natural-person-lookup.test.ts
  22 testes unitários cobrindo: validação de CPF (vazio, curto, longo,
  formatado), validação de data (formato inválido, mês/dia fora de
  range, Date object inválido), chamadas getStatus() com normalização
  de entrada, e propagação de erros HTTP (404, 401, 400).

- examples/cpf-lookup.js
  Exemplo de uso com string date, Date object e tratamento de erros.

## Tipos adicionados (src/core/types.ts)

- NaturalPersonStatus: union type com valores conhecidos da Receita
  ('Regular', 'Suspensa', 'Cancelada', 'Titular Falecido',
  'Pendente de Regularização', 'Nula') + fallback string.
- NaturalPersonStatusResponse: interface com campos name?,
  federalTaxNumber, birthOn?, status?, createdOn?.

## Integração no NfeClient (src/core/client.ts)

- Lazy getter naturalPersonLookup com HttpClient dedicado
- Método privado getNaturalPersonHttpClient() usando resolveDataApiKey()
- Re-export de NATURAL_PERSON_API_BASE_URL

## Exports públicos (src/index.ts)

- Tipos: NaturalPersonStatus, NaturalPersonStatusResponse
- Constante: NATURAL_PERSON_API_BASE_URL

## Documentação

- README.md: seção Consulta CPF com exemplos de código
- docs/API.md: referência completa (método, parâmetros, tipos, throws)

## Arquivos gerados (src/generated/)

- Apenas atualização de timestamps pela re-execução do gerador.
…iares

Adiciona suporte completo ao Motor de Cálculo de Tributos (calculo-impostos-v1)
com dois novos resources no SDK: taxCalculation e taxCodes.

## Novos Resources

### TaxCalculationResource (nfe.taxCalculation)
- calculate(tenantId, request) → CalculateResponse
- Calcula ICMS, ICMS-ST, PIS, COFINS, IPI, II para operações com produtos
- Validação de tenantId e campos obrigatórios do request
- URL encoding e trim do tenantId
- Endpoint: POST /tax-rules/{tenantId}/engine/calculate (api.nfse.io)

### TaxCodesResource (nfe.taxCodes)
- listOperationCodes() — códigos de natureza de operação
- listAcquisitionPurposes() — finalidades de aquisição
- listIssuerTaxProfiles() — perfis fiscais do emissor
- listRecipientTaxProfiles() — perfis fiscais do destinatário
- Paginação via pageIndex/pageCount (1-based, difere do OData $skip/$top)
- Endpoints: GET /tax-codes/* (api.nfse.io)

## Tipos Adicionados (src/core/types.ts)
- Enums: TaxOperationType, TaxOrigin, TaxCalcTaxRegime
- Componentes tributários: TaxIcms (~45 campos), TaxIcmsUfDest, TaxPis,
  TaxCofins, TaxIpi, TaxIi
- Request: CalculateRequest, CalculateRequestIssuer/Recipient, CalculateItemRequest
- Response: CalculateResponse, CalculateItemResponse
- Códigos: TaxCode, TaxCodePaginatedResponse, TaxCodeListOptions
- Nota: TaxCalcTaxRegime usa PascalCase (RealProfit) para evitar conflito
  com o TaxRegime existente (LucroReal) das notas de serviço

## Integração no NfeClient
- Lazy getters: nfe.taxCalculation e nfe.taxCodes
- Ambos usam getCteHttpClient() (api.nfse.io) com resolveDataApiKey()
- Exports públicos adicionados em src/index.ts

## Testes (38 novos testes)
- tax-calculation.test.ts: 13 testes (calculate, validação, erros)
- tax-codes.test.ts: 15 testes (4 métodos, paginação, erros)
- tax-types.test.ts: 10 testes (verificação de tipos compile-time + runtime)

## Documentação
- README.md: seções Cálculo de Impostos e Códigos Auxiliares com exemplos
- docs/API.md: referência completa (métodos, parâmetros, tipos, erros)
- examples/tax-calculation.js: exemplo completo com listagem e cálculo
- examples/README.md: entrada do novo exemplo

## Arquivos Modificados
- src/core/types.ts (+439 linhas)
- src/core/client.ts (imports, cache fields, lazy getters)
- src/core/resources/index.ts (exports)
- src/index.ts (type re-exports, resource exports)
- openapi/spec/calculo-impostos-v1.yaml (host field)
- src/generated/*.ts (timestamps da regeneração)

Ref: openspec/changes/implement-calculo-impostos (30/30 tasks)
…ões Estaduais

Adiciona suporte completo à API NF-e de Produto (nf-produto-v2) com dois novos
recursos: ProductInvoicesResource e StateTaxesResource, ambos conectados ao host
api.nfse.io via getCteHttpClient().

## ProductInvoicesResource (16 métodos)

Ciclo de vida completo de NF-e de Produto:
- create(): emissão de NF-e (assíncrono, retorna 202)
- createWithStateTax(): emissão via inscrição estadual específica
- list(): listagem com paginação cursor-based (environment obrigatório)
- retrieve(): consulta detalhada por ID
- cancel(): cancelamento assíncrono com motivo opcional
- listItems(): itens da nota fiscal com paginação
- listEvents(): eventos fiscais com paginação
- downloadPdf(): URL do DANFE PDF (com opção force)
- downloadXml(): URL do XML autorizado
- downloadRejectionXml(): URL do XML de rejeição
- downloadEpecXml(): URL do XML de contingência EPEC
- sendCorrectionLetter(): CC-e com validação 15-1000 caracteres
- downloadCorrectionLetterPdf(): URL do PDF da CC-e
- downloadCorrectionLetterXml(): URL do XML da CC-e
- disable(): inutilização por ID
- disableRange(): inutilização de faixa de numeração

## StateTaxesResource (5 métodos CRUD)

Gestão de Inscrições Estaduais (pré-requisito para emissão de NF-e):
- list(): listagem com paginação cursor-based
- create(): criação com body wrapper { stateTax: data }
- retrieve(): consulta por ID
- update(): atualização parcial com body wrapper
- delete(): exclusão por ID

## Tipos TypeScript (~1.075 linhas)

- 30+ enums como string literal unions (NfeInvoiceStatus, NfePaymentMethod, etc.)
- Interfaces completas: NfeProductInvoice, NfeProductInvoiceIssueData, NfeStateTax
- Tipos de request/response: NfeProductInvoiceListOptions, NfeDisablementData, etc.
- Tipos auxiliares: NfeIcmsTaxResource, NfeInvoiceItemResource, NfeBillingResource

## Integração no NfeClient

- Lazy getters productInvoices e stateTaxes em NfeClient
- Ambos usam getCteHttpClient() (host api.nfse.io, dataApiKey com fallback)
- Exports públicos em src/core/resources/index.ts e src/index.ts

## Testes (50 novos testes)

- product-invoices.test.ts: 36 testes cobrindo todos os 16 métodos
- state-taxes.test.ts: 14 testes cobrindo CRUD + validações
- Mock do HttpClient com verificação de paths, params e body wrapping

## Documentação e Exemplos

- docs/API.md: referência completa dos 21 métodos com assinaturas, exemplos e tabelas
- README.md: seções em português para nfe.productInvoices e nfe.stateTaxes
- examples/product-invoices.js: exemplo de ciclo de vida completo (128 linhas)
- examples/state-taxes.js: exemplo CRUD com todas as operações (85 linhas)

Baseado na spec OpenAPI nf-produto-v2.yaml.
Todos os 606 testes passam, zero erros TypeScript.
@andrekutianski andrekutianski self-assigned this Feb 23, 2026
@github-actions
Copy link

📋 OpenAPI Spec Validation

✅ All specs validated and types generated successfully

Specs processed:

  • calculo-impostos-v1.yaml - 27.90 KB, 853 lines
  • consulta-cnpj.yaml - 34.28 KB, 1128 lines
  • consulta-cpf.yaml - 3.39 KB, 83 lines
  • consulta-cte-v2.yaml - 18.33 KB, 578 lines
  • consulta-endereco.yaml - 11.17 KB, 343 lines
  • consulta-nf-consumidor.yaml - 43.41 KB, 1279 lines
  • consulta-nf.yaml - 137.87 KB, 3119 lines
  • consulta-nfe-distribuicao-v1.yaml - 53.07 KB, 1775 lines
  • nf-consumidor-v2.yaml - 293.87 KB, 7609 lines
  • nf-produto-v2.yaml - 309.41 KB, 8204 lines
  • nf-servico-v1.yaml - 257.42 KB, 6252 lines
  • nfeio.yaml - 15.86 KB, 630 lines

Generated types available as artifact in src/generated/.

@andrekutianski andrekutianski merged commit 068a17b into master Feb 23, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant