def create_soil_type(s):
    """
    Function to create the description of the soil type.

    :param s: (str) Soil code.
    :return: (str) Description of the soil code.
    """
    string_noquote = s.replace("'", '')
    split_letters = list(string_noquote)
    dict_name = {'G': 'gravel', 'K': 'clay', 'L': 'loam', 'V': 'peat', 'Z':
        'sand'}
    dict_addition = {'z': 'sand', 's': 'silt', 'm': 'mineral', 'k': 'clay',
        'g': 'gravel', 'h': 'humeus'}
    dict_intensity = {'1': 5, '2': 10, '3': 15, '4': 20}
    dict_exceptions = {'GM': 'layer information missing', 'NBE':
        'soil cannot be classified properly', 'W': 'water'}
    soil_name = ''
    try:
        if string_noquote is not '':
            if string_noquote in dict_exceptions:
                soil_name = soil_name + dict_exceptions[string_noquote]
            else:
                sum_addition = 0
                percentage_main_component = 100
                main_component = dict_name[split_letters[0]]
                soil_additions = ''
                for i in range(1, len(split_letters)):
                    if split_letters[i] in dict_addition:
                        soil_additions = (soil_additions + ' with ' +
                            dict_addition[split_letters[i]])
                    elif split_letters[i] in dict_intensity:
                        soil_additions = soil_additions + ' ' + str(
                            dict_intensity[split_letters[i]]) + '%'
                        sum_addition = sum_addition + dict_intensity[
                            split_letters[i]]
                if sum_addition > 0:
                    percentage_main_component = (percentage_main_component -
                        sum_addition)
                soil_name = main_component + ' ' + str(
                    percentage_main_component) + '%' + soil_additions
        else:
            soil_name = 'soil_not_defined'
    except KeyError:
        soil_name = 'soil_not_according_with_NEN_classification'
    return soil_name
