Marketplace B2B · Fintech

e-furnizori.ro — marketplace B2B cu integrări e-Factura, plăți multi-gateway și căutare pe 177 modele de date

e-furnizori.ro conectează furnizori verificați cu cumpărători business din România. Cumpărătorul trimite cereri de ofertă (RFQ), compară cataloage și comandă cu escrow, credit sau BNPL. Furnizorul gestionează produse, stocuri, depozite, AWB-uri și facturi prin e-Factura/e-Transport. Peste 177 modele Prisma, ~100 domenii API, autentificare cu 2FA, totul self-hosted.

IndustrieB2B Marketplace / FinTech
Durată8 luni (faza 1)
StatusLive · iterații continue
Echipă3 dezvoltatori
ȚarăRomânia

Contextul de business

Piața B2B din România este fragmentată: cumpărătorii business caută furnizori pe Google, compară oferte manual în Excel, negociază prețul la telefon și așteaptă facturi pe email. Procesul durează 2-3 săptămâni per achiziție non-trivială. e-furnizori trebuia să comprime acest ciclu: catalog verificat, RFQ structurat, comparare prețuri pe specificații, plăți cu protecție (escrow) și facturare electronică conform ANAF.

Constrângerea tehnică majoră: integrarea cu sistemul fiscal românesc. e-Factura (SPV ANAF) și e-Transport sunt obligatorii pentru B2B peste anumite praguri. Fără ele, marketplace-ul nu rezolvă problema reală — clientul tot factura manual și tot declara transportul separat. Plus plăți: nu există un singur gateway care să acopere toată piața românească (Netopia pentru carduri, EuPlătești/PlatiOnline pentru alternative locale, PayPal pentru internațional).

e-furnizori.ro/catalog Caută: cablu HDMI 2.1, 3m Caută HDMI 2.1 Premium 3m 8K ElectroDist SRL · verificat ✓ 34 RON HDMI 2.1 Ultra 3m TechSupply SRL · verificat ✓ 39 RON RFQ colectiv: 3 furnizori · 12 bucăți · ofertă în 48h PLĂȚI Netopia · EuPlătești PayPal · Escrow COMPLIANCE e-Factura (SPV ANAF) e-Transport · 2FA INFRA 177 modele Prisma ~100 domenii API
Căutare catalog + RFQ + integrări plăți/fiscale — design ilustrativ

Decizii tehnice cheie

1. Next.js 16 App Router cu Prisma 7 pe PostgreSQL

Schema conține 177 modele pe 5.700 de linii, cu 37 de migrări. Modelele cheie: Supplier, Buyer, Product, CatalogEntry, Rfq, Order, Invoice, Warehouse, Shipment. Prisma client generat în src/generated/prisma. PostgreSQL ales pentru ACID tranzacții pe plăți și integritate referențială pe 177 modele cu relații complexe.

2. Meilisearch 0.60 pentru căutare catalog B2B

Căutarea pe cataloage B2B diferă de B2C: cumpărătorul caută după SKU, specificații tehnice (CAP, EAN, cod producător), nu după cuvinte naturale. Meilisearch 0.60 index sincronizat din PostgreSQL, cu câmpuri custom pentru filtre facetate (brand, categorie, certificări). Latență sub 50ms pe 100K+ produse per furnizor.

3. Integrare e-Factura + e-Transport (SPV ANAF)

Facturarea electronică prin SPV ANAF e obligatorie pentru B2B peste pragurile stabilite. Am integrat fluxul complet: generare XML UBL 2.1, semnare cu certificat calificat, upload prin API SPV, descărcare răspuns validare. e-Transport similar: declarare UAET pentru transporturi peste prag. Fără aceste integrări, marketplace-ul nu elimină munca manuală a furnizorului.

4. Multi-gateway plăți: Netopia, EuPlătești, PlatiOnline, PayPal, Stripe

Niciun gateway nu acoperă toată piața românească. Am construit un layer de abstractizare în src/lib/payments/romania care expune o interfață unică pentru toate. Cumpărătorul alege metoda; sistemul routează către gateway-ul potrivit. Stripe Connect pentru split-uri între marketplace și furnizori (comision marketplace reținut automat la plată).

5. NextAuth 4 cu 2FA TOTP

Conturile business necesită autentificare consolidată. NextAuth 4 cu Credentials provider, sesiuni JWT, și 2FA obligatoriu pentru furnizori (TOTP prin otplib). Adaptor Prisma pentru persistența sesiunilor. Rate limiting prin Upstash Ratelimit pe endpoint-urile de autentificare (previne brute-force).

Next.js 16 React 19 TypeScript Prisma 7 PostgreSQL NextAuth 4 Meilisearch Upstash Redis Stripe Connect Netopia e-Factura (SPV ANAF) Cloudinary Vitest Playwright Cloudflare

Provocări întâlnite

Provocarea 1: Schema de date cu 177 modele și relații complexe

Un marketplace B2B are entități pe care B2C nu le are: depozite multiple per furnizor, stocuri per depozit, prețuri negociate per client, contracte-cadru, listele de aprobatori. Schema a ajuns la 5.700 de linii Prisma. Soluție: modularizare migrații (37 migrări incrementale, nu un big-bang), plus migrare de test pe DB clonat înainte de fiecare deploy prin npm run db:preflight.

Provocarea 2: e-Factura — XML UBL cu validare ANAF imprevizibilă

ANAF respinge XML-uri pentru motive care nu sunt documentate complet: format dată incorect, cod CAEN lipsă, sau cifră de control CUI greșită. Soluție: layer de pre-validare care verifică toate regulile cunoscute înainte de upload, plus logging detaliat al răspunsurilor SPV pentru depanare. Rata de respingere după implementarea pre-validării: sub 2%.

Provocarea 3: CSRF + CSP + rate limiting pe ~100 domenii API

Cu aproximativ 100 de domenii de route-handlers (orders, rfq, payments, webhooks, admin, etc.), securitatea per-endpoint e greu de menținut consistent. Soluție: compunere middleware în src/proxy.ts care aplică CORS, CSP, CSRF și rate limiting uniform. Next.js 16 a redenumit middleware.ts în proxy.ts — am migrat fără regresie.

Rezultate măsurate

177Modele de date (schema Prisma 5.7K linii)
~100Domenii API route-handlers
5Gateway-uri plăți integrate (RO + internațional)
<50msLatență căutare catalog (Meilisearch)
22%Rată conversie RFQ → comandă (vs 8% email manual)
37Migrări DB incrementale, 0 pierderi de date

Lecții pentru proiecte similare

  1. e-Factura NU e opțională pentru B2B în România. Marketplace-ul care nu integrhează facturarea electronică nu elimină munca manuală — doar o mută.
  2. Multi-gateway plăți necesită abstractizare, nu hardcodare. Piața românească e fragmentată: Netopia pentru carduri, EuPlătești pentru alternative. Layer-ul src/lib/payments salvează luni de refactor.
  3. Schema Prisma peste 100 modele cere disciplină. Migrații incrementale, pre-flight pe DB clonat, review obligatoriu. Un big-bang migration pe 177 modele e o catastrofă care așteaptă să se întâmple.
  4. Meilisearch bate PostgreSQL full-text pentru catalog B2B. Faceted search pe SKU, EAN, specificații — sub 50ms fără tuning de indici.
  5. CSRF/CSP/rate-limit compuse în proxy.ts e singurul mod de a menține consistența pe 100 de endpoint-uri. Securitatea per-handler devine haos.

«e-furnizori a comprimat ciclul de achiziție B2B de la 3 săptămâni la 48 de ore. Integrarea cu e-Factura a eliminat facturarea manuală complet. Faintech a ales stack-ul care suportă 177 modele de date fără să cedeze pe viteză.» — Eduard Gridan, founder e-furnizori.ro

Ai un proiect similar?

Documentație tehnică detaliată în 48h, cu specificație de arhitectură și calcul ROI pe stack alternativ.

Discută proiectul

Citește în continuare