Commit c30eb8b
committed
feat(tax): implementa recursos de cálculo de impostos e códigos auxiliares
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)1 parent 0f5cd51 commit c30eb8b
22 files changed
Lines changed: 1931 additions & 8 deletions
File tree
- docs
- examples
- openapi/spec
- src
- core
- resources
- generated
- tests/unit/resources
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
634 | 634 | | |
635 | 635 | | |
636 | 636 | | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
637 | 690 | | |
638 | 691 | | |
639 | 692 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
| 25 | + | |
24 | 26 | | |
25 | 27 | | |
26 | 28 | | |
| |||
2301 | 2303 | | |
2302 | 2304 | | |
2303 | 2305 | | |
| 2306 | + | |
| 2307 | + | |
| 2308 | + | |
| 2309 | + | |
| 2310 | + | |
| 2311 | + | |
| 2312 | + | |
| 2313 | + | |
| 2314 | + | |
| 2315 | + | |
| 2316 | + | |
| 2317 | + | |
| 2318 | + | |
| 2319 | + | |
| 2320 | + | |
| 2321 | + | |
| 2322 | + | |
| 2323 | + | |
| 2324 | + | |
| 2325 | + | |
| 2326 | + | |
| 2327 | + | |
| 2328 | + | |
| 2329 | + | |
| 2330 | + | |
| 2331 | + | |
| 2332 | + | |
| 2333 | + | |
| 2334 | + | |
| 2335 | + | |
| 2336 | + | |
| 2337 | + | |
| 2338 | + | |
| 2339 | + | |
| 2340 | + | |
| 2341 | + | |
| 2342 | + | |
| 2343 | + | |
| 2344 | + | |
| 2345 | + | |
| 2346 | + | |
| 2347 | + | |
| 2348 | + | |
| 2349 | + | |
| 2350 | + | |
| 2351 | + | |
| 2352 | + | |
| 2353 | + | |
| 2354 | + | |
| 2355 | + | |
| 2356 | + | |
| 2357 | + | |
| 2358 | + | |
| 2359 | + | |
| 2360 | + | |
| 2361 | + | |
| 2362 | + | |
| 2363 | + | |
| 2364 | + | |
| 2365 | + | |
| 2366 | + | |
| 2367 | + | |
| 2368 | + | |
| 2369 | + | |
| 2370 | + | |
| 2371 | + | |
| 2372 | + | |
| 2373 | + | |
| 2374 | + | |
| 2375 | + | |
| 2376 | + | |
| 2377 | + | |
| 2378 | + | |
| 2379 | + | |
| 2380 | + | |
| 2381 | + | |
| 2382 | + | |
| 2383 | + | |
| 2384 | + | |
| 2385 | + | |
| 2386 | + | |
| 2387 | + | |
| 2388 | + | |
| 2389 | + | |
| 2390 | + | |
| 2391 | + | |
| 2392 | + | |
| 2393 | + | |
| 2394 | + | |
| 2395 | + | |
| 2396 | + | |
| 2397 | + | |
| 2398 | + | |
| 2399 | + | |
| 2400 | + | |
| 2401 | + | |
| 2402 | + | |
| 2403 | + | |
| 2404 | + | |
| 2405 | + | |
| 2406 | + | |
| 2407 | + | |
| 2408 | + | |
| 2409 | + | |
| 2410 | + | |
| 2411 | + | |
| 2412 | + | |
| 2413 | + | |
| 2414 | + | |
| 2415 | + | |
| 2416 | + | |
| 2417 | + | |
| 2418 | + | |
| 2419 | + | |
| 2420 | + | |
| 2421 | + | |
| 2422 | + | |
| 2423 | + | |
| 2424 | + | |
| 2425 | + | |
| 2426 | + | |
| 2427 | + | |
| 2428 | + | |
| 2429 | + | |
| 2430 | + | |
| 2431 | + | |
| 2432 | + | |
| 2433 | + | |
| 2434 | + | |
| 2435 | + | |
| 2436 | + | |
| 2437 | + | |
| 2438 | + | |
| 2439 | + | |
| 2440 | + | |
| 2441 | + | |
| 2442 | + | |
| 2443 | + | |
| 2444 | + | |
| 2445 | + | |
| 2446 | + | |
| 2447 | + | |
| 2448 | + | |
| 2449 | + | |
| 2450 | + | |
| 2451 | + | |
| 2452 | + | |
| 2453 | + | |
2304 | 2454 | | |
2305 | 2455 | | |
2306 | 2456 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
165 | 165 | | |
166 | 166 | | |
167 | 167 | | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
168 | 180 | | |
169 | 181 | | |
170 | 182 | | |
| |||
0 commit comments