Supplier Management Portal (SMP)
Local Content Reporting User Management
Introduction
I have been working on the Supplier Management Portal (SMP) project since I started my current role. The SMP is an online platform that creates business linkages between local suppliers of goods and services and foreign buyers (mostly international oil and gas corporations). It then facilitates local employment and procurement reporting during the operations.
When the requirement for the user management feature came around, I had one design sprint (two weeks) to iterate on my design and to gain the client’s approval before handing it over to the development team.
What is Local Content Reporting?
One of the crucial features of the SMP is Local Content Reporting.
Local Content Reporting refers to the process of collecting and analyzing information about the extent to which goods, services, and human resources from a particular region or country are used in the development and operation of a project. It is particularly important in industries such as oil and gas, mining, and construction, where large-scale projects often have significant impacts on local communities and economies.
Local Content Reporting typically involves collecting and analyzing data on the procurement of goods and services, employment of local workers, training and development programs, and community investment initiatives. The data is then reported to relevant stakeholders, such as government agencies, investors, and local communities, to demonstrate compliance with local content requirements and promote sustainable development.
How does Local Content Reporting work on SMP?
Roles
Admin
Internal employees from an international development consulting firm (Our direct client and the product owner) who support Operators and Contractors in completing their Local Content Reporting.
Operator
The entity that gathers Local Content data from its Contractors to prove to local authorities that the project they are operating is contributing to the local economy. They are at the top of the supply chain for their project.
Contractor
Entities who report their Local Content performance to the Operator. There are multiple tiers of Contractors. They are the participants in the reporting process.
This is the interface where the Operator manages and enters their Contractors’ Local Content Reports. The “Your Contractors” list shows the supply chain of the project in reporting period Q2 2023 (as shown in the dropdown). The same organization can have multiple contracts with the organization it reports to.
User Journey
These are examples of reporting table templates.
When a new Operator client starts using SMP, Admins reach out and gather reporting requirements from the Operator. These requirements include the specs of reporting, such as reporting starting time, reporting frequency, and reporting collection starting and cut-off dates. They also include the reporting framework, which is a set of table templates for Contractors to fill out.
Using SMP’s project configuration and table builder feature, an Admin sets up the reporting project according to the Operator’s needs.
The Operator users receive invites when the setup is done. They can log into SMP and start their project setup:
Add contracts and Contractor organizations
Add targets for Local Content
Contractor users receive invites to register when they are added by Operator users. When the reporting collection period starts, they can fill in and submit their reports.
Operator users can review the reports from Contractors and access analytical functionalities such as Reporting Analysis, Targets and Scorecards, and Economic Impacts.
Feature Requirements and Constraints
Initial Requirements
We gathered the following broad requirements from the client for the feature initially:
The Operator has the user management ability towards their Contractors. Contractor organizations should not be able to manage their own users.
There should be two roles with different reporting permissions for Contractor users - Owner and Reporter. Each organization should have exactly one Owner and any number of Reporters.
User management capabilities should include adding, deactivating, activating, and deleting users.
The Current “Add Contract” Workflow
Before we started exploring reporting user management, each contract was associated with a Contractor organization with a single user, and there was no Reporter role.
When the Operator user adds a contract, they need to either choose an existing Contractor organization (If this organization has previous contracts in this project) or add a new one (If this organization has never reported in this project before).
Press Control/Command and scroll to zoom in and out
We decided to keep this current flow intact to minimize users’ learning curve and dev efforts. Also, since we have introduced the role of Reporters, there should be a separate workflow to add Reporters to an organization.
Organization Statuses
There are two statuses for a Contractor organization: “Currently Reporting” and “Previously Reported.” A Contractor organization that is “Currently Reporting” cannot exist without an Owner or with an inactive Owner.
Currently Reporting
A Contractor organization that has an active contract in the current or future reporting period. For these organizations, the Operator user must transfer their ownership to a Reporter from the same organization before deactivating or deleting the Owner.
Previously Reported
A Contractor organization that had a contract in the previous reporting period, but the contract got deleted by the Operator, possibly because the contract has ended, so there’s no active contract in the current or future reporting period. Operator users can freely deactivate or delete all these organizations’ users, including Owners.
Solutions
User List
*The “Users” tab in the left side navigation bar is for a page where the Operator Admins can manage their own users.
All Contractor users are listed under the “Users” tab of a particular project. This is the main space where the Operator’s user management actions take place.
Operator users can apply a filter to see only Currently Reporting organizations’ users or Previously Reported organizations’ users. They can also filter by organization, role, and status.
By default, the list should be sorted by users’ last names alphabetically. The newly added “Unknown User” should always go to the top of the list.
All columns are sortable.
User Profile
Add Reporter
Press Control/Command and scroll to zoom in and out
User Management
User management actions for users of different roles, different statuses, and different organization statuses can all be different.
I made the following table to inform developers of different action items in the dropdown list of ellipsis buttons at the end of each user row.
Press Control/Command and scroll to zoom in and out
For instance, an Operator user cannot deactivate or delete an Owner of a “Currently Reporting” Contractor organization without transferring their ownership to a Reporter from the same organization first. So in the action dropdown list for this type of users, we disable the “deactivate user” and “delete user” actions and show a tooltip explaining why this action is unavailable.
If there’s no available Reporter in the organization to transfer ownership to, the Operator user needs to add or activate a Reporter first. In this case, we will disable the “transfer ownership” option as well and show the corresponding tooltip explanation.
Transfer Ownernship
Operator users should be able to transfer ownership from Owners that are active, invite expired, and invite revoked from a Currently Reporting organization. If the Owner is pending invite, Operator users can revoke the invite and then transfer ownership.
With Previously reported organizations, transferring ownership should also be doable for inactive Owners.
But what about Reporters? Reporters with what kind of statuses can be transferred ownership to?
For Currently Reporting organizations
It's obvious that for a Currently Reporting organization, ownership could be transferred to an active Reporter and cannot be transferred to an inactive Reporter because we cannot have an inactive Owner.
What about Reporters who are pending invite, invite expired, or invite revoked?
Pending invite Reporters should be able to take ownership. After the transfer, when they click the CTA button in the original invite that was sent before the transfer and get onto the platform, they should see the Owner's view and have the Owner's permissions.
Invite expired or revoked Reporters should be able to take ownership, too. Because we want to make sure they have the Owner's permissions before resending the invite to them.
For Currently Reporting organizations, we should show all Reporters in this transfer ownership dropdown and only disable the inactive Reporters.
For Previously Reported organizations
Ownership can be transferred to all statuses of Reporters.
Edge Cases and Error Recovery
We took time to think about possible edge cases with user management. An example of edge cases is:
A Previously Reported organization could have all its users deleted. What if this organization suddenly starts a new contract in this project? Here are our considerations:
A Previously Reported organization with no users in it should still appear in the organizations dropdown when a contract is added.
When a new contract is created for a Previously Reported organization, it becomes a Currently Reporting organization. To follow our rule, it must have an Owner that is not inactive. So, if this organization doesn't have an Owner or the Owner is inactive, we need to prompt the Operator user to ensure there's a valid Owner before they add the contract.
In this scenario, the Operator user might 1)add an Owner, 2)activate the inactive Owner, or 3)set a remaining Reporter to be the Owner. 2 is possible with our current design, but 1) and 3) is not possible.
We decided to utilize the "Add Reporter" flow to enable 1.
Operator user still clicks the “Add User” CTA button on the users page and enters this flow. After they choose the organization, if the system detects that this organization is Previouly Reported and doesn’t have an Owner, the front end should show the radio button for user to choose whether this added user is an Owner or a Reporter.
To enable 3, we can add an action option for Reporers from a Previouly Reported organization without an Owner - “Set to be Owner.”