Integrări

Magazin legat de facturare și de curier

Când se emite factura, cum ajunge AWB-ul, ce se întâmplă la retur și de unde vine dubla vânzare. Mecanica legăturii dintre magazin, SmartBill și curier.

· 8 minute · Gabriel Nica
Ilustrație pentru articolul Magazin legat de facturare și de curier

Un magazin online cu treizeci de comenzi pe zi și fără integrări are un om care face, de trei ori pe zi, aceeași secvență: deschide comanda, o trece în programul de facturare, emite factura, o trimite pe mail, intră în platforma curierului, tastează adresa, generează AWB-ul, copiază numărul înapoi în magazin. Trei-patru minute per comandă, dacă nu se încurcă nimic.

Integrarea nu schimbă ce se întâmplă. Schimbă cine o face. Iar dificultatea nu stă în apelurile către API, care sunt bine documentate și la SmartBill, și la curieri. Stă în momentele în care fluxul se abate de la drumul drept.

Prima întrebare: când se emite factura

Nu există un răspuns universal și e prima discuție pe care o avem, înainte de orice linie de cod. Sunt trei variante și fiecare are consecințe.

La plasarea comenzii. Cea mai simplă de programat și cea mai proastă în practică. Dacă produsul nu mai e în stoc, dacă clientul se răzgândește în ora următoare, dacă adresa e greșită, ai deja o factură emisă care trebuie stornată. Numerele de factură stornate se adună și contabila întreabă de ce.

La confirmarea plății, pentru plata cu cardul. Aici are sens. Banii au intrat, comanda e reală. Atenție la un detaliu: confirmarea plății nu vine când clientul apasă butonul, ci printr-o notificare de la procesator, care poate întârzia sau poate veni de două ori. Dacă emiți factura la fiecare notificare primită, vei emite două facturi pentru o comandă. Fiecare notificare trebuie tratată o singură dată, indiferent de câte ori sosește.

La expediere, pentru ramburs. Varianta pe care o recomandăm pentru comenzile cu plata la livrare. Marfa pleacă, factura se emite, AWB-ul și factura se generează în aceeași operațiune. Dacă comanda e anulată înainte de expediere, nu s-a emis nimic și nu ai ce storna.

În magazinele unde sunt ambele metode de plată, regula e diferită pe metodă. Se poate. Trebuie doar scrisă înainte, nu descoperită după.

Stocul și dubla vânzare

Dubla vânzare — doi clienți cumpără ultimul produs — nu se rezolvă cu o sincronizare mai deasă.

Am văzut integrări care aduceau stocul din ERP la fiecare cinci minute și în care problema persista. Motivul e simplu: între două sincronizări, magazinul crede ce a aflat ultima dată. Dacă un produs are o bucată în stoc și doi oameni pun mâna pe el în aceeași minută, ambele comenzi trec.

Ce funcționează e o rezervare. În momentul în care o comandă e plasată, bucata aia e scoasă din disponibil, în magazin, imediat — nu la următoarea sincronizare. Sincronizarea cu ERP-ul rămâne, dar are alt rol: corectează derivele, nu ține evidența în timp real.

Două lucruri de decis, cu clientul, înainte:

Rezervi la adăugarea în coș sau la plasarea comenzii? La adăugarea în coș pare mai sigur pentru client și e o capcană: coșurile abandonate blochează stocul. Dacă alegi varianta asta, îți trebuie o expirare a rezervării, iar expirarea aia devine o sursă nouă de bug-uri.

Ce faci cu vânzările din magazinul fizic? Dacă produsul se vinde și la raft, ERP-ul e sursa de adevăr și derivele sunt inevitabile. Atunci decizia corectă nu e tehnică, e comercială: se ține o rezervă, un tampon de stoc care nu se afișează online. Am construit asta ca pe un procent configurabil pe categorie, pentru că la produsele scumpe și rare tamponul are alt sens decât la consumabile.

AWB-ul: de unde pleacă și unde se întoarce

Generarea AWB-ului e partea ușoară. Datele pe care le cere curierul sunt cele care produc erorile.

Greutatea și dimensiunile. Dacă produsele nu au greutate completată în catalog, coletul pleacă cu o greutate implicită și ajungi să plătești diferențe la reconciliere. Am luat obiceiul să blocăm publicarea unui produs fără greutate. E o restricție enervantă la început și economisește discuții lunare cu curierul.

Localitatea. Nomenclatorul de localități al curierului nu e o listă de text liber. Sunt localități cu același nume în județe diferite, iar un client care scrie doar numele comunei trimite AWB-ul în alt județ. Adresa trebuie aleasă dintr-o listă, cu județul cerut explicit, nu scrisă liber.

Numărul din adresă. Al doilea motiv de retur, după destinatarul care nu răspunde. O validare simplă care cere măcar o cifră în câmpul de adresă prinde surprinzător de multe cazuri.

Duplicatele. Un operator apasă de două ori pe „generează AWB” pentru că prima dată n-a răspuns nimic. Dacă cererea către curier nu poartă un identificator unic al comenzii, primești două AWB-uri și plătești două transporturi. Identificatorul ăla se trimite de la prima cerere, nu se adaugă după primul incident.

Statusul se întoarce prin notificări de la curier. Le scriem pe comandă și le arătăm clientului, iar la statusurile care cer acțiune — refuzat, avizat, redirecționat — alerta pleacă la omul care se ocupă, nu într-o adresă generală de contact.

Retururile, adică partea în care se strică totul

Un retur atinge trei sisteme deodată și e singura parte pe care nu o automatizăm complet.

Ce se întâmplă mecanic: marfa se întoarce, stocul crește, se emite un storno, banii pleacă înapoi. Ce se întâmplă în realitate: se întoarce un produs din trei, deschis, fără eticheta originală, iar clientul cere banii pe transport.

Situația Ce face sistemul Ce rămâne la om
Retur complet, produs nedesfăcut Storno total, stoc plus, rambursare pregătită Confirmarea că marfa a ajuns și e în regulă
Retur parțial, un produs din trei Storno parțial pe liniile alese, stoc plus Alegerea liniilor și decizia pe transport
Produs deteriorat la transport Se marchează, nu intră în stocul vândabil Reclamația la curier
Schimb cu alt produs Comandă nouă legată de cea veche Decizia pe diferența de preț
Client care refuză coletul Se închide comanda, stocul revine Decizia dacă se mai livrează vreodată

Stornarea parțială e locul unde majoritatea integrărilor se opresc și trec pe manual. E rezolvabilă, dar cere ca fiecare linie de comandă să poată fi urmărită individual până în factură — ceea ce înseamnă că structura datelor trebuie gândită de la început așa, nu adaptată după un an.

Rambursarea o lăsăm intenționat cu un buton apăsat de om. Banii care pleacă automat dintr-un cont, pe baza unui status primit de la un terț, sunt exact genul de automatizare care merge nouăzeci și nouă la sută din timp și costă scump la sutimea rămasă.

Unde apar erorile, în ordinea frecvenței

Din ce am văzut la integrările pe care le-am construit și la cele pe care le-am preluat de la alții:

  1. Date de partener greșite pe facturile către firme. CUI scris cu spații, cu RO inconsecvent, sau pur și simplu greșit. Se validează înainte de emitere, nu după respingerea din e-Factura.
  2. Produse fără date complete. Greutate, unitate de măsură, cotă de TVA. Blocarea publicării rezolvă cauza.
  3. Notificări primite de două ori. De la procesatorul de plăți, de la curier, de la marketplace. Fiecare trebuie tratată o singură dată.
  4. API care nu răspunde. SmartBill sau curierul pică pentru zece minute. Comanda nu trebuie să eșueze; cererea intră într-o coadă și se reia. Fără coadă, ai comenzi fără factură despre care nu află nimeni.
  5. Adresa fără număr sau localitate ambiguă. Se prinde la validare, în magazin, în fața clientului.

Ce nu e în listă: erorile de calcul. Alea aproape nu apar, pentru că sunt ușor de testat. Ce apare sunt cazurile în care lumea reală nu se poartă ca în specificație.

Ce te costă și ce nu

O integrare de magazin cu facturarea și cu un curier intră în pachetul de automatizări și integrări: de la 3.900 de lei, două-trei săptămâni, plus 190 de lei pe lună pentru găzduire, monitorizare și adaptarea la schimbările de format. Schimbările impuse de ANAF intră în abonament, pentru că se întâmplă oricum.

Ce crește prețul: mai mulți curieri cu reguli diferite, stornări parțiale, un magazin construit pe o platformă pe care nimeni nu o mai folosește, sau vânzare simultană pe marketplace-uri.

Un lucru pe care îl facem la fiecare integrare și pe care îl sare aproape toată lumea: o săptămână în care integrarea rulează lângă procesul manual, pe comenzi reale, iar cineva compară rezultatele. Dacă vrei să vezi ce se leagă în cazul tău și ce nu, cere o radiografie de 45 de minute. Pleci cu schema fluxului, chiar dacă nu lucrăm împreună.

Următorul pas

Spune-ne ce faci marțea. Îți spunem în 45 de minute cât costă să nu mai faci.

O discuție, nu o prezentare. Mapăm un proces al tău și pleci cu o schemă pe o pagină și un preț. Rămâne al tău chiar dacă nu lucrăm împreună.