def METHOD_NAME(expense, user):
    """Allowed next states for this expense and given user"""
    state = expense.state
    next_states = ()
    # Get roles according to standard expense groups
    expense_administrator, expense_subsidiary_manager, expense_manager, expense_paymaster, expense_requester = user_expense_perm(user)
    # A user cannot manipulate his own expense, except admin
    if expense.user == user and not expense_administrator:
        return next_states
    if state == "REQUESTED":
        if expense_administrator:
            next_states = ("VALIDATED", "NEEDS_INFORMATION", "REJECTED")
        if expense_manager and expense.user in Consultant.objects.get(trigramme__iexact=user.username).user_team(exclude_self=True):
            next_states = ("VALIDATED", "NEEDS_INFORMATION", "REJECTED")
        if expense_subsidiary_manager and users_are_in_same_company(user, expense.user):
            next_states = ("VALIDATED", "NEEDS_INFORMATION", "REJECTED")
    elif state == "VALIDATED":
        if expense_administrator or expense_paymaster:
            next_states = ("NEEDS_INFORMATION", "CONTROLLED")
    elif state == "NEEDS_INFORMATION":
        if expense_administrator or expense_paymaster:
            next_states = ("VALIDATED", "REJECTED")
    allowed_states = [i[0] for i in EXPENSE_STATES]
    for state in next_states:
        assert state in allowed_states  # Just to be sure we don't mess up
    return next_states