Note: You are currently viewing documentation for Moodle 3.10. Up-to-date documentation for the latest stable version of Moodle may be available here: Organisation structure.

Organisation structure

From MoodleDocs

workplacelogo.png This feature is part of Moodle Workplace, which is available through Moodle Partners.


Organisation structure is a combination of three Moodle Workplace features: departments, positions and jobs.

Moodle Workplace

We can use departments and positions hierarchies to define any organisation structure and define all reporting lines, assigning jobs to employees in any department with any position.

Having an organisation structure can help the tenant administrator to:

  • Create dynamic rules that automatically do something based on a users position or department (for example, enrol them in an induction course)
  • Create custom reports that have a specific department (or position) as their audience
  • Filter/search lists of users within the organisation based on their position and department
  • Create team managers by assigning jobs with "Manager" or "Department lead" positions to users

Having a manager position means that:

  • Your team list is displayed on your dashboard
  • You are able to allocate your team members to programs and certifications without any capabilities (if enabled in the position settings)
  • You are able to view custom reports on your team members without any capabilities (according to configured report audience settings)
  • You can receive notifications about completions/overdue certifications (if enabled in the position settings)

Departments and positions

To access the page, click "Organisation structure" from the workplace launcher. This page is available to users with either the Tenant administrator or Organisation manager role.

Departments and positions can be grouped together into frameworks. There can be different use cases for the frameworks - they can be used to create completely isolated sets of departments, for example one framework could be based on physical location and another one on a team within an organisation. Frameworks can also represent sub-divisions of a big organisation.


Both position and department structures can be hierarchical, however it is more likely that the organisation would have only one of them hierarchical and another one as a flat list.

Positions have additional properties that are called "Global manager" and "Department manager". See the following example for an explanation:

Adding new departments

Departments must be created inside a department framework. If there are no department frameworks created at this point, click on "New framework" to create a new one.

Click in the "+" icon to add a new department inside the framework. Notice that all departments also have a "+" icon: by clicking on it, a sub-department will be created.

Adding new positions

Positions must be created inside a position framework. If there are no position frameworks created at this point, click on "New framework" to create a new one.

Click in the "+" icon to add a new position inside the framework. Notice that all positions also have a "+" icon: by clicking on it, a sub-position will be created.


Each position can have different roles and permissions to the users that have these job positions assigned to.


These are the available permissions:

  • Allocate users to programs/certifications
  • View user reports
  • Receive notifications

These permissions can be assigned to Managers, Department leads or both.


A person with the manager job will be considered a manager of anyone in a lower position, regardless of their departments.

Department lead

A person with the department lead job will be considered a manager on anyone in the same department or sub-department, regardless of their position.

Example 1: Organisation structure hierarchy based on positions

The company chooses to store their hierarchy in the "Positions" tree. The CEO is the top position, underneath are the CTO and CFO. Managers of several technical teams are under the CTO, and members of these teams are under these managers. This means that there are separate positions in the hierarchy for "Members of team A" and "Members of team B". The same company uses departments as physical locations (countries, cities or rooms). They may or may not have a hierarchy. In this structure all positions that have "children" will be marked as a "Global manager". This will allow people who hold jobs in these positions to see everybody in the positions below them as their team. It's probable that the CEO does not need to "Receive notifications" from everybody in their company but they may need to see reports on them.

Example 2: Organisation structure hierarchy based on departments

In this company departments represent different divisions and teams inside the company. Their structure is hierarchical. There are several positions, such as "Facilitator" and "Staff member". The "Facilitator" position has the "Department manager" checkbox enabled. When people get assigned jobs in different departments, the facilitators will be able to see everybody from their department as their team.

It's possible to create more complex structures with hierarchies in both positions and departments, and also positions that are both "Global manager" and "Department manager".

Assigning jobs

When the organisation structure is defined, the tenant administrator can assign jobs to different users. As shown in the examples above, when somebody is assigned a job that has manager permissions they are able to see other users from their team.

One user can have multiple jobs and be part of multiple teams.

A job represents the current job that an employee is performing, consisting of a position within a department. Actual employees' jobs can change over time, people can be promoted or transferred from one department to another. However once a job is created it is not possible to change its department and position. It is also not recommended to delete any jobs (unless they were created by mistake). Instead, the tenant administrator should set the "End date" on the current job and create a new job in the new position or department. Most reports will only show "current jobs" (i.e. those that are active at this moment in time) and automatically hide past jobs. However for historical purposes it is very useful to keep a history of all jobs that employees have had.


Permissions to be a team manager or allocate users to programs are always taken from the current user's jobs (when current date is between job's start and end date).

Shared Organisation Structure

An Organisation Structure can be created in the Shared Space to be used across all tenants.

Jobs can be assigned to users in their tenants using shared Departments and Positions, and when moving users between tenants, jobs using shared departments and positions will be moved along.

To create shared departments and positions we need to access the Shared space from the tenant switch dropdown, in the navigation bar. When inside the Shared Space, go to Organisation structure in the Workplace launcher, and from here create new departments and positions as usual. Notice that there are no jobs in the Shared Space because users can not belong to Shared space.

Once we have created some departments and positions in the Shared space, we can use them from within all the other tenants. When creating a new job, they will be available in the departments and position selectors, and we can assign them to the users in our tenant.


Automation and integrations

To create departments and positions in bulk you can use Migrations tool. There are CSV importers available and via both web and CLI interfaces. Import wizard allows to specify how columns in the CSV file should be mapped to the properties of departments and positions. Only name is required, the smallest working CSV file can have only one column. For example, let's take CSV file called organisation1.csv with the following content: id,code,parent,name,description,descriptionformat 1,SAL,,Sales,Sales department,1 2,SAD,SAL,Sales development,Sales development department,1 3,CSC,SAL,Customer Success,Customer Success department,1 4,EDI,,Editorial,Editorial department,400 5,AND,EDI,Art and design,Art and design department,1 6,PRO,EDI,Production,Production department,1 7,RNE,EDI,Research and Education,Research and Education department,1 8,MED,RNE,Medical advising,Medical advising department,1 9,MHR,RNE,Mental Health research,Mental Health research department,1 10,ONR,RNE,Oncology research,Oncology research department,1

In order to import departments into new framework, the CLI command will be: php admin/tool/wp/cli/import.php --file="/var/www/html/organisation1.csv" --importer="tool_organisation\\tool_wp\\importer\\departments_csv" --tenant=1 --user=admin --settings="{\"target_framework\":\"new\",\"hierarchy\":\"selected\",\"identifier\":\"code\",\"csvmapping:name\":\"name\",\"csvmapping:idnumber\":\"code\",\"csvmapping:description\":\"description\",\"csvdefault:descriptionformat\":\"1\",\"csvmapping:parentid\":\"parent\",\"conflict:csvdata:idnumberconflict:action\":\"increment\"}" In order to import departments into existing framework with idnumber "org2", it can be referred by idnumber, e.g.: php admin/tool/wp/cli/import.php --file="/var/www/html/organisation1.csv" --importer="tool_organisation\\tool_wp\\importer\\departments_csv" --tenant=1 --user=admin --settings="{\"target_framework\":\"selected\",\"select_frameworkidnumber\":\"org2\",\"hierarchy\":\"selected\",\"identifier\":\"code\",\"csvmapping:name\":\"name\",\"csvmapping:idnumber\":\"code\",\"csvmapping:description\":\"description\",\"csvdefault:descriptionformat\":\"1\",\"csvmapping:parentid\":\"parent\",\"conflict:csvdata:idnumberconflict:action\":\"increment\"}"

It is also possible to use Web Services: tool_organisation_create_positions and tool_organisation_create_departments. Parameters descriptions are available inside Moodle itself - see Using web services

The Upload users tool was enhanced in Moodle Workplace and it includes functionality to assign users jobs in bulk or change existing jobs (set the end date).