code: def get_reprocessing_candidates(self, since=None):
          
          collection = self.ds.connection(COLLECTION_UNIT_OF_WORK)
  
          query = {unit_of_work.STATE: {'$in': [unit_of_work.STATE_IN_PROGRESS,
                                                unit_of_work.STATE_INVALID,
                                                unit_of_work.STATE_REQUESTED]},
                   unit_of_work.UNIT_OF_WORK_TYPE: unit_of_work.TYPE_MANAGED}
  
          if since is None:
              cursor = collection.find(query).sort('_id', ASCENDING)
              candidates = [UnitOfWork.from_json(document) for document in cursor]
          else:
              candidates = []
              yearly_timeperiod = time_helper.cast_to_time_qualifier(QUALIFIER_YEARLY, since)
              query[unit_of_work.START_TIMEPERIOD] = {'$gte': yearly_timeperiod}
  
              cursor = collection.find(query).sort('_id', ASCENDING)
              for document in cursor:
                  uow = UnitOfWork.from_json(document)
                  if uow.process_name not in context.process_context:
                      # this is a decommissioned process
                      continue
  
                  time_qualifier = context.process_context[uow.process_name].time_qualifier
                  if time_qualifier == QUALIFIER_REAL_TIME:
                      time_qualifier = QUALIFIER_HOURLY
                  process_specific_since = time_helper.cast_to_time_qualifier(time_qualifier, since)
  
                  if process_specific_since <= uow.start_timeperiod:
                      candidates.append(uow)
  
          if len(candidates) == 0:
              raise LookupError('MongoDB has no UOW reprocessing candidates')
          return candidates
docs: method queries Unit Of Work whose <start_timeperiod> is younger than <since>
          and who could be candidates for re-processing