Exemple #1
0
def get_open_episode_case(domain, person_case_id):
    """
    Gets the first open 'episode' case for the person

    Assumes the following case structure:
    Person <--ext-- Occurrence <--ext-- Episode

    """
    case_accessor = CaseAccessors(domain)
    occurrence_cases = case_accessor.get_reverse_indexed_cases([person_case_id])
    open_occurrence_cases = [case for case in occurrence_cases
                             if not case.closed and case.type == "occurrence"]
    if not open_occurrence_cases:
        raise AdherenceException(
            message="Person with id: {} exists but has no open occurence cases".format(person_case_id)
        )
    occurence_case = open_occurrence_cases[0]
    episode_cases = case_accessor.get_reverse_indexed_cases([occurence_case.case_id])
    open_episode_cases = [case for case in episode_cases
                          if not case.closed and case.type == "episode" and
                          case.dynamic_case_properties().get('episode_type') == "confirmed_tb"]
    if open_episode_cases:
        return open_episode_cases[0]
    else:
        raise AdherenceException(
            message="Person with id: {} exists but has no open episode cases".format(person_case_id)
        )
Exemple #2
0
def validate_dates(start_date, end_date):
    if start_date is None:
        raise AdherenceException("start_date is null")
    if end_date is None:
        raise AdherenceException("end_date is null")
    try:
        parse_datetime(start_date).astimezone(pytz.UTC)
        parse_datetime(end_date).astimezone(pytz.UTC)
    except:
        raise AdherenceException("Malformed Date")
Exemple #3
0
def update_episode_adherence_properties(domain, person_id):
    try:
        episode_case = get_open_episode_case_from_person(domain, person_id)
    except ENikshayCaseNotFound as e:
        raise AdherenceException(e.message)
    try:
        updater = EpisodeUpdater(domain)
        updater.update_single_case(episode_case)
    except Exception as e:
        raise AdherenceException(
            "Error calculating updates for episode case_id({}): {}".format(
                episode_case.case_id, e))
Exemple #4
0
 def update_adherence_cases(self, start_date, end_date, confidence_level):
     try:
         adherence_cases = get_adherence_cases_between_dates(
             self.domain, self.person_id, start_date, end_date)
     except ENikshayCaseNotFound as e:
         raise AdherenceException(e.message)
     adherence_case_ids = [case.case_id for case in adherence_cases]
Exemple #5
0
 def _parse_adherence_date(self, iso_datestring):
     tz = timezone(ENIKSHAY_TIMEZONE)
     try:
         datetime_from_adherence = parser.parse(iso_datestring)
         datetime_in_india = datetime_from_adherence.astimezone(tz)
     except ValueError:
         raise AdherenceException(
             "Adherence date should be an ISO8601 formated string with timezone information."
         )
     return datetime_in_india.date()
Exemple #6
0
def validate_confidence_level(confidence_level):
    valid_confidence_levels = ['low', 'medium', 'high']
    if confidence_level not in valid_confidence_levels:
        raise AdherenceException(
            message="New confidence level invalid. Should be one of {}".format(
                valid_confidence_levels))
Exemple #7
0
def validate_adherence_values(adherence_values):
    if adherence_values is None or not isinstance(adherence_values, list):
        raise AdherenceException("Adherences invalid")
Exemple #8
0
def validate_beneficiary_id(beneficiary_id):
    if beneficiary_id is None:
        raise AdherenceException("Beneficiary ID is null")
    if not isinstance(beneficiary_id, basestring):
        raise AdherenceException("Beneficiary ID should be a string")
Exemple #9
0
 def _episode_case(self):
     try:
         return get_open_episode_case_from_person(self.domain,
                                                  self._person_case.case_id)
     except ENikshayCaseNotFound as e:
         raise AdherenceException(e.message)
Exemple #10
0
 def _person_case(self):
     try:
         return self.case_accessor.get_case(self.person_id)
     except CaseNotFound:
         raise AdherenceException(
             "No patient exists with this beneficiary ID")