Acasă Metodologie
Metodologie — cum colectăm și verificăm datele.
Pagina aceasta descrie, fără rotunjiri, ce surse folosim, cu ce frecvență actualizăm, ce verificări aplicăm, ce nu putem garanta și cum răspundem la sesizări. Dacă găsești o eroare sau un loc unde te-ai pierdut, scrie la contact@hartafarmacii.ro.
1. Surse de date
1.1 Locațiile farmaciilor
Sursa primară pentru locații e OpenStreetMap (OSM), interogată
prin Overpass API cu un
filtru pe amenity=pharmacy în limitele administrative ale României.
Datele OSM sunt distribuite sub licența
ODbL,
care permite redistribuirea și folosirea lor cu atribuire — atribuire pe care o
facem explicit în footer pe fiecare pagină și în endpoint-ul GeoJSON public.
Datele OSM sunt complementate cu store-locator-ele publice ale lanțurilor mari (Catena, Dr. Max, Help Net, Dona, Farmacia Tei, Mattca, Spring Farma) — acestea sunt o sursă secundară pentru program, telefon și informații de identificare a lanțului. Le folosim pentru a îmbogăți, nu pentru a înlocui, geo-coordonatele OSM.
1.2 Prețurile produselor
Prețurile vin din site-urile publice ale farmaciilor online.
Mecanismul preferat e parsarea blocurilor JSON-LD schema.org/Product
— un format structurat pe care îl publică majoritatea retailerilor pentru a
facilita indexarea în Google Shopping. Când JSON-LD nu e disponibil, folosim
parser-e HTML dedicate per site (selectoare CSS specifice).
Lanțuri din care extragem prețuri în prezent: Catena, Dr. Max (cu sub-brand Richter), Farmacia Tei, Help Net, Dona (când nu blochează crawler-ul), Mattca, Spring Farma, plus farmacii online independente (Minifarm, Farmacia Dav, Farmacia Ardealul) — coverage-ul efectiv variază în timp, depinde de disponibilitatea fluxurilor publice.
1.3 Referințele Rx (CANAMED)
Pentru medicamentele cu rețetă (Rx) folosim ca referință lista CANAMED — preț maxim cu amănuntul aprobat de Ministerul Sănătății și publicat lunar pe site-ul ministerului. CANAMED nu e prețul de vânzare — e plafonul peste care farmacia nu poate vinde. Îl afișăm strict ca reper. Lista se importă lunar (timer systemd pe VPS).
2. Frecvența actualizărilor
- Locațiile — pull-uite din OSM zilnic, dar doar dacă există schimbări detectate prin diff. Locațiile sunt foarte stabile (farmaciile nu se mută zilnic).
- Programul — actualizat manual la sesizare sau când lanțul publică update pe store-locator. Pentru farmaciile non-stop avem o pagină dedicată care marchează clar când nu putem confirma 24/7.
- Prețurile — variază pe lanț: unele scrapere rulează zilnic (cele cu JSON-LD ușor și care nu blochează aggressive), altele săptămânal (Catena/Tei pe pagini de listing). Timestamp-ul ultimei actualizări e marcat per ofertă în baza de date și expus în pagina produsului.
- CANAMED — import lunar.
3. Calitatea datelor
3.1 Matching produs ↔ preț
Cea mai grea parte a unui comparator de prețuri farmaceutice e matching-ul: să decidem cu certitudine că „Nurofen 200mg cutie 24 cpr" de pe un site e același produs cu „NUROFEN 200 MG 24 COMPR. FILMATE" de pe alt site. Folosim trei semnale în ordine de încredere:
- GTIN / cod EAN-13 — când e disponibil în JSON-LD, e match deterministic.
- DCI (denumire comună internațională) + concentrație + formă farmaceutică + pack size — folosit ca match secundar.
- Nume comercial normalizat + pack size — fallback când lipsesc primele două.
Când două surse dezacord pe pack size (ex. una zice „24 cpr", alta „24 capsule"), facem un collision flag: ofertele rămân separate până la review manual. Preferăm un fals negativ (două intrări duplicate) în detrimentul unui fals pozitiv (preț greșit afișat sub un produs greșit).
3.2 Verificări automate
- Validare preț în interval rezonabil (RON 0,1 – 5.000) — în afara intervalului, prețul e suspect și nu se afișează.
- Detecție prețuri duplicate identice între surse multiple → de obicei indică o eroare upstream pe care o flagăm.
- Heuristici pentru a detecta când un site a schimbat structura (rates de match brusc 0%) → alertă.
4. Limitări declarate explicit
Prețul afișat poate diferi de cel din farmacia fizică. Prețurile pe care le scraping-uim sunt din magazinele online ale lanțurilor — care nu sunt întotdeauna sincronizate cu prețul afișat la raft într-un punct de lucru fizic. Pentru cumpărare, verifică direct la farmacie.
- Cobertură non-100%. Unele lanțuri (în prezent Dona, Ardealul) blochează crawler-ele sau cer Cloudflare challenges, ceea ce reduce coverage-ul. Marcam vizibil când nu avem date pentru un lanț pe un produs.
- Prețuri compensate Rx — nu le afișăm. Prețul real plătit de un pacient pentru un medicament compensat depinde de status-ul rețetei (compensare 50%, 90%, gratuit pentru anumite afecțiuni), de DCI-ul prescris și de farmacia care eliberează. Aceste prețuri nu sunt prețuri publice fixe — afișarea unei singure cifre ar fi înșelătoare. CANAMED-ul e singurul reper public absolut, și pe el îl arătăm.
- Date incomplete pentru farmaciile mici. Pentru farmaciile independente nelistate în OSM și fără site cu store-locator, datele pot lipsi.
- Latency până la apariție. O farmacie nouă apare la noi după ce intră în OSM — în general câteva săptămâni. Putem accelera la sesizare.
5. Politica privind logo-urile
Folosim logo-urile lanțurilor în regim de fair-use descriptiv — pentru identificarea brand-ului în liste comparative și pe paginile de lanț. Nu sugerăm endorsement, parteneriat sau autorizare. Dacă un lanț cere takedown la contact@hartafarmacii.ro, eliminăm logo-ul în 48h și îl înlocuim cu un placeholder text neutru.
6. Politica privind AI-ul
HartaFarmacii folosește AI numai în pipeline-ul de asistare, nu în publicarea de conținut auto-generat fără revizie. Concret:
- Articolele editoriale (ghidurile pacientului, paginile de simptome și afecțiuni) sunt scrise prin curatare manuală a surselor publice citate (ANMDMR, EMA, prospecte). Pot fi asistate de un model lingvistic pentru fluență, dar fiecare faptă medicală e verificată în sursa primară înainte de publicare.
- Nu există conținut SEO de tip „spun" generat în masă cu LLM-uri și publicat fără revizie.
- Indexul Common Crawl / pagini scraped nu e republicat pe HartaFarmacii — folosim datele numai pentru calculul prețurilor afișate.
7. Conflict de interes
Declarăm explicit: zero conflict de interes. Nu suntem afiliați, nu primim comision pe vânzări și nu avem contracte cu lanțurile listate. Veniturile vin 100% din:
- reclame contextuale Google AdSense (web) și Google AdMob (iOS), afișate doar după consimțământ;
- In-App Purchase „Premium Lifetime" 4,99 RON pe iOS, single payment, care dezactivează reclamele.
Nicio sursă de venit nu condiționează ordinea afișării prețurilor sau ce articol apare pe site. Dacă observi un suspect de conflict, scrie-ne și clarificăm.
8. Cum semnalezi o eroare
Un singur canal: contact@hartafarmacii.ro →
- Pentru corecții urgente (preț greșit într-o pagină indexată) — răspuns în 24-48h.
- Pentru corecții non-urgente (program incorect, telefon invalid, lanț greșit) — corectăm în maxim 7 zile lucrătoare.
- Pentru takedown logo / takedown farmacie — 48h.
Procesul intern: primim mailul → confirmăm în 24h → verificăm sursa (de obicei revenim la sursa publică originală) → aplicăm corectarea în baza de date → confirmăm rezultatul prin reply.
9. Versiuni și lifecycle
Această pagină de metodologie are data ultimei revizuiri 2026-05-01 și se actualizează ori de câte ori adăugăm o sursă, schimbăm o frecvență sau descoperim o limitare nouă pe care vrem s-o declarăm. Pentru istoricul complet, repository-ul de cod e privat dar deschis la audit la cerere.
Citește în continuare: Echipa editorială · Despre proiect · Termeni · Confidențialitate.