def hp2dec(hp):
    """
    Converts HP Notation to Decimal Degrees
    :param hp: HP Notation (DDD.MMSSSS)
    :type hp: float
    :return: Decimal Degrees
    :rtype: float
    """
    # Check if 1st and 3rd decimal place greater than 5 (invalid HP Notation)
    hp = float(hp)
    hp_dec_str = f'{hp:.17f}'.split('.')[1]
    if int(hp_dec_str[0]) > 5:
        raise ValueError(f'Invalid HP Notation: 1st decimal place greater '
                         f'than 5: {hp}')
    if len(hp_dec_str) > 2:
        if int(hp_dec_str[2]) > 5:
            raise ValueError(f'Invalid HP Notation: 3rd decimal place greater '
                             f'than 5: {hp}')
    degmin, second = divmod(abs(hp) * 1000, 10)
    degree, minute = divmod(degmin, 100)
    dec = degree + (minute / 60) + (second / 360)
    dec = round(dec, 16)
    return dec if hp >= 0 else -dec