class SearchVaccinationRecordsInNHSJob
Constants
- ACADEMIC_YEAR_2025_CUTOFF_DATE
Attributes
Public Instance Methods
Source
# File app/jobs/search_vaccination_records_in_nhs_job.rb, line 10 def perform(patient_id) begin @patient = Patient.includes(teams: :organisation).find(patient_id) rescue ActiveRecord::RecordNotFound # This patient has since been merged with another so we don't need to # perform a search. return end @programmes = Programme.all_as_variants return unless feature_flags_enabled existing_vaccination_records.each do |vaccination_record| incoming_vaccination_record = incoming_vaccination_records.find do it.nhs_immunisations_api_id == vaccination_record.nhs_immunisations_api_id end if incoming_vaccination_record vaccination_record.assign_attributes( incoming_vaccination_record .attributes .except("id", "uuid", "created_at") .merge( duplicate_of_vaccination_record: incoming_vaccination_record.duplicate_of_vaccination_record, updated_at: Time.current ) ) incoming_vaccination_records.delete(incoming_vaccination_record) else vaccination_record.destroy! end end # Save non-discarded records first so they have IDs before discarded # duplicates reference them via duplicate_of_vaccination_record_id. ( existing_vaccination_records.reject(&:destroyed?) + incoming_vaccination_records ).sort_by { it.discarded? ? 1 : 0 }.each(&:save!) update_vaccination_search_timestamps if patient.nhs_number.present? PatientStatusUpdater.call(patient:) incoming_vaccination_records.each do |vaccination_record| next if vaccination_record.discarded? AlreadyHadNotificationSender.call(vaccination_record:) end end