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
    }