Studiu de caz / 02

JurisLogic - Microserviciu Headless de Taxe și Comisioane

Un microserviciu REST autonom pentru calculul taxelor multi-jurisdicționale și al comisioanelor. Gestionează suprapunerea taxelor de vânzare din SUA, TVA din UE, sistemul britanic pe trei niveluri și GST/HST din Canada - totul susținut de decimal.js pentru zero erori de rotunjire în virgulă mobilă.

Statut
Proiect selectat
Contextul sistemului
TypeScript, NestJS, Prisma, PostgreSQL
Sursă
Repository public

01 / Comportamentul sistemului

Dovadă interactivă

Un mecanism tehnic specific proiectului, bazat pe arhitectura și contextul de implementare înregistrate.

Dovadă interactivăJurisLogic - Microserviciu Headless de Taxe și Comisioane
Transaction
Jurisdiction
Tax strategy
Rule pipeline
Decimal-safe result
Audit / cache / queue

Context și intenție

JurisLogic este un microserviciu headless de tip plug-and-play, conceput pentru a fi consumat de orice frontend, aplicație mobilă sau serviciu backend, fără dependențe sau blocare pe un furnizor. Fiecare operație monetară trece prin value objects imutabile de tip Money, susținute de decimal.js cu rotunjire bancară (ROUND_HALF_UP), garantând precizie la nivel de bănuț în toate jurisdicțiile.

Serviciul acoperă patru familii de jurisdicții: SUA (suprapunere stat + comitat + oraș), UE (rate standard și reduse per țară), Marea Britanie (standard 20%, redusă 5%, cotă zero) și Canada (provincii cu HST vs. GST+PST). Fiecare jurisdicție este implementată ca o Strategie concretă, rezolvată de un TaxStrategyFactory - adăugarea unei jurisdicții noi înseamnă scrierea unei singure clase și înregistrarea ei, fără nicio modificare la codul existent.

03 / Înregistrarea arhitecturii

Arhitectură

O interpretare structurată a arhitecturii înregistrate pentru acest proiect.

Înregistrarea arhitecturiiJurisLogic - Microserviciu Headless de Taxe și Comisioane
Stratul de Domeniu
Stratul de Aplicație
Stratul de Infrastructură
Stratul de Interfață
Citește înregistrarea completă a arhitecturii

Codebase-ul urmează o Arhitectură Hexagonală (Porturi și Adaptoare) strictă, cu trei straturi:

• Stratul de Domeniu (src/domain/) - Clase TypeScript pure, fără niciun import de framework. Conține Value Objects (Money, TaxRate, JurisdictionCode), Entități (agregatul Transaction, TaxRule, Commission) și Strategii (interfața ITaxStrategy cu implementări pentru SUA, UE, UK, CA, plus lanțul TaxRulePipeline).

• Stratul de Aplicație (src/application/) - Orchestratori de use case (CalculateTax, CalculateCommission, ProcessBatchTransaction) care construiesc obiecte de domeniu din DTO-uri, verifică cache-ul, rezolvă strategii, rulează pipeline-uri și scriu în logul de audit. Depinde exclusiv de interfețe abstracte de tip port - ICachePort, IQueuePort, IAuditLogPort, ITaxRuleRepository.

• Stratul de Infrastructură (src/infrastructure/) - Adaptoare concrete: PrismaService pentru PostgreSQL, RedisCacheAdapter, adaptor BullMQ pentru cozi și adaptor Prisma pentru logare de audit. Modulul NestJS InfrastructureModule este singura rădăcină de compoziție care conectează adaptoarele la porturi.

• Stratul de Interfață (src/interfaces/rest/) - Controlere NestJS cu decoratori Swagger și DTO-uri. Strat subțire care deleagă către use case-uri.

Design Patterns: Strategy, Factory, Chain of Responsibility, Decorator, Builder, Value Object, Repository, Ports & Adapters.

Cum este structurat sistemul

Preocupările transversale - scutiri, suprataxe, praguri minime de taxare - sunt gestionate de un pipeline Chain of Responsibility cu un builder API fluent. Stratul de aplicație orchestrează use case-urile (taxă individuală, comision, batch) prin interfețe abstracte de tip port, menținând logica de business complet independentă de framework. Adaptoarele de infrastructură conectează caching-ul Redis, procesarea asincronă batch prin BullMQ și logarea de audit în PostgreSQL.

Sistemul de comisioane suportă trei modele: sumă fixă, procentual și pe niveluri (bracket-uri progresive, similar impozitului pe venit), toate calculate cu aceleași garanții de precizie zecimală.

05 / Aspecte selectate

Note de implementare selectate

Deciziile și fluxurile cu cea mai mare valoare explicativă.

  1. Arhitectură Hexagonală reală - stratul de domeniu nu are nicio dependență de framework; poți schimba baza de date sau cache-ul fără a atinge vreo regulă de business
  2. Pattern-ul Strategy cu 4 implementări concrete de jurisdicții (SUA, UE, UK, CA), rezolvate printr-un Factory - adăugarea de jurisdicții noi nu necesită nicio modificare la codul existent (Principiul Deschis/Închis)
  3. Pipeline Chain of Responsibility pentru preocupări transversale (scutiri, suprataxe, praguri minime de taxare) cu un builder API fluent
  4. Value Objects imutabile (Money, TaxRate, JurisdictionCode) susținute de decimal.js - nicio eroare de rotunjire în virgulă mobilă în rezultatele financiare
  5. Calcul de comisioane pe niveluri cu bracket-uri progresive, rotunjire per-bracket și gestionarea cazurilor limită pentru tranzacții care traversează mai multe bracket-uri
  6. Procesare asincronă batch prin BullMQ - trimiti N tranzacții, primești 202 Accepted imediat, worker-ele calculează în paralel

06 / Metrici susținute

Înregistrarea verificată a proiectului

Familii de Jurisdicții
4
Design Patterns
8
Teste Unitare
30+
Modele de Comision
3
Erori de Rotunjire
0
Dependențe de Framework în Domeniu
0

Tehnologie în context

TypeScript, NestJS, Prisma, PostgreSQL, Redis, BullMQ, decimal.js, Docker, Swagger/OpenAPI, Jest

Vezi repository-ul sursă