Payment finalisation · appointment 48210
Illustrative amounts · real flag
The patient paid cash at the desk on the way in. Seven minutes later, sitting in the
waiting room, they paid the link on their phone as well.
Collected
$180.00 — what the visit costs
-
14:02 · cash at the desk
$180.00 paid
-
14:09 · card, the pay link
$180.00 paid
$360.00 is now recorded against a $180.00 visit, and that is on purpose.
Committed
duplicate_paid_payment
REFUND REVIEW appointmentId=48210 status=booked flags=duplicate_paid_payment
written to
StripeWebhookEvents
and to
your activity log
— under the same payment.refund_review action the cancel pass
uses, so one filter shows every case of money that needs a person.
Two payments arrived for one visit.
Both of them are in the record.
The webhook that finalises the second payment checks before it writes, and it
already knows: there is another paid row on this appointment that is not this
session. It writes the payment anyway. That is deliberate, and the comment above
that check is where this section gets its name — money is still recorded,
truth first, and the case is flagged after commit. Software that quietly drops
the second payment leaves your books saying you took $180.00 on an afternoon when
$360.00 left the patient’s accounts, and the patient is the one who finds out.
The judging is a separate pass and it runs after the transaction has
committed, on its own read, wrapped so that it can never throw. Nothing it decides
can change the amounts above the line, and nothing it gets wrong can fail the
payment it was looking at. Two other flags come out of the same pass:
paid_on_cancelled_appointment when money lands on a visit that was
already cancelled, and paid_series_has_cancelled_occurrences with a
count when it lands on a recurring series that has cancelled dates in it.
What Qlynic does not do is decide what should happen next. It will not refund the
second payment, and it will not credit it forward to the patient’s next visit.
Both of those are your clinic’s call and both of them have a name attached
when they are made.