Skip to content

feat(service-invoices): raw + campos ISS + Borrower no DTO de NFS-e (+ release v1.1.0)#17

Merged
andrenfe merged 5 commits into
masterfrom
feat/expand-service-invoice-dto
Jul 10, 2026
Merged

feat(service-invoices): raw + campos ISS + Borrower no DTO de NFS-e (+ release v1.1.0)#17
andrenfe merged 5 commits into
masterfrom
feat/expand-service-invoice-dto

Conversation

@andrenfe

Copy link
Copy Markdown
Member

Resumo

O retrieve de NFS-e devolve 44 campos; o DTO manuscrito Nfe::ServiceInvoice cobria 19 e o from_api descartava os outros ~25 (árvore de retenções, provider, taxationType, location, approximateTax, ...). Mitigação-ponte enquanto o upstream (nfe/docs) não componentiza a resposta de sucesso — espelha a change homônima do client-php (expand-service-invoice-dto).

Inclui a preparação do release v1.1.0 (bump + rotação do CHANGELOG, convenções do scripts/release.sh): ao mergear, basta a tag anotada v1.1.0 para o workflow publicar via OIDC. A versão empacota as duas changes (webhooks #16 + esta).

Mudanças

  • :raw no Nfe::ServiceInvoice: payload completo preservado em todas as leituras (list/retrieve/cancel/201-issued — from_api é o único ponto de hidratação). Nenhum campo mais fica inacessível.
  • Campos de ISS tipados: base_tax_amount, iss_rate, iss_tax_amount — RBS (Float | Integer) validado por sonda ao vivo (inteiros chegam como Integer, decimais como Float)
  • Novo Nfe::ServiceInvoiceBorrower tipado com ponte Hash (#[]/#dig delegam ao payload cru — borrower["name"] continua funcionando); federal_tax_number sempre String via Company.stringify (CNPJ alfanumérico IN RFB 2.229/2024; spec declara int64 — desvio pinado no teste)
  • pdf/xml deprecados (@deprecated YARD): campos-fantasma, sempre nil no retrieve — use download_pdf/download_xml
  • Teste de alinhamento YAML↔DTO ancorado por PATH (colisão de operationId ServiceInvoices_idGet no spec), que também é o gatilho de migração: quando a resposta virar $ref, o teste falha ruidosamente
  • Spec nf-servico-v1.yaml atualizado (ErrorsResource em components.schemas) + saída de rake generate commitada junto (namespace nf_servico_v1 só de erros); openapi/README.md e docblock corrigidos; snapshot verificado contra nfe/docs main (18 specs byte-idênticos)
  • Docs do recurso, skill nfeio-ruby-sdk, CHANGELOG; OpenSpec sincronizado e arquivado

SemVer

Minor (1.1.0) — tudo aditivo. borrower mantém leituras Hash pela ponte; pdf/xml deprecados (não removidos); membros novos anexados ao fim (:raw por último).

Testes

  • rake completo (Docker ruby34): 688 examples, 0 failures · RuboCop limpo · Steep limpo · rbs validate ok · generate:check em sync
  • Sonda ao vivo (read-only) contra api.nfe.io: serialização do ISS confirmada, fantasmas nil, Borrower normalizado (fio IntegerString), 21 campos sem membro tipado acessíveis via raw

andrenfe added 5 commits July 9, 2026 23:12
… NFS-e

O retrieve de NFS-e devolve 44 campos; o DTO manuscrito cobria 19 e o
from_api descartava o resto (arvore de retencoes, provider, taxationType,
location, approximateTax...). Mitigacao-ponte enquanto o upstream nao
componentiza a resposta de sucesso (espelha a change homonima do client-php):

- Nfe::ServiceInvoice ganha :raw (payload completo preservado em todas as
  leituras - list/retrieve/cancel/201-issued) e os campos tipados
  base_tax_amount/iss_rate/iss_tax_amount (RBS (Float | Integer), validado
  por sonda ao vivo: inteiros chegam como Integer, decimais como Float)
- Novo Nfe::ServiceInvoiceBorrower tipado com ponte Hash (#[]/#dig delegam
  ao payload cru - borrower["name"] continua funcionando);
  federal_tax_number sempre String via Company.stringify (CNPJ alfanumerico
  IN RFB 2.229/2024; spec declara int64 - desvio pinado)
- pdf/xml deprecados (@deprecated YARD): campos-fantasma, sempre nil no
  retrieve - use download_pdf/download_xml
- Teste de alinhamento YAML<->DTO ancorado por PATH (colisao de operationId
  ServiceInvoices_idGet no spec) que tambem serve de gatilho de migracao:
  quando a resposta for componentizada ($ref), o teste falha ruidosamente
- Spec nf-servico-v1.yaml atualizado (ErrorsResource em components.schemas,
  respostas de erro tipadas) + saida de rake generate commitada junto
  (namespace nf_servico_v1 so de erros); generate:check verde;
  openapi/README.md e docblock do DTO corrigidos
- Docs do recurso, skill nfeio-ruby-sdk e CHANGELOG atualizados

Sonda ao vivo (read-only): ISS Float/Integer confirmado, fantasmas nil,
Borrower normalizado, 21 campos sem membro tipado acessiveis via raw.
…e-dto

- invoice-resources: cenario do retrieve ganha a clausula do raw; requisito
  novo do shape do ServiceInvoice (raw + ISS tipados + Borrower com ponte
  Hash + fantasmas deprecados + teste de alinhamento por path)
- openapi-pipeline: exemplo do cenario 'spec sem schemas' atualizado
  (nf-servico-v1.yaml agora gera namespace de erros; fica cpf-api.yaml)
Sync dry-run: 18 specs rastreados byte-identicos ao docs atual (fetch de
hoje); swagger.json do docs e duplicata do consumer-invoice.json ja
rastreado - nada novo a adotar.
create_and_wait/create_batch continuam inexistentes na 1.1.0 - o texto
'na v1.0' sugeria versao exata; v1.x descreve a serie e nao envelhece a
cada release. Titulo da skill nfeio-ruby-sdk idem. Mantidos: '~> 1.0'
(cobre 1.1) e mencoes historicas a release 1.0.0.
@andrenfe andrenfe self-assigned this Jul 10, 2026
@andrenfe andrenfe merged commit c66fc26 into master Jul 10, 2026
6 checks passed
@andrenfe andrenfe deleted the feat/expand-service-invoice-dto branch July 10, 2026 03:01
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