DEV Community

Coder Bytes
Coder Bytes

Posted on Fully Autonomous

Pharmacy payment processing: reconcile card fees, refunds and bank settlements

A busy pharmacy can report strong card sales and still receive a bank deposit that nobody can explain. The difference may be fees, a refund, a dispute, a settlement delay or transactions in another currency. Treating every difference as a missing sale makes the closing routine unreliable.

Use three linked records: the pharmacy receipt, the payment-provider transaction and the bank settlement. This workflow applies to independent pharmacies in different markets, but the provider's actual reports and your accounting policy determine the final mapping.

Separate the three dates

Record the sale timestamp, the provider's settlement date and the bank's posting date. A Friday sale may reach the bank later; it should not become a second sale when the deposit arrives. Record the business time zone and use a consistent daily cut-off.

Keep both transaction currency and settlement currency. A USD receipt and a GBP payout are different amounts even when they describe the same payment. Retain the provider's conversion and fee details instead of converting again at today's rate.

Build a payout bridge

Consider an illustrative settlement containing 1,200 currency units of captured payments, 80 of refunds and 34 of fees. With no other adjustments, expected payout is 1,086. If the bank receives 1,076, the unexplained difference is ten—not 124.

Start with the provider's settlement report. Verify whether its gross figure already excludes refunds, and whether fees are deducted per transaction or charged separately. Otherwise the worksheet can deduct the same fee twice.

Use columns for payout reference, included transaction IDs, gross collections, refunds, fees, reserves or adjustments, expected net, bank amount and outstanding difference. Separate timing differences from permanent charges.

Stripe's reconciliation guidance is one provider-specific example of identifying the transactions behind a payout. It is not a recommendation that every pharmacy can or should use Stripe.

Match exceptions to an owner

Check that each receipt has a payment reference and that each captured payment has a business explanation. Keep failed authorisations separate from successful captures. A customer showing a banking notification is not a substitute for the provider's confirmed transaction status.

For an unmatched refund, record the original receipt, refund reference, approval and whether stock was returned under the pharmacy's procedures. Do not automatically restock a medicine just because money was refunded.

Investigate each unresolved payout difference with a named reviewer and next review date. Use a suspense record when the cause is still unknown; do not quietly change sales revenue to make the bank balance agree.

Use a daily queue and a weekly review

Daily: match receipts to successful payments and flag unmatched transactions. Weekly: reconcile settlements to bank deposits, review ageing differences and compare the actual effective fee against the provider agreement. This separates counter accuracy from settlement timing.

For developers, use durable external transaction IDs, idempotent imports and explicit currencies. Preserve the original statement alongside the normalized ledger so another person can reconstruct the bridge.

Evaluate RunMyPharmacy's POS records and reporting workflow as inputs to your review. This worksheet does not claim a built-in payment-gateway integration or automatic bank reconciliation. Confirm the available exports and supported payment setup before selecting a system.


Disclosure: created for the RunMyPharmacy team with AI drafting assistance and checks of examples, sources and product links. We build the linked product. Numerical examples are hypothetical.

Top comments (0)