def _check_value_mapping(layer, exposure_key=None):
    index = layer.fields().lookupField(exposure_type_field['field_name'])
    unique_exposure = layer.uniqueValues(index)
    if layer.keywords['layer_purpose'] == layer_purpose_hazard['key']:
        if not exposure_key:
            message = tr('Hazard value mapping missing exposure key.')
            raise InvalidKeywordsForProcessingAlgorithm(message)
        value_map = active_thresholds_value_maps(layer.keywords, exposure_key)
    else:
        value_map = layer.keywords.get('value_map')
    if not value_map:
        return layer
    if layer.keywords['layer_purpose'] == layer_purpose_hazard['key']:
        if not exposure_key:
            message = tr('Hazard classification is missing exposure key.')
            raise InvalidKeywordsForProcessingAlgorithm(message)
        classification = active_classification(layer.keywords, exposure_key)
    else:
        classification = layer.keywords['classification']
    exposure_classification = definition(classification)
    other = None
    if exposure_classification['key'] != data_driven_classes['key']:
        other = exposure_classification['classes'][-1]['key']
    exposure_mapped = []
    for group in list(value_map.values()):
        exposure_mapped.extend(group)
    diff = list(unique_exposure - set(exposure_mapped))
    if other in list(value_map.keys()):
        value_map[other].extend(diff)
    else:
        value_map[other] = diff
    layer.keywords['value_map'] = value_map
    layer.keywords['classification'] = classification
    return layer