code: def _process_state_final_run(self, job_record):
          
          uow = self.uow_dao.get_one(job_record.related_unit_of_work)
          if uow.is_processed:
              self.update_job(job_record, uow, job.STATE_PROCESSED)
          elif uow.is_noop:
              self.update_job(job_record, uow, job.STATE_NOOP)
          elif uow.is_canceled:
              self.update_job(job_record, uow, job.STATE_SKIPPED)
          elif uow.is_invalid:
              msg = 'Job {0}: UOW for {1}@{2} is in {3}; ' \
                    'relying on the Garbage Collector to either recycle or cancel the UOW.' \
                    .format(job_record.db_id, job_record.process_name, job_record.timeperiod, uow.state)
              self._log_message(INFO, job_record.process_name, job_record.timeperiod, msg)
          else:
              msg = 'Suppressed creating UOW for {0}@{1}; Job is in {2}; uow is in {3}' \
                    .format(job_record.process_name, job_record.timeperiod, job_record.state, uow.state)
              self._log_message(INFO, job_record.process_name, job_record.timeperiod, msg)
  
          timetable_tree = self.timetable.get_tree(job_record.process_name)
          timetable_tree.build_tree()
docs: method takes care of processing job records in STATE_FINAL_RUN state