Skip to content

feat: implement subscription tax calculation and remittance system#448

Merged
Smartdevs17 merged 4 commits into
Smartdevs17:mainfrom
Junman140:feat/tax-system
May 28, 2026
Merged

feat: implement subscription tax calculation and remittance system#448
Smartdevs17 merged 4 commits into
Smartdevs17:mainfrom
Junman140:feat/tax-system

Conversation

@Junman140
Copy link
Copy Markdown
Contributor

@Junman140 Junman140 commented May 27, 2026

Closes #371


Summary

Implements a complete subscription tax calculation and remittance system across the full stack.

Acceptance Criteria

  • Tax rate lookup by jurisdiction (country, state/province, city)
  • Tax-exempt customer handling with certificate validation
  • Tax calculation on subscription invoices
  • Tax remittance report generation
  • Multi-jurisdiction tax support (VAT, GST, sales tax, PST, QST, HST)
  • Tax rate change handling for existing subscriptions

Edge Cases

  • Nexus determination: Economic nexus thresholds per jurisdiction (US: 100k/200 txns, EU: 10k/1 txn)
  • Mid-cycle tax rate change: Prorated tax calculation across billing periods
  • Digital goods classification: SaaS, streaming, downloads, cloud storage, online services, in-app purchases

Changes

Frontend Types (\src/types/invoice.ts)

  • \TaxType, \TaxJurisdiction, \TaxRateEntry, \CustomerTaxStatus, \DigitalGoodsCategory\
  • \TaxRemittanceReport, \NexusRegion, \MidCycleTaxChange\
  • Extended \Invoice\ with \ axJurisdiction, \isTaxExempt,
    everseCharge\

Backend Services (\�ackend/services/taxService.ts, \ axTypes.ts)

  • \TaxService\ with built-in jurisdiction rates, caching, exemption validation, nexus checks, digital goods rules
  • Tax rate lookup for EU VAT, AU/NZ/CA/IN GST, US state-level sales tax
  • Remittance report generation per jurisdiction
  • 27-unit test suite

Contracts (\contracts/types/src/lib.rs, \contracts/invoice/src/lib.rs)

  • 7 new contract types: \TaxType, \TaxJurisdiction, \TaxExemption, \TaxRemittanceReport, \NexusRegion, \TaxRateChangeEvent\
  • 12 new \StorageKey\ variants for tax state persistence
  • Multi-jurisdiction tax lookup with fallback chain
  • Tax exemption lifecycle with certificate validation
  • Mid-cycle rate change proration
  • Nexus threshold evaluation
  • Remittance report generation and submission
  • 10 contract test cases

State Management (\src/store/invoiceStore.ts)

  • Tax state management (rates, exemptions, remittance lines, reports, mid-cycle changes)

Junman140 added 3 commits May 27, 2026 11:46
Add batch create from CSV/JSON, batch update with filtering, batch cancel with reason collection, and batch charge for manual billing runs.

- contracts/batch: Added CancelReason enum, BatchFilter struct, enhanced result types with skipped_operations tracking
- app/services/batchTransactionService.ts: Full rewrite with 4 operation types, CSV parsers, chunked processing, idempotent retry with backoff, result export, per-item status tracking
- app/stores/batchStore.ts: Zustand store with draft management, CSV loading per operation type, execute/retry, export helpers
- app/screens/BatchOperationsScreen.tsx: Full UI with operation selector, CSV input, update params/filter modals, cancel reason picker, progress bar, per-item results, export buttons, retry, history
- src/screens/ImportScreen.tsx: Added batch operations shortcut banner
- src/navigation: Added BatchOperations route to SettingsStack

Edge cases: partial batch failure, idempotent retry of failed items, large batch memory management via chunked processing
…tance

- Add tax types to contracts/types (TaxJurisdiction, TaxExemption, TaxRemittanceReport, NexusRegion, TaxRateChangeEvent)
- Add 12 new StorageKey variants for tax state persistence
- Enhance invoice contract with full tax system:
  - Multi-jurisdiction tax lookup (set_tax_jurisdiction/get_tax_jurisdiction_by_location)
  - Tax exemption lifecycle (register/validate/revoke) with certificate validation
  - Digital goods classification and taxability rules
  - Mid-cycle tax rate change proration (calculate_prorated_tax)
  - Nexus determination with economic thresholds per jurisdiction
  - Tax remittance report generation and submission
- Add 10 contract test cases covering invoice generation, tax exemption, proration, nexus, and remittance
- Update frontend types with DigitalGoodsCategory, TaxRemittanceReport, NexusRegion, MidCycleTaxChange
- Add TaxType, TaxJurisdiction, TaxRateEntry, CustomerTaxStatus, DigitalGoodsClass, TaxRemittanceLineItem types

- Add new StorageKey variants: TaxRateEntry, CustomerTaxStatus, TaxRemittanceLine, DigitalGoodsClass, TaxRateChangeLogByJdx

- Fix StorageKey variant name length limits (ProxyPrevImplCount, TaxRemittanceReportByJdx)

- Enhance invoice contract with multi-jurisdiction tax lookup with fallback chain

- Add tax-exempt customer handling with certificate validation and expiry checks

- Implement mid-cycle tax rate change proration for existing subscriptions

- Add reverse-charge flagging and nexus threshold determination

- Add per-invoice/per-jurisdiction remittance line tracking

- Add 11 new contract functions and 10 comprehensive test cases

- Update subscription contract with new generate_invoice signature

- Create TaxService backend with built-in jurisdiction rates, caching, exemption validation, nexus checks, digital goods rules, and remittance report generation

- Create taxTypes.ts with full TypeScript type definitions

- Extend invoiceStore with tax state management (rates, exemptions, remittance lines, reports, mid-cycle changes)

- Add backend TaxService tests covering lookup, exemption, calculation, nexus, and reporting

- Update Invoice TypeScript types with TaxJurisdiction, CustomerTaxStatus, TaxRemittanceReport, MidCycleTaxChange and helper utilities

- Extend Invoice interface with taxJurisdiction, isTaxExempt, and reverseCharge fields
@drips-wave
Copy link
Copy Markdown

drips-wave Bot commented May 27, 2026

@Junman140 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Smartdevs17 Smartdevs17 merged commit b1a6128 into Smartdevs17:main May 28, 2026
4 of 22 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.

Implement subscription tax calculation and remittance system

2 participants