Your code looks pretty good to me. Just some minor notes:

* `next if survey.nil?` -> `next unless survey` is enough.
* The conditional operator `?` is normally used for expressions, not for actions with side-effects. Also, it's a long line, a normal `if`-`else` would look better.
* Argument `panel_id` is not used?

That said, I'd refactor it a little bit. In my experience, full-fledged conditionals (no inline conditionals) make code easier to read:


    class VerificationWorker
      include Sidekiq::Worker
    
      def perform(panel_id)
        members = MembersAPI.members.fetch
    
        members.each do |member|
          if (survey = Survey.find_by(number: member.data_number))
            if survey.id != member.data['survey_id']
              survey.fail!('survey_id does not match')
            else
              survey.recipient_id = survey.recipient_id.presence || member.id
              
              if survey.recipient_id == member.id
                survey.verify!
              else
                survey.fail_panel!('recipient_id does not match member id')
              end
            end
          end
        end
      end
    end