•
Drizz raises $2.7M in seed funding •
•
Featured on Forbes
•
Drizz raises $2.7M in seed funding •
•
Featured on Forbes

A patient books a cardiologist. Booking screen: "Co-pay: 160." Payment screen after the teleconsult: "Amount due: 320." The plan changed its specialist co-pay tier two weeks ago. Cached data at booking, live data at payment. Same appointment, two amounts, one support call, one lost patient.
Insurance is the most financially sensitive flow in health apps. A wrong co-pay creates billing disputes, rejected claims, and support tickets that cost more than the consultation itself. This guide covers the 6 stages of insurance flow, what breaks at each, and how Drizz validates that what a patient sees at booking matches what they're charged at payment.
For the complete health app flow map, see The Complete Guide to Consumer Health App Flows. For prescription validation, see How Drizz Validates Prescription Screens.
Before a patient can book, the app must verify: is this patient covered under their insurance plan for this type of consultation with this doctor?
What happens: The app sends the patient's insurance ID and the doctor/consultation details to the insurer's API. The response says: covered (proceed with co-pay), not covered (show full price), or requires pre-authorization (block booking until approved).
Certain consultations, procedures, and tests require insurer approval before they happen. A specialist consultation may need pre-auth. A diagnostic scan almost always does.
What happens: The app submits a pre-auth request with clinical justification. The insurer approves, denies, or requests more information. The patient can only proceed after approval.
What breaks:
The co-pay is the amount the patient pays out-of-pocket. It's calculated from multiple inputs that can each change independently.
The calculation: consultation fee (set by doctor) x coverage percentage (set by plan) = insurer's share. Remainder = patient's co-pay. Plus: deductible status (has the patient met their annual deductible?), co-pay caps (some plans cap specialist co-pays at a maximum), family vs individual deductible tracking, and in-network vs out-of-network rates.
What breaks:
In cashless transactions, the insurer pays the provider directly. The patient pays only the co-pay. This requires real-time coordination between the app, the insurer, and the provider.
What breaks:
After the consultation, a claim is submitted to the insurer with: consultation details, diagnosis codes, prescription, invoice, and any supporting documents.
What breaks:
The patient tracks their claim: submitted, under review, approved, rejected, settled, payment disbursed.
What breaks:
Insurance flow complexity differs by market, but the testing challenges are universal:
United States: Copay, coinsurance, and deductible are three separate calculations. A patient may have a $30 copay for primary care, 20% coinsurance for specialists (after meeting a $2,000 deductible), and a separate out-of-pocket maximum. Each variable changes the amount due. HSA/FSA eligibility adds another layer.
European Union: Cross-border care under the European Health Insurance Card (EHIC) means a patient in Germany can consult a doctor in France with coverage. The app must handle cross-border eligibility, currency conversion, and different billing formats per country.
India: ABHA (Ayushman Bharat Health Account) integration for government-covered patients, TPA-mediated cashless processing, corporate health benefits with different coverage for employees vs family members, and co-pay structures that vary by state.
Middle East (GCC): Mandatory health insurance with government-regulated benefit categories. DHA (Dubai Health Authority) and HAAD (Abu Dhabi) have different coverage rules. The app must enforce region-specific benefit limits.
The testing challenge is the same everywhere: dynamic co-pay calculation from multiple inputs, cross-screen consistency between booking and payment, and claim lifecycle tracking across external systems.
A test asserting co_pay == 160 breaks when: the plan terms change (quarterly), the doctor's fee changes (annually), the patient meets their deductible (any day), or the network status changes (monthly contract renewals). Static value assertions on dynamic calculations produce constant false failures.
The co-pay displayed on the booking screen must match the payment screen. These are two different screens, often rendered by different components, pulling from different API endpoints. Appium tests each screen independently. If the booking test passes with co-pay 160 and the payment test passes with co-pay 320, both tests are green. The inconsistency is invisible because the tests don't compare across screens.
Insurance display is A/B tested aggressively: where to show the co-pay breakdown, whether to display "You save 640" vs "Insurance covers 80%," how to present the "In-Network" badge, whether to show the deductible meter. Each A/B variant changes element positions and IDs.
Drizz validates insurance flows visually across screens, catching the cross-screen inconsistencies and display bugs that isolated element testing misses.
Search for a doctor
Verify "In-Network" or "Covered" badge is visible on doctor card
Tap doctor profile
Note the co-pay amount displayed on booking screen
Complete the booking
Navigate to payment screen
Verify co-pay amount on payment matches the booking amount
Verify plan name displayed matches patient's profile
Drizz reads the co-pay amount visually on the booking screen, carries that value through the flow, and compares it against the payment screen. If they differ, the test fails with: "Expected co-pay 160 (shown at booking) but payment screen shows 320."
Log in with a patient who has active insurance
Search for a covered doctor
Verify insurance badge is visible on doctor card
Verify co-pay amount is displayed (not "Price unavailable")
Search for an out-of-network doctor
Verify full price is displayed without insurance badge
Verify "Out of Network" or "Not Covered" indicator is shown
Drizz validates the visual difference between covered and uncovered doctors. If the insurance badge renders on an out-of-network doctor (display bug), the test catches it.
After completing a consultation
Navigate to claim status
Verify claim shows "Submitted" with submission date
Wait for status update (or trigger via test API)
Verify status changes to "Under Review" or "Approved"
Verify the claim amount, covered amount, and co-pay are displayed
Verify rejection shows a reason and next steps (if rejected)
Drizz reads the claim status screen visually, confirming that status transitions render with the correct labels, amounts, and action items.
Search for a specialist requiring pre-auth
Tap "Book Appointment"
Verify pre-authorization prompt appears before booking completes
Verify booking is blocked until pre-auth status is approved
Simulate pre-auth approval (via test API)
Verify booking proceeds after approval
If the app allows booking without pre-auth when it's required, Drizz catches it because the pre-auth prompt never appeared on screen.
Log in with corporate health account
Verify plan shows company name and coverage type
Search for a doctor
Verify co-pay reflects corporate plan rates (not personal plan)
Book appointment
Verify invoice shows company as billing entity
Verify employee vs dependent coverage is correctly applied
Insurance flows are where health apps make or lose money. A co-pay calculation that's wrong by 160 creates a support ticket that costs more to resolve than the error itself. A pre-auth requirement that's not enforced creates a claim rejection that the patient discovers weeks later. A cashless denial at payment time creates the worst possible patient experience: surprise full-price billing after a covered consultation.
The most dangerous insurance bug isn't in any single screen. It's in the gap between screens: the co-pay at booking that doesn't match payment, the eligibility badge that doesn't match the calculation, the claim amount that doesn't match the settlement. These cross-screen inconsistencies pass every test that validates screens in isolation.
Drizz catches them because it reads every screen the way the patient reads it, carries the numbers through the flow, and flags the moment they stop matching. One visual test that flows from booking to payment to claim catches what isolated element checks on three separate screens cannot.
Insurance flows depend on external systems (insurer APIs, TPA platforms) that return dynamic data based on the patient's specific plan, deductible status, and network configuration. The co-pay for the same doctor changes based on which patient is logged in, whether they've met their deductible, and whether the doctor's network contract has been renewed. Static test assertions can't handle this dynamism.
Use test patient profiles with known plan configurations in a staging environment. Create profiles for: fully covered patient (0 co-pay), 80% coverage patient (20% co-pay), out-of-network patient (full price), and deductible-not-met patient (higher co-pay). Validate the visual display for each profile rather than asserting specific dollar amounts.
Drizz validates the visual claim submission flow: the submit button works, the confirmation screen appears, the claim status updates. Verifying that the claim was actually received and processed by the insurer requires API-level validation against the insurer's system.
Co-pay inconsistency between booking and payment. The booking screen uses cached plan data while the payment screen uses live data. If the plan terms changed between booking and payment (even by hours), the patient sees two different amounts for the same consultation.
Test structurally, not system-specifically. "Verify co-pay is displayed, verify plan name matches, verify booking and payment amounts are consistent" works across US copay/coinsurance, Indian TPA cashless, and EU cross-border coverage. The visual patterns are the same even though the underlying insurance systems differ.