📅 Data de Lançamento: 2026-01-06
Esta versão representa um marco importante na evolução do SDK, trazendo type safety completo através de enums tipados e melhorias significativas na estrutura de dados.
Implementação de 22 enums para substituir valores primitivos (strings/integers) por tipos seguros, aumentando drasticamente a confiabilidade e a manutenibilidade do código.
Tributação e Regime Fiscal:
RegimeApuracaoSN- Regime de apuração dos tributos (Simples Nacional)OpcaoSimplesNacional- Opção pelo Simples NacionalRegimeEspecialTributacao- Regime especial de tributaçãoTributacaoIssqn- Tributação do ISSQNTipoImunidade- Tipos de imunidade fiscalTipoSuspensao- Tipos de suspensão de exigibilidadeCstPisCofins- Código de Situação Tributária (PIS/COFINS)
Retenções:
TipoRetencaoIssqn- Tipo de retenção do ISSQNTipoRetencaoPisCofins- Tipo de retenção de PIS/COFINS
Documentos e Processos:
MotivoSubstituicao- Motivo de substituição de NFS-eMotivoEmissaoTomadorIntermediario- Motivo de emissão por tomador/intermediárioMotivoNaoNif- Motivo de não informar NIFTipoDeducaoReducao- Tipo de dedução/redução
Comércio Exterior:
ModoPrestacao- Modo de prestação de serviçoMovimentacaoTemporariaBens- Movimentação temporária de bens
Outros:
IndicadorTotalTributos- Indicador de informação de tributosTipoPessoa- Tipo de pessoa (Física/Jurídica/Estrangeiro)AmbienteGerador- Ambiente gerador da NFS-eTipoNsu- Tipo de NSU para distribuiçãoEmitenteDPS- Emitente do DPSProcessoEmissao- Processo de emissãoTipoAmbiente- Tipo de ambiente (Produção/Homologação)
Aprimoramento do EnumCaster para suportar:
- Conversão automática de strings numéricas para int-backed enums
- Validação rigorosa de valores
- Melhor tratamento de erros com mensagens descritivas
Todos os DTOs foram atualizados para utilizar os novos enums através do atributo #[CastWith(EnumCaster::class)], garantindo:
- Type hints adequados em todas as propriedades
- Autocomplete no IDE
- Validação em tempo de execução
- Documentação inline dos valores válidos
Os builders XML (DpsXmlBuilder, NfseXmlBuilder, EventosXmlBuilder) foram ajustados para:
- Extrair automaticamente o valor de enums backed (
$enum->value) - Manter compatibilidade com valores null
- Preservar a formatação correta do XML
- Fix: Corrigido valor inválido para
regApTribSNnos testes (era0ou3, agora usanullou2) - Fix: Corrigido valor inválido para
cMotivono teste (era'1', agora usa'01') - Fix: Removido cast manual de enum para string em
DpsXmlBuilder::appendElement()que causava erro de conversão
- Fix: Implementada validação rigorosa de valores de enum, prevenindo uso de valores inválidos
- Fix: Mensagens de erro mais claras quando valores inválidos são fornecidos
- ✅ 150 testes passando (521 assertions)
⚠️ 1 teste skipped (certificado expirado - requer arquivo pré-gerado)- ❌ 0 testes falhando
Antes:
$dps = new DpsData([
'infDPS' => [
'tpAmb' => 2,
'tpEmit' => 1,
// ...
]
]);Depois:
use Nfse\Enums\TipoAmbiente;
use Nfse\Enums\EmitenteDPS;
$dps = new DpsData([
'infDPS' => [
'tpAmb' => TipoAmbiente::Homologacao,
// ou simplesmente: 'tpAmb' => 2,
'tpEmit' => EmitenteDPS::Prestador,
// ou simplesmente: 'tpEmit' => 1,
// ...
]
]);Nota: O EnumCaster mantém retrocompatibilidade, aceitando tanto valores primitivos quanto instâncias de enum.
regApTribSN: Agora aceita apenas'1'ou'2'(valores0ou3não são mais válidos)cMotivo: Deve usar formato com zero à esquerda (ex:'01'ao invés de'1')
Para mais detalhes sobre os enums e seus valores válidos, consulte:
- A documentação inline de cada enum em
src/Enums/ - Os métodos
getDescription()disponíveis em cada enum - Os testes de exemplo em
tests/Unit/Enums/EnumsTest.php
Consulte o arquivo DTO_MIGRATION_GUIDE.md para instruções detalhadas sobre como migrar seu código para utilizar os novos enums.
Agora é possível baixar documentos fiscais tanto para Contribuintes quanto para Municípios com suporte total aos parâmetros da API Nacional.
- Contribuinte: Adicionado suporte para
cnpjConsulta(para consultar notas de terceiros/filiais) e controle delote. - Município: Adicionado suporte para
tipoNSU(RECEPCAO, DISTRIBUICAO, GERAL, MEI) e controle delote.
- Correção de Endpoints: Ajuste nos caminhos da API para respeitar o Case Sensitivity (
/DFe,/NFSe,/Eventos). - Tratamento de Erros: Mensagens de erro da API agora são capturadas e exibidas com mais detalhes nas exceções.
- Mapeamento de DTOs: Correção no mapeamento de respostas que utilizam PascalCase (ex:
TipoAmbiente,UltimoNSU).
- Fix: Resolvido erro
TypeErrorao tentar baixar DANFSe quando a chave de acesso não estava disponível. - Fix: Correção na descompactação de arquivos XML (GZIP) que estavam sendo tratados incorretamente como ZIP.
- Fix: Remoção de chamadas depreciadas
setAccessible(true)nos testes unitários.
- Atualização da documentação (
README.mdedocs/) com novos exemplos de uso. - Refatoração dos testes para garantir compatibilidade com as novas assinaturas de métodos.
A primeira versão pública do SDK mais moderno e completo para integração com a NFS-e Nacional!
- SDK Completo: Integração com SEFIN Nacional, ADN e CNC
- Assinatura A1: Suporte nativo a certificados PKCS#12/PFX
- 139 Testes: Cobertura extensiva com Pest
- Documentação: Site completo em nfse-php.netlify.app
composer require nfse-nacional/nfse-php:1.0.0-beta$nfse = new Nfse($context);
$contribuinte = $nfse->contribuinte();
$contribuinte->emitir($dps); // Emitir NFS-e
$contribuinte->consultarNfse($chave); // Consultar nota
$contribuinte->registrarEvento($evento); // Cancelar/substituir$municipio = $nfse->municipio();
$municipio->baixarDfe($nsu); // Baixar notas
$municipio->consultarAliquota(...); // Consultar alíquotas
$municipio->consultarContribuinte(...); // Consultar cadastro- PHP 8.4+
- Extensão OpenSSL
- Certificado digital A1 (PFX/P12)
- 📚 Documentação
- 💬 Discussões
- 🐛 Issues
💖 Apoie o projeto: GitHub Sponsors