AppointmentExpiryService ran one findPendingByAppointment query per expiring booking. Add PaymentRepository::findPendingByAppointments (one IN query keyed by appointment id) and use it. Test covers expiry + payment cancellation for several appointments at once.