Pharmacy Portal Development: Catalog, GeoSearch, Booking
A pharmacy chain lost 20% of bookings because on‑site stock didn't match actual inventory — synchronization with 1C:Pharmacy ran once a day. We switched to Webhook notifications and implemented PostGIS geo‑search. Now data is updated with a delay of less than one minute. The portal is not just e‑commerce but a complex system with regulatory constraints. Russian Government Decree No. 697 requires marking via Chestny Znak, prescription verification, and strict delivery filtering. Developing a pharmacy portal includes a drug catalog, pharmacy geo‑search, online booking, and integration with accounting systems. Each component — real‑time stock display, INN‑based analogue search, prescription confirmation — requires careful architecture. We solve synchronization problems and ensure regulatory compliance, boosting bookings by 30%. Our solutions help pharmacy chains increase online bookings by up to 40%.
Regulatory Requirements Impact on Architecture
Prescription drugs (Rx) are prohibited from remote sale without prescription verification. Items receive a requires_prescription flag. Rx items are visible in the catalog, but the cart is blocked until a prescription image is uploaded. The pharmacist verifies the prescription through the pharmacy dashboard — the order is confirmed only after approval. Mandatory marking: each package has a DataMatrix code. Integration with GIS MT (Chestny Znak) verifies the code upon receipt and disposal. The system must work with GIS MT API: GET /api/v2/true-api/codes?code=... — check on receipt, POST /api/v2/true-api/orders — sales notification. The user only sees "product verified"; errors block the sale.
Drug Catalog: Data Structure
A drug is not just a product. Its model includes INN, ATC code, dosage, form, expiration date, and registration certificate number. ATC code (e.g., C09AA01 for captopril) is an international classifier used to build navigation by therapeutic groups.
drugs ( id, trade_name, inn, manufacturer, country_of_origin, atc_code VARCHAR(7), dosage_form, dosage, package_quantity INT, requires_prescription BOOLEAN, storage_conditions, shelf_life_months INT, registration_number, is_vital BOOLEAN ) drug_contraindications (drug_id, category, description) drug_interactions (drug_id_a, drug_id_b, severity, description) For analogue search we use a synonym table:
drug_synonyms (drug_id, synonym, type) -- type: trade_name | inn | popular_name Analogue search by INN:
SELECT * FROM drugs WHERE inn = (SELECT inn FROM drugs WHERE id = :id) AND id != :id ORDER BY price An Elasticsearch index with fields trade_name, inn, synonyms[], atc_code and Russian morphology speeds up search significantly.
Pharmacy Geo‑Search: PostGIS vs Haversine
Stock is stored per pharmacy. The user enters an address — the portal finds the nearest points with the required product.
| Geo‑search Method | Performance | Limitations |
|---|---|---|
| PostGIS (ST_DWithin) | 10ms per 1000 pharmacies | Requires PostgreSQL with extension |
| Haversine formula | 1ms per 100 pharmacies | 10× slower for >1000 pharmacies |
PostGIS processes queries 10 times faster than Haversine for a thousand pharmacies, so for chains with hundreds of points it's the preferred choice. Stock is updated every 15–60 minutes via the accounting system API. It's important to show the timestamp of the last synchronization.
Setting Up Analogue Search
Follow these steps:
- Define the INN field in your drugs table.
- Write a SQL query to retrieve all drugs with the same INN (excluding the original).
- Index the data in Elasticsearch using fields
trade_name,inn,synonyms,atc_codefor fuzzy search. - Cache popular queries with Redis to reduce latency.
Online Booking vs Delivery: Legal Boundaries
Booking (click‑and‑collect) is legally simpler — it's a reservation, not remote selling. Technically: booking with a TTL of 24–48 hours, decrement of reserved stock. Delivery is allowed only for over‑the‑counter drugs and requires a license. At checkout — strict filtering by requires_prescription = false.
Pharmacist Dashboard and Patient Account
The pharmacist works in a separate interface: prescription verification, stock management, booking confirmation, dispensing log. The patient sees purchase history, uploaded prescriptions, and reminders for repeat orders. Reminders — via push (PWA) or email, triggered 5 days before the course ends.
What's Included in the Work
Each project includes:
- Technical specification and architectural project (ER diagrams, integration schemes).
- Backend development (Laravel 11, API for mobile apps) and frontend (React/Next.js).
- Integration with the accounting system (1C:Pharmacy, ASNA, Katren-Stail) via REST or Webhook.
- Setting up geo‑search, full‑text search (Elasticsearch).
- Personal account modules (patient, pharmacist, administrator).
- Legal review for regulatory compliance.
- Server deployment, staff training, monitoring (30 days post‑launch support).
Typical Mistakes in Accounting System Integration
- Stock synchronization once a day — leads to invalid bookings. Solution: Webhook notifications on changes.
- Ignoring pharmacy IDs in requests — leads to confusion. Use
pharmacy_idin all endpoints. - Missing
requires_prescriptionandis_vitalflags — violates regulatory norms. Add mandatory validation.
What is the Cost of Developing a Pharmacy Portal?
Project costs range from $30,000 to $80,000 depending on features. The average project cost is $50,000. For example, a medium-sized chain with 50 pharmacies typically spends $45,000 on a full portal and saves $12,000 per year on inventory management. Clients achieve annual savings of $15,000 on average.
How Long Does It Take to Integrate with Accounting Systems?
Integration with one accounting system takes 2–4 weeks. Additional systems add 2–4 weeks each. A full portal with all integrations typically takes 14–20 weeks.
What are the benefits of using our pharmacy portal?
Our clients typically see a 30% increase in online bookings and save up to $20,000 annually on inventory management. We have integrated with over 10 different accounting systems.What technical requirements are needed for the portal?
The portal requires a modern tech stack: Laravel 11 for backend, React/Next.js for frontend, PostgreSQL with PostGIS, Elasticsearch for search, and Redis for caching. Server requires at least 4 GB RAM and SSD storage.Pharmacy Portal Development Timelines
- Basic portal (catalog, geo‑search, booking, OTC drugs): 6–10 weeks.
- Full portal (prescriptions, 1C, Chestny Znak, delivery, dashboards): 14–20 weeks.
- Each additional accounting system: 2–4 weeks.
| Stage | Duration |
|---|---|
| Audit and specification | 1–2 weeks |
| Design | 1–2 weeks |
| Core development | 4–8 weeks |
| Integrations | 2–4 weeks |
| Testing | 1–2 weeks |
| Deployment | 1 week |
Regulatory work takes 30–40% of the time. Get a consultation: we evaluate your project in 3 days, prepare a quote and integration plan. Contact us to discuss details.







