def validate_symptom_input()

in lambda/src/gather_symptom_bot.py [0:0]


def validate_symptom_input(intent_name, session_attributes, slot_details, slots):
    symptom_name = slots.get(SLOT_SYMPTOM_ONE, None)
    # TODO: add support for multiple symptoms
    if not symptom_name:  # did not get symptom
        symptom_slot_detail = helper.get_attribute(slot_details, SLOT_SYMPTOM_ONE, {})
        unknown_symptom = symptom_slot_detail.get('originalValue', None)
        if unknown_symptom:
            logger.info(f'encountered unknown symptom: {unknown_symptom}')
            helper.append_session_attr(session_attributes, UNKNOWN_SYMPTOM_ATTR, unknown_symptom)
            symptom_name = unknown_symptom
            slots[SLOT_SYMPTOM_ONE] = symptom_name
        else:
            return helper.elicit_slot(session_attributes, intent_name, slots, SLOT_SYMPTOM_ONE,
                                      msg_strings.get('ASK_SYMPTOM'))

    pain_level = slots.get(SLOT_PAIN_LEVEL, None)
    if symptom_name in intensity_symptom and pain_level:
        try:
            int(pain_level)
        except ValueError:
            return helper.elicit_slot(session_attributes, intent_name, slots, SLOT_PAIN_LEVEL,
                                      msg_strings.get('PAIN_LEVEL_VALIDATION_FAILED').format(symptom_name))
        # verify within range
        if int(pain_level) < 0 or int(pain_level) > 10:
            return helper.elicit_slot(session_attributes, intent_name, slots, SLOT_PAIN_LEVEL,
                                      msg_strings.get('PAIN_LEVEL_VALIDATION_FAILED').format(symptom_name))
        else:
            # confirm intensity level if it's above threshold
            if int(pain_level) >= INTENSITY_THRESHOLD:
                msg = msg_strings.get('CONFIRM_INTENSITY').format(symptom_name, pain_level)
                return helper.confirm_intent(session_attributes, intent_name, slots, msg)
            return helper.delegate(session_attributes, slots)
    else:
        if symptom_name in localized_symptom:
            # need to distinguish which body part has the symptom
            body_part = slots.get(SLOT_BODY_PART, None)
            if not body_part:
                return helper.elicit_slot(session_attributes, intent_name, slots, SLOT_BODY_PART,
                                          msg_strings.get('ASK_SYMPTOM_BODY_PART').format(symptom_name))
            else:
                modifier = slots.get(SLOT_BODY_PART_MODIFIER, None)
                return confirm_symptom(session_attributes, intent_name, slots, symptom_name, body_part, modifier)
        else:
            return confirm_symptom(session_attributes, intent_name, slots, symptom_name)