Problem

PharmaConnect is a multi-tenant B2B pharmaceutical distribution and logistics platform. Distributors, pharmacies, drivers, and administrators share one system, and money moves through catalog pricing, discounts, checkout, delivery batches, invoicing, payment reconciliation, returns, and credit notes. Defects in a system like this don't only break screens. They let one role act as another, leak sensitive data, or corrupt financial records.

The platform needed structured verification of its full order-to-cash lifecycle and its security boundaries before release.

Context

A production engagement where I led QA as part of my role at TechPotion.ai, testing against a staging environment. Specific internal details, URLs, record identifiers, data, and payloads are not published here.

My Role

Lead QA: designing the journey-based test plan, executing it across every persona, investigating at the API level, running security-oriented testing, and reporting each defect with reproduction steps, expected versus actual behavior, and evidence. I retested fixes against the original reproduction steps and the surrounding flows.

Architecture

The platform serves 6 seeded roles across system administration, distribution management, pharmacy management, delivery drivers, and public visitors. Testing covered 15 functional modules:

Testing focused on the boundaries between these parts: tenant to tenant, role to role, and what the UI shows versus what the API allows.

Technology Stack

Exploratory and journey-based testing, browser network and API inspection, curl-based reproduction, an RBAC permission matrix, data-integrity checks against stored records, and a structured defect log with severity (P1 to P4), affected layer, persona, and retest notes.

Implementation

I organized the work as 20 end-to-end journeys in four groups, each run as the persona that would perform it in production:

Alongside the journeys, I inspected the network traffic for every important action, so each defect records what the browser sent, what the API returned, and what was stored, not only what the screen showed.

QA coverage: journeys by persona, defects by severity and layerTwenty journeys across four groups: order to delivery 6, payments and finance 4, returns 4, security and boundaries 6, each run as the persona that performs it. Defects by severity: 11 P1, 19 P2, 43 P3, 7 P4. By layer: 58 frontend only, 10 backend only, 12 in both.Journeys by personaOrder to delivery6 journeysPayments4 journeysReturns4 journeysSecurity6 journeysPharmacy manager111–Distributor manager4322Driver1–11All roles (sweeps)–––320 journeys · 6 roles · 15 modulesDefects by severityP111P219P343P47Defects by layerFrontend only58Backend only10Both layers12
Journeys were run as the real persona. Boundary sweeps covered all roles at once. Recording the affected layer separated UI fixes from API-level fixes.

Reliability / QA

Every defect was classified by severity and by the layer where it lived:

Recording the layer mattered. A frontend-only defect can be fixed in the UI, but a backend or both-layer defect means the API itself accepts something it should reject. Hiding a button does not fix that.

Fixes were retested against the original steps and the flows around them. Retesting caught cases where a UI fix exposed a second, backend-level failure underneath, and a fix that introduced a regression in a shared input component.

Enterprise QA & Business-Logic Validation

Much of the enterprise QA work was business-logic validation: checking that the platform enforced its own commercial rules, not only that screens worked. That meant verifying partial settlements against the ledger, overdue status against the finance dashboard, invoice totals across cancelled and re-created delivery batches, credit notes against returned quantities, and promotional pricing against its validity window. Each rule was checked in stored data after the action, because a correct-looking screen can sit on top of an incorrect record.

Challenges

Solution

Results

Lessons Learned

The most serious defects sat at boundaries: between roles, between tenants, and between what the UI shows and what the API allows. Journey testing finds whether the product works. Testing each boundary directly at the API finds whether it is safe.

Logging and audit features also need security testing. Data written for observability can become a way to take over accounts if credentials or verification codes end up in it.

Related services

Public evidence

Production client work. Internal systems, data, and code are not public.

Need something similar?

Available for remote AI automation, n8n, AI agent, API integration, and B2B SaaS QA projects.