Formularul de receptie — poarta de intrare a datelor
Cod produs — se alege din nomenclatorul deja existent (nu se retasteaza denumirea, ca sa nu apara variante gresite ale aceluiasi produs)
Lot — codul de lot inscris pe ambalaj de producator
Cantitate — numarul de unitati primite in aceasta livrare
Termen de valabilitate — data pana la care produsul poate fi eliberat
Furnizor — de la cine a venit livrarea
Data receptiei — completata automat de aplicatie, cu data curenta
Daca ai scrie direct intr-un tabel deschis, ai putea uita o coloana, ai putea scrie textul in coloana gresita, sau ai putea scrie o data intr-un format pe care sistemul nu il recunoaste (ex. "azi" in loc de o data reala). Formularul elimina aceste riscuri: iti arata exact ce trebuie completat, cate un camp, si nu te lasa sa salvezi pana cand campurile obligatorii sunt completate corect.
Validare 1 — termenul de valabilitate este obligatoriu
Baza de date foloseste termenul de valabilitate pentru interogari esentiale de gestiune: "ce loturi expira in urmatoarele 30 de zile?", "ce a expirat deja si trebuie retras?". Daca un singur lot ar avea acest camp gol, acel lot ar deveni invizibil pentru orice raport de expirare — un risc pe care o farmacie nu si-l permite.
1. Utilizatorul completeaza formularul si apasa butonul Salveaza.
2. Aplicatia verifica: are randul o valoare in campul Termen de valabilitate?
3. Daca DA — verificarea trece la urmatoarea regula (cantitatea, vezi Atomul 3).
4. Daca NU — aplicatia opreste salvarea si afiseaza un mesaj de eroare langa camp, de exemplu: "Campul Termen de valabilitate este obligatoriu." Randul NU ajunge in tabel pana cand campul nu e completat.
O colaboratoare grabita nu gaseste termenul pe cutie si, ca sa treaca de validarea "camp obligatoriu", scrie in campul Termen de valabilitate o data la intamplare, de exemplu 01.2030, in loc sa lase campul gol si sa ceara lamurire. Aplicatia accepta randul pentru ca formatul e o data valida si campul nu e gol — dar data nu corespunde realitatii lotului. La raportul de expirare, acest lot va aparea gresit ca fiind valabil inca multi ani, desi nimeni nu stie de fapt cand expira cu adevarat. Cum se recunoaste: in lista de produse, coloana Termen de valabilitate arata o data nerealista sau foarte indepartata fata de restul livrarilor de la acelasi furnizor (ex. un termen la 4-5 ani distanta, cand produsul are de obicei valabilitate de 2-3 ani), fara nicio corespondenta cu factura sau cu ambalajul fizic. Cum se repara: se cere furnizorului fisa lotului sau se verifica fizic ambalajul, apoi se corecteaza randul cu data reala, in formatul luna.an folosit de aplicatie pentru acest camp (ex. 03.2027).
Validare 2 — cantitatea trebuie sa fie strict pozitiva
Se receptioneaza un lot de comprimate pentru raceala, cod produs C-0148, lot RC0912, cu 3 cutii introduse de la depozit.
Colega scrie in campul Cantitate: 3. Verificare: 3 > 0 — TRECE. Randul se salveaza in tabelul de intrari.
Daca ar fi scris 0: verificare 0 > 0 este FALS — aplicatia respinge, mesaj: "Cantitatea trebuie sa fie mai mare decat 0."
Daca ar fi scris -3 (tastand din greseala semnul minus): verificare -3 > 0 este FALS — aplicatia respinge la fel.
O cantitate negativa la o intrare de marfa nu descrie o situatie reala — marfa nu poate "intra minus". (Scaderile de stoc, cum ar fi o eliberare catre pacient sau o retragere de lot, se inregistreaza separat, ca operatii de iesire, nu ca o cantitate negativa la receptie.) De aceea validarea de receptie cere strict un numar pozitiv, nu doar "orice numar".
Daca la aceeasi intrare lipseste si termenul de valabilitate, si cantitatea e gresita, aplicatia verifica regulile in ordine (Validarea 1 din Atomul 2, apoi Validarea 2 de aici): se opreste la prima regula incalcata si arata doar acel mesaj de eroare. Utilizatorul corecteaza campul respectiv si apasa din nou Salveaza — abia atunci aplicatia reia verificarea de la inceput si, daca mai exista o a doua eroare (de exemplu cantitatea), o va semnala la aceasta a doua incercare. De aceea e normal sa vezi mesajul de eroare schimbandu-se de la o incercare la alta, in loc sa apara toate erorile deodata.
Importul din fisierul furnizorului
Un fisier CSV este text simplu, deschis in orice editor sau in Excel. O linie de antet arata numele coloanelor, urmata de cate o linie pentru fiecare produs:
1. Se deschide in aplicatia de gestiune functia Import date (de obicei in meniul Stocuri sau Nomenclator).
2. Se selecteaza fisierul primit de la furnizor (butonul de tip "Alege fisier" / "Browse").
3. Aplicatia arata o previzualizare: cum se potrivesc coloanele din fisier (cod_produs, lot, cantitate, termen_valabilitate) cu campurile din baza de date. Aici se verifica manual ca "termen_valabilitate" din fisier chiar corespunde campului Termen de valabilitate din formular, si nu, de exemplu, cu campul Data receptiei.
4. Se ruleaza un import de proba pe primele cateva randuri, ca sa se vada daca validarile (Atomii 2 si 3) trec pentru acele randuri.
5. Daca proba e curata, se importa tot fisierul. Daca apar erori (ex. un rand fara termen de valabilitate), aplicatia trebuie sa arate exact ce randuri au fost respinse, ca sa fie corectate manual sau retrimise catre furnizor.
Un rand adus prin import care nu are termen de valabilitate sau are cantitate 0 trebuie respins de aplicatie exact ca si cum ar fi fost introdus manual prin formular. Importul este doar o alta cale de introducere a datelor — regulile de validare din Atomii 2 si 3 raman aceleasi, indiferent daca datele vin dintr-un formular completat de mana sau dintr-un fisier.
Curatarea duplicatelor
Fisierul livrare_2026-09-02.csv de mai sus a fost importat de doua ori. In tabelul de intrari, produsul C-0148, lot RC0912, apare acum de doua ori, cu cantitate 3 de fiecare data.
Daca aplicatia calculeaza stocul total prin insumarea tuturor intrarilor pentru acel lot, rezultatul gresit va fi 3 + 3 = 6 bucati in loc de 3 bucati reale primite. Stocul afisat este cu 3 bucati mai mare decat marfa aflata fizic pe raft.
Doua randuri sunt considerate duplicat cand au aceeasi combinatie de cod produs + lot + cantitate + data receptiei. Daca doar codul produsului e la fel dar lotul difera, NU e duplicat — inseamna doua livrari diferite ale aceluiasi produs, o situatie normala si de dorit (produsul se reaprovizioneaza).
1. Se exporta tabelul de intrari din aplicatia de gestiune intr-un fisier Excel (de obicei o functie Export / Export in Excel a programului) — aceasta este o copie de lucru, folosita doar ca sa gasim duplicatele mai usor.
2. In Excel, se sorteaza fisierul exportat dupa cod produs, apoi dupa lot (meniul Data → Sort, cu doua niveluri de sortare), ca sa ajunga alaturate randurile identice pe cod produs + lot + cantitate + data.
3. Excel are si o functie dedicata: se selecteaza tabelul exportat, apoi meniul Data → Remove Duplicates (Elimina duplicate), bifand coloanele cod produs, lot, cantitate si data ca sa fie exact acele coloane comparate.
4. Randurile identificate ca duplicat se sterg din aplicatia de gestiune (nu doar din copia Excel, care era doar pentru identificare) — de obicei printr-o functie de anulare/stergere a intrarii, direct pe randul duplicat din tabelul de intrari.
5. Se recalculeaza stocul si se verifica din nou fata de cantitatea reala numarata pe raft.
Se sterge un rand "duplicat" doar pentru ca are acelasi cod de produs cu altul, fara sa se verifice si lotul si cantitatea. Rezultat: se sterge, de fapt, o livrare reala si diferita a aceluiasi produs (alt lot, alt termen de valabilitate), iar stocul acelui lot dispare din baza de date, desi marfa exista fizic pe raft. Cum se recunoaste: dupa "curatare", numarul de bucati din baza de date e mai mic decat cel numarat fizic. Cum se repara: se verifica intotdeauna toate cele patru campuri (cod, lot, cantitate, data) inainte de a sterge un rand ca duplicat, niciodata doar codul de produs.
Greseala tipica de incarcare — unitatea de masura amestecata
Ambalajul standard pentru produsul C-0275 (dezinfectant de maini) este de 1 cutie = 10 flacoane. Baza de date a farmaciei tine evidenta stocului in flacoane (unitatea in care se elibereaza produsul).
Furnizorul MedStoc Distribution trimite in fisierul CSV cantitatea 12, insemnand 12 cutii.
Daca cel care importa fisierul nu observa diferenta si lasa cifra 12 asa cum e, baza de date inregistreaza 12 flacoane — desi in depozit au sosit de fapt 12 × 10 = 120 flacoane.
Diferenta: 120 − 12 = 108 flacoane "lipsa" din baza de date, desi marfa exista fizic pe raft.
Stocul din aplicatie pare mult mai mic decat cel numarat fizic, de obicei intr-un raport constant (de 10 ori mai mic, de 20 ori mai mic — in functie de cate bucati are ambalajul mare). Daca eroarea apare mereu la produsele de la acelasi furnizor, e un semn clar ca unitatea lor de masura difera de cea a bazei de date.
La corectare: se inmulteste cantitatea gresit introdusa cu factorul de conversie corect (in exemplul nostru, ×10) si se rescrie randul. La prevenire: inainte de orice import nou de la un furnizor, se verifica in ce unitate trimite el cantitatile (se intreaba furnizorul sau se verifica pe factura insotitoare) si, daca difera de unitatea folosita in baza de date, se converteste fisierul inainte de import, nu dupa.
Recapitulare si conexiuni
Sursa datelor (formular completat manual SAU fisier CSV/Excel de la furnizor)
↓ trece prin
Validare 1 — termen de valabilitate obligatoriu
↓ apoi
Validare 2 — cantitate strict pozitiva
↓ randul valid ajunge in
Tabelul de intrari
↓ dupa import se verifica
Duplicate (acelasi produs+lot+cantitate+data, aparut de doua ori) si unitatea de masura (flacoane vs. cutii)
Odata ce datele sunt incarcate corect si curate, urmeaza sa le folosim: in lectia urmatoare veti invata cum se exploateaza baza de date printr-un set de interogari utile pentru gestiunea zilnica — produse expirate sau aproape expirate, stoc sub minim, valoarea stocului pe categorie — si cum se genereaza un raport de gestiune tiparibil.
Formularul controleaza datele; introducerea libera intr-un tabel nu.
Termen de valabilitate lipsa = intrare respinsa, intotdeauna.
Cantitate ≤ 0 = intrare respinsa, intotdeauna.
Importul dintr-un fisier trece prin ACELEASI validari ca formularul.
Duplicat = potrivire pe cod produs + lot + cantitate + data, nu doar pe cod produs.
Unitatea de masura a furnizorului se verifica inainte de import, nu se presupune.