def parse_id(id_value: str) ->dict:
    """
    Parse the id_value into its component parts.

    :param id_value:
        The id value to parse.
    :return:
        A dictionary containing the parts of the id including the prefix,
        uuid, and checksum.
    """
    if len(id_value.split('-')) != 8:
        template = '"{value}" is not a nuggan id.'
        raise ValueError(template.format(value=id_value))
    prefix, hex_time, remaining = id_value.split('-', maxsplit=2)
    base_id, checksum = remaining.rsplit('-', maxsplit=1)
    prefixed_id, _ = id_value.rsplit('-', maxsplit=1)
    return {'prefix': prefix, 'hex_time': hex_time, 'prefixed_id':
        prefixed_id, 'base_id': base_id, 'checksum': checksum}
