# Onestop Admin

Onestop admin is the web-based platform that allows administrators to deploy and manage online processes for their organization.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F9aYfwdHE5ImUxH76pOnt%2Fdemo-illustration.png?alt=media&amp;token=cfb9a6a3-e515-4617-887a-2090640d4512" alt=""><figcaption></figcaption></figure>


# Getting Started with Onestop

### What is Onestop?

Onestop is a next generation SaaS platform that allows you to automate any process, thus empowering you to build custom systems without writing a single line of code.

Onestop strives to empower organizations, no matter how small, to automate and be part of the digital revolution, bringing the latest technology such as ML/AI to small businesses in a world of ever increasing disruption.

### How it works?

#### Overview

Onestop allows you to setup an organization and build custom applications that automate your business processes, making them available through an online portal/website. Automated business processes are referred to as [services](#services) in Onestop. The diagram below summarizes how this all works together:

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FBcSzZHadK39dgjgjrrmO%2FOnestop%20Online%20Architecture(1).png?alt=media&amp;token=e2ddbbaa-e197-4101-ad9d-040e98ad5ee6" alt=""><figcaption></figcaption></figure>

#### How to get onboard

* [Register as an Organization Administrator](https://admin.onestop.site/auth/signup/) if you want to use Onestop SaaS at onestop.site.
* Onboard your Organization
* Create a portal(s) for your organization
* Create and deploy automated workflows to your portals
* Invite co-workers
* Share your live portal(s) with your customers

### Terminology

#### Admin Portal

The Onestop admin portal is a web-based platform that allows administrators to manage and oversee the various processes of their organization that are deployed on Onestop. It provides a centralized dashboard for managing workflows, employee accounts, user access, data, and resources.

#### Customer Portal

A customer portal in Onestop, is a web-based platform that allows your customers to access and manage their account information, access deployed services, and interact with your organization in a self-service manner. It provides a personalized dashboard that allows your customers to view their account details, request for services, carry out service-related tasks, track service requests, view & pay invoices, and access any communication and issued documents by your organization to them.

Onestop allows you to deploy multiple customer portals that will improve your customer service, reduce the workload on customer service staff, and provide customers with easy access to their account information and support.

#### Staff Portal

A staff portal in Onestop, is a web-based platform that provides your organization's employees with tools for communication, collaboration, and task management, in relation to business processes that have been deployed on Onestop. The staff portal allows your employees to execute tasks, communicate and collaborate with each other and customers in the execution of your deployed business processes.

#### Services

A service in Onestop is a representation of your automated process and all its inputs and outputs. This includes workflow tasks, input forms, data records, notifications, billing information and output documents.

#### Workflow

A workflow is a series of steps in your business process from beginning to end.

* In Onestop, these workflow steps are configured using “task templates”
* Onestop is a task-centered platform meaning that in onestop workflows, all actions whether performed by a user or automated is configured as a task.

#### Forms

A form is a digital version of a paper form that is completed and submitted over the internet. Onestop allows you to create forms used in your processes with the use of a form builder.


# The Basics of a Service

A service in Onestop is a representation of your automated process and all its inputs and outputs. This includes a workflow, input forms, data records, notifications, billing information and output documents.

## Creating a new Service

You can create a service in onestop in 3 ways:

* **Add a new service from Scratch**: You configure a new service from the ground up.
* I**nstall from a system Pre-built Template**: Onestop SaaS comes with a package of prebuilt templates you can select and install from.
* **Import from a File**: You can import a service template exported from another database or organization.

### Adding a new Service Scratch

To create a new service:

* Click on the "Services" button in the main menu, and then click on the “Create New” button.

&#x20;                        <img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F81rwFXVucKgqJEWZUc9z%2Fimage.png?alt=media&amp;token=198df9f4-5c01-4322-bb40-9fa890dec36f" alt="" data-size="original">

* This will open a popup form for you to provide information about the service.

&#x20;                            ![](https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FNMllg6J9aj3Rj1sq3onG%2Fimage.png?alt=media\&token=070490d6-f62d-4ac7-969f-a45f8e1c3a1e)

* Provide a name and description for the service
* Choose the portal where you want the service to be deployed
* Click on the Save button.

&#x20;                             ![](https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FC4pS8Gv7Mr4TzOCcYkIH%2Fimage.png?alt=media\&token=185601f6-3730-4d95-aaad-d489fbb47494)

* You will be redirected to the service builder where you can manage everything about the service. This includes creating and managing:
  * The workflow
  * Submission, Registration and Task forms
  * Billing rules
  * Document templates
  * Team access to workflow tasks


# Building the Workflow

A service must have a workflow. Onestop gives you a powerful workflow builder that allows you to add, update and delete steps in your workflow.&#x20;

Each step in your workflow is a task and is configured through various fields available, allowing you to build out a template for each and every task in your workflow.

By design, Onestop will always add a mandatory "Form Submission" step to your workflow that marks the beginning of a process. Currently, only form submissions can kickstart a workflow but we are working on expanding this functionality with time.

### Task Types

Onestop uses the BPMN paradigm to model workflows and consequently supports six types of nodes/steps you can add to a workflow:

1. User Task

   A user task is a task in the workflow process that must be executed by a user. A user can either be a human being or an AI bot. For more information on the supported user tasks in Onestop go to the [User Task types section](/managing-services/building-the-workflow/user-task-types).&#x20;
2. Service Task

   A service task is a task that carries out an automated action and thus requires no user input or interaction. For more information on the supported automated actions in Onestop go to the [Service Task types section](/managing-services/building-the-workflow/service-task-types).&#x20;
3. Split

   A Split task is a node in your workflow that makes a decision on the next path of the workflow based on various input. In Onestop, split nodes make decisions based on input from submission forms and/or task forms that have been filled in by users in previous steps. These conditions are called activation conditions in Onestop and will be discussed later. A split node with node activation conditions set will result in all outgoing paths of a workflow being enabled during the workflow process.
4. Merge

   A merge task is a node that merges different paths back to one shared path. The merge can be thought of as the opposite of a split.
5. Job

   A Job Task is a node that performs a scheduled task to be automatically executed at a specified time.
6. End

   An end node represents the last step in the workflow and marks the end of that workflow.


# Adding a step to your workflow

To add a step to your workflow, make sure you have opened the service whose workflow you want to edit and then:

* On the side menu, select and drag a task type

&#x20;                      ![](https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FHhnYhOCahXHIu3PuKshW%2Fimage.png?alt=media\&token=80445783-7a6f-4814-92ea-148da0b3eefa)

* Drag the item to the canvas area.
* For a User task type, a dialog appears for you to choose the specific type of action you would want a user to take at this step. Choose a task type and enter a title for the step.

&#x20;                                 ![](https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FEIVLGs2SlRyW45ocTwd0%2Fimage.png?alt=media\&token=a05ba61c-f2e1-417a-a9e3-15c8fe99c23b)

* For more information on the supported user task types, [click here](/managing-services/building-the-workflow/user-task-types).
* For a Service task type, a dialog appears for you to choose the specific automated action you would want to be executed at this step. Choose a task type and enter a title for the step.

&#x20;                                   ![](https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FfUTB7GIcik6BjMAuGWjY%2Fimage.png?alt=media\&token=361c11e7-5c68-4ea5-ba4c-122ec9b53617)

* For more information on the supported service task types, [click here](/managing-services/building-the-workflow/service-task-types).


# User Task Types

### Forward Transition Task

A forward transition task is a user task that simply activates the next step in the workflow. In other words, it moves the workflow from one step to the next.

### Assessment Task

An assessment task avails an assessment form to a worker or client for them to be able to provide some input before the workflow can proceed.

### Digital Signing Task

A digital signing task allows users to sign a document generated by OneStop using legally binding digital signatures by authorized providers such as [Docusign](https://docusign.com/).&#x20;

OneStop currently only supports [Docusign](https://admin-docs.onestop.site/managing-services/building-the-workflow/www.docusign.com) by default.

It is important to note that all signing tasks will incurr an extra charge for every signature made by your users.

### Billing Task

A billing task allows a worker to generate an invoice for payment.

### Payment Task

A payment task is a user task that requires a payment to be made and must be preceded by a billing task, whether user based or automated.

### Payment Confirmation Task

A payment confirmation task is a task configured when a manual payment is made e.g. a payment receipt is uploaded or when some manual confirmation may need to be done for a payment.

### Resubmission Task

A resubmission task allows for a submission linked to a wokflow instance to be resubmitted by the user that submitted the initial information.


# Service Task Types

### Document Generation

This automated task generates a document such as a permit, letter, license etc.

### Notification

Sends an email or SMS notification based on a set of available configurations

### Update Dataset

Adds records to a Dataset with input from submission and/or task forms.

### Generate Bill

Automatically Generates an invoice to be paid.

### Artificial Intelligence Task

This type uses generative AI to perform a task based on what you tell the AI agent to do when configuring it.


# Events

## Intermediate Events

Intermediate Events allow a workflow to listen for, or dispatch an event at a specific point in its execution — enabling communication between workflows, timed delays, or synchronization with external triggers.

To add an Intermediate Event to a workflow:

1. Drag the **Intermediate Event** element from the toolbar onto the workflow canvas.
2. Enter a **Task Title** to label the step (e.g., "Test").
3. Under **Create or select an event code**, choose the **Event Direction**:
   * **Catch (Listens to event)** – The workflow pauses at this step until the specified event is received.
   * **Throw (Dispatches event)** – The workflow sends out the specified event to notify other listening steps or workflows.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FvrTrj3BT4f1WupwZnPJm%2Fimage.png?alt=media&amp;token=6b9616c4-6b29-4427-9e0d-412086709b8b" alt=""><figcaption></figcaption></figure>

## Configuring a Catch Event

When **Catch** is selected, additional fields appear:

| Field          | Description                                                                                                        |
| -------------- | ------------------------------------------------------------------------------------------------------------------ |
| **Title**      | A descriptive name for this event configuration (e.g., "New Event Config").                                        |
| **Event Code** | The unique code the step listens for. You can select an existing event code from the dropdown or create a new one. |

The Event Code dropdown displays previously configured codes along with their type, shown in parentheses:

* **Signal** – A custom event code manually triggered elsewhere in the workflow (e.g., *Event A – A (Signal)*, *Event B – B (Signal)*).
* **Timer** – A time-based event that fires automatically after a set duration (e.g., *30 SECONDS WAIT – WAIT-30 (Timer)*).

You can also create a brand-new event code directly from this field using the **+** button beside the Event Code dropdown.

## Configuring a Throw Event

When **Throw** is selected, the step is configured to dispatch a chosen event code, which any corresponding **Catch** step elsewhere in the workflow (or in another workflow) can listen for.

#### Notes

* Event codes can be reused across multiple Catch/Throw steps to synchronize different parts of a workflow, or even across separate workflows.
* Timer-based events (like "30 SECONDS WAIT") are useful for introducing scheduled delays without requiring an external trigger.
* Once the required fields are complete, click **Continue** to save the Intermediate Event configuration.

## Creating a New Event Code

If the event code you need doesn't already exist, you can create one directly from the **Event Code** dropdown using the **+** button. This opens the **Event Code** configuration dialog.

Provide the following configuration details:

| Field          | Description                                                                                                                           |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| **Name**       | A descriptive, human-readable name for the event code (e.g., "Order Approved").                                                       |
| **Code**       | The unique identifier used internally to reference this event (e.g., "APPROVED").                                                     |
| **Event Type** | The category of event this code represents. Selecting an event type may reveal additional configuration fields specific to that type. |

**Event Type Options**

The **Event Type** dropdown offers the following options:

| Event Type       | Description                                                                                                                                      |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Timer**        | Fires automatically after a defined duration or schedule, rather than waiting on a manual trigger. Supports ISO 8601 and Cron-based expressions. |
| **Error**        | Fires when a specific error condition occurs within the workflow, allowing the process to catch and handle exceptions.                           |
| **Signal**       | A manually-triggered event, dispatched by a **Throw** step elsewhere in a workflow and picked up by a matching **Catch** step.                   |
| **Message**      | Represents an event triggered by an incoming message, typically used for communication between processes or external systems.                    |
| **Escalation**   | Signals that a situation requires attention beyond the normal flow, often used to notify a parent process or supervisor step.                    |
| **Compensation** | Triggers a compensating action to undo or roll back the effects of a previously completed step, typically used in error-recovery scenarios.      |

Once the required fields (**Name**, **Code**, and **Event Type**) are filled in, click **SAVE** to create the event code. It will then be available for selection in the Event Code dropdown for any Intermediate or Boundary Event across your workflows.

> **Note:** Depending on the **Event Type** selected, additional configuration fields specific to that type (e.g., timer expressions for Timer events) will appear before saving.

## Signal Events

Signal Events are a type of event code used to synchronize activity between steps in a workflow — or between separate workflows entirely. Unlike Timer events, which fire automatically after a set duration, Signal events only fire when explicitly dispatched by a **Throw** step.

**Selecting a Signal Event Code**

Once a Signal event code has been created, it becomes available in the **Event Code** dropdown for any Event step. In the example above:

* **Event Direction** is set to **Catch (Listens to event)**.
* The **Event Code** field

Once an event code is selected, the field provides quick-access controls:

| Icon         | Action                                                                                                   |
| ------------ | -------------------------------------------------------------------------------------------------------- |
| ✏️ (Edit)    | Opens the Event Code configuration dialog to modify the Name, Code, or Event Type of the selected event. |
| ✕ (Clear)    | Removes the currently selected event code from the field.                                                |
| ▼ (Dropdown) | Reopens the list of available event codes to choose a different one.                                     |
| **+** (Add)  | Opens the Event Code configuration dialog to create a brand-new event code.                              |

**How Signal Events Work**

1. A **Catch** step configured with a Signal event code (e.g., `A`) will pause the workflow at that point until the matching signal is received.
2. A **Throw** step — placed elsewhere in the same workflow, or in a different workflow — is configured with the same event code to dispatch the signal.
3. When the Throw step executes, any Catch step listening for that same event code resumes execution.

This makes Signal events useful for:

* Coordinating steps across parallel branches of a workflow.
* Synchronizing two or more separate workflows that need to communicate with one another.
* Pausing a process until a specific business condition or external action is signaled.

Once the Event Code is selected, click **CONTINUE** to finalize the Event configuration.

## Timer Events

Timer Events are a type of event code that fire automatically after a defined period of time, without requiring a manual trigger. They're ideal for introducing delays, deadlines, or recurring scheduled actions into a workflow.

When an Event uses an Event Code configured as **Timer** (e.g., `WAIT-30 | 30 SECONDS WAIT (Timer)`), a set of additional fields appears to define exactly when and how the timer fires.

### **Countdown From**

This field determines the reference point the timer counts down from. Available option shown:

* **Task Created** – The countdown begins from the moment the task/step is created.
* **Task Assigned** – The countdown begins from the moment the task/step is assigned.
* **Task Started** – The countdown begins from the moment the task/step is started.

### **Timer Expression Type**

You can define the timer's schedule using one of two expression types:

* **ISO 8601** – Best suited for expressing durations, periods, and time intervals relative to a start point.
* **Cron** – Best suited for expressing recurring points in time (e.g., every day at midnight, every Tuesday at 10am).

#### **ISO 8601 Expressions**

When **ISO 8601** is selected, enter a **Timer Expression** using one of the following formats:

* **A duration expression** — represents a length of time (e.g., `PT1H` for 1 hour).
* **A time interval expression** — represents a span between two points, in one of four forms:

| Format               | Example                                     | Meaning                                                                                                                      |
| -------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `<start>/<end>`      | `2007-03-01T13:00:00Z/2008-05-11T15:30:00Z` | A fixed interval between two dates.                                                                                          |
| `<start>/<duration>` | `2007-03-01T13:00:00Z/PT1H`                 | 1 hour after the given start date/time.                                                                                      |
| `<duration>/<end>`   | `PT1H/2007-03-01T13:00:00Z`                 | 1 hour before the given end date/time.                                                                                       |
| `<duration>` only    | `PT1M`                                      | Counts from the task's Created/Assigned/Started date (per the **Countdown From** field) — e.g., 1 month after task creation. |

#### **Advanced: Recurring Intervals**

Toggling **Use advanced ISO 8601 Interval expression?** allows you to define a more complex timer e.g. a **recurring** timer. Recurring timers are defined by prefixing the interval with `R` and an optional repeat count. If no count is given, the recurrence is unbounded (repeats forever).

Examples:

* `R2/PT1H` – Fires 1 hour after task creation, then repeats 2 more times, 1 hour apart (3 total events).
* `R/PT1H` – Fires 1 hour after task creation, then repeats indefinitely, 1 hour apart.
* `R2/2026-01-01T00:00:00/PT1H` – Fires 1 hour after midnight on 2026-01-01, then repeats 2 more times, 1 hour apart (3 total events).
* `R2/PT1H/2026-01-01T00:00:00` – Fires 1 hour before midnight on 2026-01-01, then repeats 2 more times, 1 hour apart (3 total events).

> **Important:** To stop an unlimited (`R/...`) recurring timer that's already running, you must reconfigure the expression — this change will apply to all active process instances affected.
>
> ISO 8601 expressions are best for durations and periods. To schedule a **recurring point in time** (e.g., every day at midnight, every Tuesday at 10am), use a **Cron** expression instead.

#### **Cron Expressions**

When **Cron** is selected as the Timer Expression Type, enter a **Cron Expression** to define a recurring schedule.

Supported formats:

| Format                                                   | Example             | Meaning                                                |
| -------------------------------------------------------- | ------------------- | ------------------------------------------------------ |
| `minute hour day_of_month month day_of_week`             | `0 0 * * *`         | Every day at midnight                                  |
| `second minute hour day_of_month month day_of_week`      | `30 0 0 * * *`      | Every day at midnight and 30 seconds                   |
| `second minute hour day_of_month month day_of_week year` | `30 0 0 * * * 2027` | Every day at midnight and 30 seconds, in the year 2027 |

**Nonstandard predefined scheduling keywords** (`@` expressions) are also supported:

| Keyword     | Meaning              |
| ----------- | -------------------- |
| `@midnight` | Everyday at midnight |
| `@hourly`   | Every hour           |
| `@daily`    | Everyday             |
| `@weekly`   | Every week           |
| `@monthly`  | Every month          |
| `@yearly`   | Every year           |

Once the timer configuration is complete, click **CONTINUE** to save the Intermediate Event step.

## Boundary Events

Boundary Events attach to a specific activity step e.g. a User Task or Call Activity step and let the workflow listen for an event *while that step is active*. When the event fires, a designated target node is activated — either alongside the original task or, if configured as interrupting, in place of it. Boundary events only truly work when a task step takes time to be executed e.g. a human task, a call activity, a prolonged syncrhonous service task etc.

**Accessing Boundary Events**

Boundary Events are configured from within a task step's settings:

1. Open the task step.
2. Navigate to the **EVENTS** tab of the task.
3. Here you'll find an explanation of how boundary events work
4. Click **+ ADD BOUNDARY EVENT** to create a new one.

**Configuring a Boundary Event**

Clicking **ADD BOUNDARY EVENT** opens the **Boundary Event Configuration** dialog, with the following fields:

| Field                            | Description                                                                                                                                                                                                                               |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Title**                        | A descriptive name for this boundary event (e.g., "New Boundary Event").                                                                                                                                                                  |
| **Target Node**                  | The step that will be activated when the event fires (e.g., "Reminder Notification").                                                                                                                                                     |
| **Event Configuration**          | The event configuration this boundary event listens for. Select an existing code or create a new one, just like with Intermediate Events. A boundary event configuration can only be a catch event.                                       |
| **Enabled**                      | Toggle to activate or deactivate this boundary event without deleting it.                                                                                                                                                                 |
| **Interrupting Boundary Event?** | If enabled, the original task (e.g., "Approve") is cancelled once the event fires and the target node is activated instead. If disabled (non-interrupting), the target node runs *alongside* the original task, which continues normally. |

Once configured, click **SAVE**.

**Result**

After saving, the boundary event appears as a small icon attached to the task step on the workflow canvas (shown as a dashed line connecting to the target node). The **EVENTS** tab also lists a summary of each configured boundary event, for example:

> **New Boundary Event** — Activates **Reminder Notification** on catching the **WAIT-30 - Timer** event.

From here, you can:

* **EDIT** — Reopen the Boundary Event Configuration dialog to make changes.
* **DELETE** — Remove the boundary event entirely.

You can attach multiple boundary events to a single task by repeating the **+ ADD BOUNDARY EVENT** process.

**Use Cases**

* **Non-interrupting** — Send a reminder notification while the user still has time to complete the original task (e.g., a "30 seconds wait" timer triggering a reminder without cancelling the Approve task).
* **Interrupting** — Automatically escalate or cancel a task if it isn't completed within a certain time, or if a specific signal/error event is received.

***


# Managing Stages

“Life is in different stages. Every stage of life is the foundation for the next stage of life. Every stage of life must be fully-lived.” ― Lailah Gifty Akita

### What is a Workflow Stage?

In Onestop, a workflow stage is a collection of tasks or steps that are related logically in your workflow. For example, an on-boarding stage in a sales workflow could have a tasks for 1) validate client data, confirm availability and sign sales contract. These 3 tasks are logically related in that they need to all be done before a client can be on-boarded in this example.

A step or task in a workflow refers to an individual action, task, or activity that needs to be completed as part of the overall process. While a "stage" in a workflow might encompass a broader phase or a group of related activities, a "step" is typically more granular and represents a single, specific action within a stage.

Stages are not mandatory in Onestop for your workflows but they are powerful tools in progress tracking and reports for your workflow. You can tailor workflow stages to meet your business and reporting needs effectively.

### Creating a Stage

To add create a stage in your workflow, make sure you have opened the service whose workflow you want to edit and then:

* Click on the "Workflow Stages" button
* In the drop-down that appears, click on the "Create New Stage" button. If you already have previous stages created, click on "Add Stage":

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F36IF9i1piZ6JXJFi2avi%2FScreenshot%20from%202023-10-25%2016-20-51.png?alt=media&amp;token=f2b2dae5-2df8-4eda-9214-3d8440b3248b" alt=""><figcaption></figcaption></figure>

* Provide the following details in the form that appears:
  * Stage Name: A name for the stage
  * Stage Type: The type of stage this represents
  * Percentage Progress: The percentage of progress (0-100). This value will determine how far a long a process is before being completed. This is an important metric that can be used by management or your team in general for reporting and decision making. You can align this value with your organization's service charter
  * Landing Stage: Indicate whether or not this stage will be the landing stage for the process when a user is look at a list of different process instances / submissions.
  * Active: Whether or not the stage is active.

<div data-full-width="false"><figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FQsVmz9TvnldsNnlFsZqz%2FScreenshot%20from%202023-10-25%2016-30-40.png?alt=media&amp;token=4c349d33-ceea-4812-a517-51029a938347" alt="" width="563"><figcaption></figcaption></figure></div>

* Click Save
* After creating a stage(s). You need to link each task in your workflow to a specific stage if applicable.

### Linking a Task to a Stage

To link a task to a stage, do the following:

* Make sure you have opened the service whose workflow you want to modify
* Select a task by clicking on it in the flowchart
* A form should appear on the right side of the screen, allowing you to edit task details
* Click on the "Stage Settings" tab
* Select the stage you want to link this task to in the field labeled "Choose a Stage"
* Click the Save button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FZ3q4GcNjlrny6lgSspaX%2FScreenshot%20from%202023-10-25%2016-36-45.png?alt=media&amp;token=a69faa60-cd0f-4f54-9ed1-643eceb06db2" alt=""><figcaption></figcaption></figure>

* Repeat these steps for all the tasks you want to link to a stage.


# Tutorial - Example Workflow

This page will take us through a simple workflow that we will build from scratch using Onestop


# Managing Forms

Use forms to collect data from users.

A form is a digital version of a paper form that is completed and submitted over the internet. Onestop allows you to create forms used in your processes with the use of a form builder.

Types of Forms

There are 4 main types of forms in Onestop:

### Submission Forms

A submission form in OneStop is a form that allows users to submit data and initiate a workflow process. Submission forms are the main entry points to OneStop workflows.

#### Creating/Edit a Submission Form

To create or edit a submission form:

* Open a service
* Click on the "Submission Forms" tab

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FZSg3Zuf3vUr6VZS8Bn8t%2Fimage.png?alt=media&amp;token=dd34b725-5227-4fca-bb40-612c791572d1" alt=""><figcaption></figcaption></figure>

* To create a new form, click on the "Add New" button

&#x20;                               &#x20;

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F6UR3LKmI26W1eAXjOHAp%2Fimage.png?alt=media&amp;token=f8156afb-16bb-4ca6-8999-9d95681905e8" alt=""><figcaption></figcaption></figure>

* Provide the form title, description and submit text.
* Select whether the form will require a logged in user to access it or not
* If login is not required, your form will be publicly accessible to anyone who will have the [submission link](/managing-services/managing-forms/sharing-form-submission-links).
* To edit an existing form, click on the "Edit Form" button next to the form title

&#x20;                                      &#x20;

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FIXvtCWZkSDTEAH7eKQTP%2Fimage.png?alt=media&amp;token=7b915df3-f44b-4ad1-b05d-32b09df60669" alt=""><figcaption></figcaption></figure>

* You can now use the form builder interface that appears to [manage all aspects of your form](/managing-services/managing-forms/using-the-form-builder).

### Registration Forms

A registration form in OneStop is a form that is used to register information about your customers before they can access a service and its respective workflow process. Examples could include:

* a Parents Registration form for a School Enrollment Service
* an Engineers Registration form for an Engineers training Service
* And many more...

### Assessment Forms

An assessment form in OneStop is a form that is used by workers (Staff users) to provide information that needs to be captured during an assessment task e.g. Inspections sheets, General comment sheet etc.


# Using the Form Builder

## Adding Fields to a Form

The form builder interface has a side menu showing different [field types](/managing-services/managing-forms/using-the-form-builder/form-field-types).

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FFiQtp0enOFzv3M5RXl9A%2Fimage.png?alt=media&amp;token=77c7b039-30f0-495e-853a-a46070a1f695" alt=""><figcaption></figcaption></figure>

To add fields to the form:

* Click on a field type and drag it to the drop area as shown below.
* Release the button to drop the field
* A field of that field type will be created and added to the form.           &#x20;

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FnhjlzFJsGCykRplXbhRG%2Fimage.png?alt=media&amp;token=f34b2050-2cb0-4c4a-adcc-f77cd3081908" alt=""><figcaption><p>Drag a field type to this area in order to create a new field on the form</p></figcaption></figure>

### Field Settings

Once a field is added to your form, you can configure it according to the data you want to collect for each field.

To configure a field, click on the field settings icon on the top left corner of the field as shown below:                     &#x20;

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fg2c6HGCX0hLFTg7KjI0B%2Fimage.png?alt=media&amp;token=f6e65c13-a042-4516-9f41-407bba7351dd" alt=""><figcaption><p>Field Settings icon</p></figcaption></figure>

A field settings form appears that has 3 main sections:

* General Settings

  The general settings allow you to:

  * Provide/Modify the Field Label
  * Provide/Modify the Field description
  * Provide/Modify the Help text for the field
  * Make a field editable or read-only
* Validation Settings

  Validation settings allow you to:

  * Make a field required
  * Make a field required before a draft can be saved
  * Add a unique constraint to the field
  * Add [Custom Validators](/managing-services/managing-forms/using-the-form-builder/field-validators) for a field
* Field Type Settings

  Each field has its own unique settings depending on the field type. Go to [Field Types](/managing-services/managing-forms/using-the-form-builder/form-field-types) for more information.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F3rU7OHiXWuxyZRUtnzI1%2Fimage.png?alt=media&amp;token=43d570ca-63d0-4c75-ae3c-8db10f8e3d21" alt=""><figcaption></figcaption></figure>


# Form Field Types

This section details the different types of fields supported in the form builder and their respective settings

## Single Line Text Field

The single line text field is used to capture short text such as names, titles etc.

### Settings

Settings that are specific to a single line text field are:

* *Placeholder Text*: The placeholder text to appear on the field input
* *Default Value*: A default value for the field
* *Character Length*: The maximum number of characters allowed for the field.

## Text Area

The text area field is used to when you need the user to provide a larger amount of information, such as a description or a detailed answer to a question.

### Settings

Available settings are the [same as the single line text field](#settings).

## Email

The email field is used to collect an email address from a user. It includes built-in validation to ensure that the user enters a properly formatted email address.

### Settings

All settings under the single line text field plus:

* *CC this address:* Setting that copies the provided email address in all email notifications sent to the user who submits the form.

## Phone

The phone field is used to collect a phone number from a user. The phone field is formatted to accept and validate phone numbers in an international format, allowing users to select the country code and enter their number.

### Settings

No type specific settings are available for a phone number field.

## Drop Down Selection

This field is useful when you need to present the user with a limited number of predefined options, such as a list of countries, states, or products.

### Settings

* *Default Value*: A default value for the selection field
* *Data Source*: The data source for a selection field can be:
  * Simple: A list of options separated by commas.
  * Options: A list of options, with each option having a value and a label. When this option is selected, add each a value and label for each option you have and click the save button.
  * Dataset: A list of options retrieved from a dataset, either locally or remotely via a REST API call

## Checkbox

The checkbox field is used to present one value to the user, which they can check one or uncheck.

### Settings

Available settings are the [same as the drop down selection field](#settings-4).

## Checkbox Multiple

The checkbox multiple field is used to present a list of options to the user, from which they can select one or more.

### Settings

Available settings are the [same as the drop down selection field](#settings-4).

## Radio Button

The radio button field allows the user to select a single option from a list of mutually exclusive options. It is represented by a small round button that can be clicked by the user to indicate their selection.

### Settings

Available settings are the [same as the drop down selection field](#settings-4).

## File upload

The file upload field allows the user to attach a single file to the form data.

### Settings

* *Allowed File Extensions:* Limits file extensions to the provided list.
* *Blocked File Extensions:* Causes form to reject any files with an extension present in the provided list.
* *Maximum File Size:* The maximum allowed file size in MB
* *Allow users to view uploaded files within the browser:* Allows viewers of the submission data to open and view the file on the browser without downloading it

## Multiple File Upload

The multiple file upload field allows the user to attach an unlimited number of files.&#x20;

### Settings

Available settings are the [same as the file upload field](#settings-8).

## Photo

The photo field allows a user to attach an image.

### Settings

Available settings are the [same as the file upload field](#settings-8).

## Date Picker

The date picker field allows users to select a date from a calendar-like interface.

### Settings

* *Default Value*
* *Settings for latest possible value:* e.g. 1 year will limit date to 1 year after the day of entry, -1 year will limit date to 1 year before day of entry
* *Settings for earliest possible value:* e.g. 1 year will limit date to 1 year before day of entry, -1 year will limit date to 1 year after day of entry

## Number

The number field allows users to input numerical values.

### Settings

* *Default Value*
* *Maximum Value*
* *Minimum Value*

## URL

The URL field allows users to input a web address or a URL (Uniform Resource Locator). The field will validate that the input from the user is a valid URL.

### Settings

No type specific settings are available for a URL field.

## Geo Coordinates

The geo-coordinates field allows users to input latitude and longitude coordinates.

### Settings

No type specific settings are available for a Geo coordinates field.

## Dynamic Matrix

The dynamic matrix field allows users to input multiple values into a grid-like structure. The number of rows in the matrix can change as users can dynamically add or remove rows.

The dynamic matrix field is best suited for data that is a list of unknown number of items with each item having a specific structure.

For example, you could create a dynamic matrix field to capture a user's Education history, where the user will provide the year, institution name and grade for each educational institution they have attended.

### Settings

* *Starting Rows*

  The number of rows that should initially appear for the user to fill in when the form is first loaded.
* *Minimum Rows*

  The minimum number of rows allowed for the field.
* *Add button text*

  Custom text to appear on the add button e.g. Add Qualification
* *Columns*

  The columns for the field. This is the structure of each data item in the list. To add a column, click on the "Add Column Input" button and provide:

  * Input Name
  * Input Label
  * Default Value
  * Field Type

## Form Submissions Selection

The form submissions selection field is a user interface element that allows users to select one or more options from a list of previously submitted form entries.

### Settings

* *Submissions Form*

  *The form whose submissions should appear in the list of options.*
* *Submission Label Field*

  *The field in the selected submissions form that will be used to display each option. For example, you could select a name field in a submission form that will result in the list of submissions being displayed as the list of each name provided in each submission. The default behaviour will show a list of each submission's reference number.*
* *Show Submissions for Logged In User Only*

  Selecting this option will ensure only submissions made by the logged in user will appear in the list of submissions to choose from.
* *Use selected submission data to Update Linked Fields*

  Selecting this option results in all [linked fields](/managing-services/managing-forms/using-the-form-builder/linked-fields) within the same form, picking their linked values from the submission that a user selects on this field.

## Signature Pad

The signature pad field allows users to sign the submission form by writing or drawing on the screen using their finger or a stylus or by uploading a scanned signature.

{% hint style="info" %}
It is important to not that a digitized signature is the most insecure way of capturing signatures online and should only be used for non critical scenarios with minor or no legal consequences.

For signing scenarios that require high security and compliance requirements, you should create a [digital signing task](/managing-services/building-the-workflow/user-task-types)
{% endhint %}

### Settings

No type specific settings are available for a Signature Pad field.

## Page Break

The page break is not a field but is a formatting element that is used to indicate where a form should be divided into separate pages when being filled in and when submission data is being viewed.

### Settings

No type specific settings are available for a page break.

## Section Break

The section break is not a field but is a formatting element that is used to divide the form into sections.

### Settings

No type specific settings are available for a section break.


# Field Validators

Field validators are used to enable validation of field values entered by users against your own datasets.

Field validators allow you to configure custom validation in a form where input entered by users for that form is validated against your own datasets.

Field validators require you to have an existing [dataset](/databanks/creating-datasets) to validate values against.

To create a field validator:

* Go to the form builder and click on the [settings icon](/managing-services/managing-forms/using-the-form-builder#field-settings) for the field you want to edit.
* Click on the validation settings tab.
* Click on the "Add Custom Validator" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FokWaVjVj96adO2mXl73g%2Fimage.png?alt=media&amp;token=14ba2be7-81e5-45de-9414-e31c74f40cb5" alt=""><figcaption></figcaption></figure>

* The Custom Field Validator form appears

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FEjmuSqp6UfbVU4SDfzkS%2Fimage.png?alt=media&amp;token=d1b3f858-3021-4448-8d03-4630744bbb9b" alt=""><figcaption></figcaption></figure>

* Provide a name for the validator
* Create or select a [dataset connection](/databanks/using-datasets#read-dataset-connection)
* Choose a lookup column for the validator. The lookup column is the field in the dataset that the form field value will be compared against.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F5DR5ltlHx1empKrj7mM0%2Fimage.png?alt=media&amp;token=c061c8ab-a62f-4c02-9d04-745352e22656" alt=""><figcaption></figcaption></figure>

* Provide a custom error message to be displayed to the user when the validation fails.
* Click on the save button.
* You can add as many validators as you require. This ensures you can validate that a user provided value on the form is present in multiple datasets.


# Field Dependencies

Field dependencies refer to the relationship between fields in a form.

Field dependencies refer to the relationship between fields in a form. These dependencies are used to control the visibility, accessibility, or content of one or more form fields based on the value or selection of another field.

To use field dependencies, you must of course first ensure that your form has fields setup.

To show how field dependencies work in Onestop we are going to use a simple example:

> We want to create 3 fields for a Burger ordering form. One called 'Extras', the other called 'Sauce' and the other called 'Cheese'.&#x20;
>
> Extras will have 2 choices: Cheese and Sauce.
>
> When a user selects Cheese as the extra, the Cheese field should appear.
>
> When a user selects Sauce as an extra, the Sauce field appears.
>
> These are two dependencies.

To create the dependencies for this example, follow the steps below:

* Create the 3 fields as [drop down fields](/managing-services/managing-forms/using-the-form-builder#adding-fields-to-a-form).
* Choose the Options data source setting on the drop down field and then [add options](/managing-services/managing-forms/using-the-form-builder/form-field-types#settings-4) to each drop down field. For our case we will have:

| Field  | Label         | Value          |
| ------ | ------------- | -------------- |
| Extras | Cheese        | cheese         |
|        | Sauce         | sauce          |
| Cheese | Mozarella     | mozarella      |
|        | Cheddar       | cheddar        |
| Sauce  | Ketchup       | ketchup        |
|        | Chilli        | chilli         |
|        | Honey Mustard | honey\_mustard |

{% hint style="info" %}
Its important to note that field dependencies will work with any type of data source, including local and remote datasets.
{% endhint %}

* Once you have your fields setup, you are now ready to setup field dependencies.
* Click on the "Field Dependencies" icon at the top right of the form builder.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FPP75wr6MDBksJiIpd60z%2Fimage.png?alt=media&amp;token=1bc25fff-4ae5-4178-90d6-22dc3135baee" alt=""><figcaption><p>Field dependencies icon</p></figcaption></figure>

* The field dependencies interface appears as below:

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F9gRr59oiGXatzwGVi6M2%2Fimage.png?alt=media&amp;token=4c5d7921-0f16-4044-8dd9-f605083360ff" alt=""><figcaption><p>Adding a new field dependency</p></figcaption></figure>

* Click on "Add New Field Dependency"
* The field dependency form should appear.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fjuo7lpWlD4kZVPPtrd7c%2Fimage.png?alt=media&amp;token=b3bf178e-a6a4-4a11-9381-ec3da49bf455" alt=""><figcaption><p>Field dependency form with add condition and add action buttons highlighted</p></figcaption></figure>

* As you can see, the form has 3 sections:
  * *The dependency logic operator*

    This determines how the conditions should result in the dependency being applied to the form.

    Leave the dependency to be applied if all conditions are met. For different business requirements, you can alternatively choose "any of the conditions are met"
  * *Conditions*

    These are the conditions that will be trigger the dependency. Each condition you add should have:

    * A condition field: Any field that is set as a condition field, instantly becomes a controlling field in triggering the dependency.
    * A condition operator
    * A condition value.
  * Actions

    These are the dependency actions that should be applied when the condition logic is met. Each action should have:

    * An action: The action can be one of 4:
      * Show dependent field
      * Hide dependent field
      * Restrict value of dependent field to preset values
      * Make dependent field required
    * A dependent field: The field to which the action will be applied.
* So back to our example, we have 2 dependencies. Set them up as below:
  * Dependency 1
    * Conditions:
      * Field: **Extras**
      * Operator: **Is Equal to**
      * Value: **Cheese**
    * Actions:
      * Action: **Show dependent field**
      * Dependent Field: **Cheese**
  * Dependency 2
    * Conditions:
      * Field: **Extras**
      * Operator: **Is Equal to**
      * Value: **Sauce**
    * Actions:
      * Action: **Show dependent field**
      * Dependent Field: **Sauce**
* You should now have 2 dependencies appearing as shown below. For both dependencies, '**Extras**' is our controlling field.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F31KLpuAtSx7OxynJUjFg%2Fimage.png?alt=media&amp;token=a247b98f-947a-4172-8e31-ce2237c60a33" alt=""><figcaption><p>Listed dependencies</p></figcaption></figure>

* Your form now has dependencies set based on the value given in the Extras field.


# Form Submission Identifiers

Form submission identifiers are configurations you provide to dictate how reference numbers for form submissions will be generated.

To manage the Submission identifier for a form, click on the "Form Submission Identifier" at the top right of the form builder.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F0c7yZcHoWtuedAgStDyC%2Fimage.png?alt=media&amp;token=6a3eb0a2-357c-4687-a0ae-f9075d3d4953" alt=""><figcaption><p>Form Submission Identifier</p></figcaption></figure>

You can make the following changes to the Identifier settings:

* **Name**: An assigned name to the configuration
* **Next Number:** Set the numeric value that should start or override the numbering sequence. This does not apply for alphanumeric identifiers.
* **Number Increment:** Provide the amount by which the numbering sequence will increase based on the previously generated record. For example, if a record is generated with number 01, set number increment to 1 if you want the next record to be 02. This does not apply for alphanumeric identifiers.
* **Next Alphanumeric Number:** Set the alphanumeric text that should start or override the numbering sequence. This does not apply for numeric identifiers.
* **Number Padding:** Use this setting to configure the padding of the generated number. The number will be padded with zeros e.g. a padding of 3 will result in a number such as 001, 002 etc.
* **Prefix:** Set the prefix of generated identifiers. You can also apply some tags available on Onestop.
* **Suffix:** Set the suffix of generated identifiers. You can also apply some tags available on Onestop.
* Tag options for the Prefix and Suffix are:
  * {MonthTextFull}
  * {MonthTextShort}
  * {MonthNumeric}
  * {YearFull}
  * {YearShort}
  * {DayTextFull}
  * {DayTextShort}
  * {DayNumeric}


# Field Tags

Every field in a Onestop form has a unique tag that can be referenced in different parts when configuring your service e.g. In price equations.

To get the tag for a field:

* Open the field in the form build and click on its settings icon.
* Click on the hamburger menu next to the field title input field and click on "Copy Field Tag".
* The tag will be copied to your clipboard.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fg8TotcmM8G3iyLlVRGIz%2Ffield-tag-copy.png?alt=media&amp;token=a940bfd8-bea4-434b-9469-220bb1952fbc" alt=""><figcaption></figcaption></figure>


# Linked Fields

Linked fields allow you to create a form whose default field values can be retrieved from a previous submission of the same form or another form. This can be useful when you want to load default data from a user's previous submission and allow them to edit that data.

For example, you could have two processes, a membership request process and a membership renewal process. During a membership renewal, you may want the user's original request data to be loaded by default and have them change the details where necessary.

To implement linked fields:

* You need to ensure you have at least one [Form Submissions Selection](/managing-services/managing-forms/using-the-form-builder/form-field-types#form-submissions-selection) field that will allow the user to select a previous submission
* For each field you want to link to this previous submission, select a linked field that is present in the form chosen in step 1 above.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fjzz2rVSG1aYCbbqi8cRh%2Fimage.png?alt=media&amp;token=355465ab-c6fc-4e1a-a318-a602cdf25954" alt=""><figcaption></figcaption></figure>


# Sharing Form Submission Links

You can share form links from the service page by clicking on the "Share Form Links" button.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F85TbFLxnPgHLaijjuj9b%2Fimage.png?alt=media&amp;token=ce41f57c-36fc-43be-99da-96af5a89a8a6" alt=""><figcaption><p>Sharing Form</p></figcaption></figure>

You can also share by clicking on the share icon for a specific form in the form builder.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FDA8dBI5bdK76q1VKEOzL%2Fimage.png?alt=media&amp;token=e932196e-d156-44f0-b14f-4d0d44f4ef95" alt=""><figcaption><p>Sharing a Form</p></figcaption></figure>

You can then share the link on various channels as shown below:

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FPB2jYHuRRc16QiaI2cnF%2Fimage.png?alt=media&amp;token=4a80bd09-f46f-4d5b-93de-36f1b6201b32" alt=""><figcaption></figcaption></figure>


# Configuring Workflow Notifications

Workflow notifications alert users on the status of a workflow or task.

These notifications can be sent through email or text message, and are also present as in-application notifications within the onestop platform.

They can be used to automatically keep your customers and/or team members informed about the progress of tasks, deadlines, and any issues that may arise.

## Configuring Notifications

Notifications are configured in your service through the creation of notification templates for your workflow tasks.&#x20;

You can add notification templates for any workflow task or you could also decide to create a specific automated task to send notifications.

The workflow tasks are responsible for triggering the notification and notification templates are responsible for determining the content, recipients and type of the notification.

This separation of tasks and notification templates allows for flexibility in your workflow, as the same task can be used to send multiple different types of notifications.

### Creating a Notification Task

To create a notification task:

* Open your service
* Drag and drop the service task type to the workflow area.
* Give the task a title
* Chose the type for the task as "Send Notification"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FY8Twp7Upq6vL3JTsepYx%2Fimage.png?alt=media&amp;token=92f8d628-579a-40f4-aee9-fa456ad1d9cb" alt=""><figcaption><p>Creating a notification task</p></figcaption></figure>

### Adding Notification Templates to a task

Notification templates can be added to any task.

* Go to your workflow and click on the task that you want to add notification templates to
* In the task configuration form, click on the "Notification Templates" tab.
* Click on "Add Notification" or the plus button if you already have notifications.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FzHAbciwGOF08na9pdPFJ%2Fimage.png?alt=media&amp;token=81357581-2d8b-40fd-b2bb-1ef59e04fcf2" alt=""><figcaption></figcaption></figure>

* Click on the "Edit" button for the just added notification in order to configure it.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FkPfbBYjMzE4USDBQzra0%2Fimage.png?alt=media&amp;token=19a92c1f-cbb2-4433-a81a-dbe30020dbbd" alt=""><figcaption></figcaption></figure>

### Configuring a Notification Template

* When you click on the "Edit" button next to a notification template, the notification template form should appear.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FbIw9VUZz24CIon6MW0uj%2Fimage.png?alt=media&amp;token=593dde76-b0cb-40a1-8e0b-f87c036ce33e" alt=""><figcaption></figcaption></figure>

* The following settings can be configured:
  * *Subject*: The subject of the notification
  * *Body*: The message content for the notification
  * *Attachments*: The attachments to be included in the notification. These should be a list of "printed document" [context tags](/managing-services/context-tags) separated by an commas.
  * *Send To*: Whether to send the notification to the user who initiated the workflow (via form submission) or to team members with permission to access the workflow task
  * *Send When*: When to send the notification based on the task status.
    * **TO BE ASSIGNED**: Task needs to be assigned. The notification will automatically go out to all users that have permission to assign.
    * **TO BE PERFORMED**: Task needs to be worked on. If the task is not assigned to a specific user, all users with permission to perform the task will receive this notification.
    * **TO BE SUPERVISED**: Task needs to be supervised. This notification will be sent when a supervisor is selected during assignment.
    * **DONE**: Task is complete. A DONE task notification will be sent to the user who performed the task or the submission owner depending on who you set in the 'Send To' field. You can add additional users to include in the notification with the 'Send to Teams' field.
  * *Send To Teams*: Teams for recipients of this notification other than the submitter and workers with permission to execute, assign or supervise the task. This setting is helpful when you want a group of users to receive a notification without them having to carry out any action on the task.


# Configuring Billing

Billing allows you to setup how your customers will be charged for accessing your service.

You can configure billing for any service you create in Onestop. Billing is configured by the creation of billing tasks in your workflow. Billing tasks are responsible for calculating charges and generating invoices for customers to make payments. Billing tasks can either be automated or user-initiated. Automated tasks generate invoices automatically with no user intervention whereas user-initiated tasks require a user to explicitly generate an invoice by executing the task and counter checking billing fees if necessary. One of the key components of configuring billing is setting up payment methods that customers can use to pay for the service. Onestop SaaS is currently integrated to various payment gateways that you can choose from when configuring a billing task and we plan to accommodate more providers with time.&#x20;

It is important to note, that if you do not select a digital payment method for your billing configuration, Onestop defaults to a Payment Form that you must configure e.g. for users have to attach a proof of payment, to validate payment codes against a dataset, to validate against a HTTP API etc. See  [Configuring Payment Forms](/managing-services/configuring-billing/configuring-payment-forms).


# Billing Task

A billing task is the step in your workflow that generates a bill / invoice to be paid. It can be done automatically or by a human user.

### Creating a Billing Task

To create a billing task:

* Open your service
* Drag and drop a new task to the workflow area. If you want billing to be automated, drag and drop a service task type, if you want billing to be user-initiated, drag and drop a user task type.
* Give the task a title
* Chose the type for the task as "Generate Bill"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FP2MSwtOKUlxbITIyRam7%2Fimage.png?alt=media&amp;token=c6dba669-1df3-465c-af97-f7693b490c7d" alt=""><figcaption><p>Creating a billing task</p></figcaption></figure>

* Once the task is created, click on it in your workflow to open the task configuration form.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FhurULQWwoQfjsMlGe6mv%2Fimage.png?alt=media&amp;token=d2e3002f-647c-4aa2-8b46-f55d50f4ab8e" alt=""><figcaption><p>Click on the newly generated billing task</p></figcaption></figure>

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FmAwuHDMlX8mgXodXPxt1%2Fimage.png?alt=media&amp;token=856bdc5d-a111-42bf-a1d7-e5a557515d74" alt=""><figcaption><p>The task configuration form for a billing task</p></figcaption></figure>

* In the task configuration form, click on the Billing configuration edit button as shown below.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FSBzybJvFhDGJKYyD2GRl%2Fimage.png?alt=media&amp;token=fe1d8e7c-dcfa-488f-9bcf-a4662ebf0047" alt=""><figcaption><p>Editing the billing configuration</p></figcaption></figure>

* The billing configuration form appears

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FKqXLvNgprIAKG91loDB1%2Fimage.png?alt=media&amp;token=e485981f-b2df-4588-aaa2-1a7fc713ee12" alt=""><figcaption></figcaption></figure>

### Configure billing settings

#### General settings

In the billing configuration form you can configure the following general settings

* *Name*: This is the name of the product/service fees being billed.
* *Code*: A code for the billable service. This code will be part of the generated invoice number
* *Due days*: How long the customer will have to pay the invoice
* *Currency*: The currency the customer will be invoiced in
* *Choose Online payment methods* that you would want your customer to pay with. If no payment methods are chosen, the default behaviour would be to have your customers attach a proof of payment.

#### Adding fees to your billing configuration

You can add an unlimited number of fees that will be invoice lines in your generated invoices.

To add billing fees to your configuration:

* Click on the add button on the billing form as show below.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F7yLaWVxj9dj6PlOVsJSp%2Fimage.png?alt=media&amp;token=03b3348c-d205-4ae1-ad92-d4ed55e4cb99" alt=""><figcaption><p>Adding a new fee</p></figcaption></figure>

* In the added fee, provide a fee name and fee code.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F8MZG3Z1w2oTLe52mJqyp%2Fimage.png?alt=media&amp;token=918128b4-19c9-4651-b1f3-f729b896f8fd" alt=""><figcaption><p>New Fee with price setting button highlighted</p></figcaption></figure>

* You now need to configure pricing for this fee. Click on the price settings button as highlighted above.
* The price settings form should appear

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FLGyuYsD9OOfZZZZhdg2b%2Fimage.png?alt=media&amp;token=84d84e28-1b46-49dd-bc97-5905d3f7c776" alt=""><figcaption><p>The Fee Price Settings form</p></figcaption></figure>

Configuring Fee Pricing involves a number of settings that we can easily configure. Let us explore these settings, one at a time:

* *Compute price based on an equation*: This option will allow you to set a price for this fee based on an equation that can use form input in calculating the final price of the fee. The form input fields you use in your equation must be number type fields. [Click here for more information on how to write a pricing equation](#using-pricing-equations).
* *Price*: If you do not use a price equation, you can provide a fixed figure as the price for this fee.
* *Tax*: Any tax to be applied to the fee as a percentage.
* *Pricing rules*: Pricing rules allow conditional logic to be applied to fee pricing. When you add pricing rules, the price field mentioned previously will be ignored. [Click here to see how to configure fee pricing rules](#pricing-rules)

#### Using Pricing Equations

A pricing equation is a mathematical formula that you place in the price field. The formula will be evaluated during price computation and supports the following mathematical operations:

* Multiplication (\*)
* Addition (+)
* Subtraction (-)
* Division (/)

To use form input in your formula, you will need to reference field tags in the formula using square brackets.

See below for an example of a pricing equation:

```
[field_tag]*189
```

> The example above will take the value for a field with the given field tag and multiply it by the number 189.
>
> It is important to note that the formula will only work if either a submission form or task form containing the referenced field has been filled in the workflow prior to the invoice being generated. Thus you have to make sure that the sequence of your workflow will support this formula e.g. if a task form field is referenced, you must make sure that the task with that form set is executed before this billing task.

To find out how to get a tag for a field, go to the [Field Tags section](/managing-services/managing-forms/using-the-form-builder/field-tags).

#### Pricing Rules

Pricing rules allow you to apply conditional logic to fee prices based on the values of submission and task forms in your workflow.

&#x20;To add a new pricing rule:

* Click on the "Add New Price Rule" button.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F4Potxd4zTwSNrKarex0F%2Fimage.png?alt=media&amp;token=2ed027af-e3b7-4252-8f72-11ff17d39ad4" alt=""><figcaption><p>Add Price Rule button</p></figcaption></figure>

* The price rule form appears

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FbKjwkMcaQbcxclcO0heD%2Fimage.png?alt=media&amp;token=a6807e3e-92e7-42c2-b6e9-947ec9333338" alt=""><figcaption><p>Price Rule form</p></figcaption></figure>

* For each price rule you should configure settings as below:

  * *Pricing Rule Name:* A meaningful name for your pricing rule.
  * *Compute price based on an equation*: This option will allow you to set a price for this fee based on an equation that can use form input in calculating the final price of the fee. The form input fields you use in your equation must be number type fields. [Click here for more information on how to write a pricing equation](#using-pricing-equations).
  * *Price*: If you do not use a price equation, you can provide a fixed figure as the price for this fee.
  * *Apply Price Rule If*: This is the condition logic operator to be applied i.e. if all conditions are met or if any of the conditions are met.
  * *Conditions*: These are the conditions for the rule to apply. You can add an unlimited number of conditions and each condition must have:
    * A condition field
    * A condition operator
    * A condition value
    * KINDLY NOTE: When using date/datetime fields in your conditions, you must place and ISO8601 date format (YYYY-MM-DD) as the condition value to compare against e.g. 2020-12-31. It is generally safe to compare ISO 8601 date strings because the ISO 8601 format orders date components from the largest to the smallest unit (year, then month, then day), and it uses fixed-width, zero-padded numbers.
  * Once you are done configuring the settings, click on the save button
  * The screenshot below is an example of a pricing rule for a cheese burger:

  <figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FtOEpho6FwuzbI2wRvoiJ%2Fimage.png?alt=media&amp;token=79f5df28-aad9-47bc-bc7c-ec612e702f47" alt=""><figcaption><p>Sample Pricing rule for a cheese burger</p></figcaption></figure>


# Payment Task

Payment Tasks allow users to make payments for generated bills.

### Creating a Payment Task

After creating a billing task and configuring billing fees in your workflow, you must create a payment task that the customer will execute to carry out payments in your workflow.

To create a payment task:

* Open your service
* Drag and drop a new user task to the workflow area.
* Give the task a title
* Chose the type for the task as "Payment"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F6Zj5cAWgEMsmblZaaey7%2Fimage.png?alt=media&amp;token=974e0835-6273-4e5c-ac4a-acbae4112bf4" alt=""><figcaption><p>Creating a payment task</p></figcaption></figure>

* Connect your invoicing task to your payment task using the workflow connectors as shown below

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FGf3W7gTakQvCI9c8meBG%2Fonestop-connecting-tasks.gif?alt=media&amp;token=09d4ffe8-1266-484f-b9b4-ef43dc22a81f" alt=""><figcaption><p>Connecting workflow tasks</p></figcaption></figure>

* Your customer can now be able to pay for an invoice that will be automatically generated on submission of the form.
* Note that the example above assumes a customer has to pay for an invoice immediately after it is generated. This would be the case in many use cases but of course it may differ for other use cases. Onestop supports the generation of invoices and payment at a later step after your workflow has progressed. To do this. You would have to:
  * Connect your invoicing task to whatever task you want to proceed the invoicing task.
  * Build up your workflow with all other tasks that precede the payment task
  * Now you can connect the invoice and payment task using a field in the task configuration form called "data association node"
  * So in the invoice task configuration form, set the data association node as your corresponding payment task. This is illustrated below:

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F0OERwJ3JJEREoKIkRaBl%2Fonestop-data-association-node.gif?alt=media&amp;token=67be885f-f8b2-4bcc-90ab-11cacaeaa23b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F2TJsyiyVCDateczlepKJ%2Fimage.png?alt=media&amp;token=8c817076-f132-4d02-9165-de59185777e2" alt=""><figcaption></figcaption></figure>


# Configuring Payment Forms

'Manual Payments' are payments that are made without any integration to Onestop.

Payment forms can be used for a wide array of use cases for handling payments that can be validated without using any of the digital payment methods available on Onestop. This includes cash payments, bank transfers that are not integrated into Onestop, mobile money payments that are not integrated into Onestop, checking valid payments against a your internal systems, and so forth.&#x20;

The beautiful thing about configuring payments with a payment form is that you create a standard Onestop Form that is created by the form builder. This allows you to configure a form that has fields for payment info needed and validate that payment info in a number of ways without the need to code. The possible scenarios are:

1. Manual Payments
2. Payments validated against a third party system not integrated to Onestop
3. Payments with codes validated against a dataset you manage in Onestop.

### Configuring Billing for Payment Forms

To configure a workflow that will use a payment form, follow the steps below:

* Create your workflow and ensure it has a billing task.
* Make sure the bill task has no online payment methods selected. This will ensure payment defaults to using a payment form that exists for the payment task
* Add a payment user task to your workflow
* Open the payment task and click **Use Payment Form**

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fdm20CfiSnA62WPdtWm2Z%2FScreenshot%20from%202023-12-06%2018-37-54.png?alt=media&amp;token=a1fb0622-9cae-4d50-b4cf-90fcf0c2e1f6" alt=""><figcaption><p>Setting Payment Task to "Use a payment form"</p></figcaption></figure>

* In the drop down field that appears, select a payment form to use

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FnXJbRELo9VGEtQcSD8Zn%2FScreenshot%20from%202023-12-06%2018-40-09.png?alt=media&amp;token=f7c2abac-8885-4afb-8e70-c6fb64be9ed7" alt=""><figcaption><p>Selecting a payment form</p></figcaption></figure>

* If you have no payment forms setup, click the plus button to create a new one as shown below

<div><figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fud3rISTWExVeAoB7mXEl%2FScreenshot%20from%202023-12-06%2018-41-47.png?alt=media&amp;token=c9a3c8cb-6ea5-443f-9144-53af61ee76cc" alt=""><figcaption><p>Button to add new payment form</p></figcaption></figure> <figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FGovfqQvJBLrA0bJjW1Fp%2FScreenshot%20from%202023-12-06%2018-43-22.png?alt=media&amp;token=805cf40a-742f-4111-b791-620fb049aa8e" alt=""><figcaption><p>Creating the new payment form</p></figcaption></figure></div>

* You can then edit the payment form by clicking on the edit button. This will open the form builder

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FicBVMPEP0irjqCr1OaJu%2FScreenshot%20from%202023-12-06%2018-44-30.png?alt=media&amp;token=34fb7a5f-e810-4900-8092-34af03eb6125" alt=""><figcaption><p>The edit button for a payment form</p></figcaption></figure>

### Configuring Manual Payments

For these types of payments, a client must attach a proof of payment that is confirmed by an authorized officer with the permission '**Can Confirm Confirm Manual Invoice Payment**'.

There is a standard way to configure this in Onestop:

* Create a payment form workflow as instructed in the previous section of this page.
* By default, a file field is added called "**Attach Proof of Payment**". You can change this to any field that can help you confirm payment manually.
* After doing that, finally you need to link the payment task to the payment confirmation task. We do this using the data association node link.
* So to make the data association:
  * First create a "Payment Confirmation" user task.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F6Cj2uHNYU6trLyzK6LmG%2FScreenshot%20from%202023-12-06%2018-46-52.png?alt=media&amp;token=551ab196-6882-4a13-9ed7-8dd46dbfdb02" alt=""><figcaption><p>Creating the Payment Confirmation Task</p></figcaption></figure>

* Link the Payment task to your "Payment Confirmation" step in your workflow. Note that this step can also be configured to come later in your workflow after other steps.
* Next, open your previously created payment task and in the drop down labelled **Set data association node**, select the Payment Confirmation task just created.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F0ykJthjDojDKVWzqNqJq%2FScreenshot%20from%202023-12-06%2018-49-06.png?alt=media&amp;token=d4dbc818-69a2-4430-956e-dff44ceac4d7" alt=""><figcaption><p>Setting data output association node for the Payment task to be the Payment Confirmation task</p></figcaption></figure>

* Finally (the last finally :joy:), ensure the payment confirmation task is assigned to a team and add the following permissions to that team:
  * Can Confirm Manual Invoice Payment
  * Can Reset Invoice to Pending

To read more about teams and permissions, go to [Managing Teams and Permissions](/teams/managing-teams-and-permissions)

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FgYCTPIYIXiMbh1BPtHuf%2FScreenshot%20from%202023-12-06%2018-51-51.png?alt=media&amp;token=62c0468f-a76d-4304-9754-e09107322977" alt=""><figcaption><p>The permissions required to confirm payment manually</p></figcaption></figure>

### Configuring Validation of Payments against a dataset

You can do this by setting a payment task to use a manual payment form. Then in that form, configure a field with [Field Validators](/managing-services/managing-forms/using-the-form-builder/field-validators).

### Configuring Validation of Payments against an arbitrary API

You can do this by setting a payment task to use a manual payment form. Then in that form, configure a **Remote Request** field type to validate the provided input against your system / API. Note you need to have a Onestop enterprise setup to do this.


# Document Templates

## What are Document Templates?

Document templates are pre-designed, pre-formatted templates that are used to generate new documents at different points in your workflow.&#x20;

They typically include preset styles, layouts, and placeholder text or graphics. Some common examples of document templates include business letters, certificates, reports, licenses, scorecards and many more.&#x20;

They provide a consistent look and feel for a specific type of document and allow these documents to be generated automatically with no human intervention.


# Creating Document Templates

This page will take you through what document templates are and how to use them in Onestop

## Creating Document Templates

Document templates are created by first creating document generation tasks in your workflow. Document generation tasks are fully automated.

### Creating a Document Generation Task:

To create a document generation task:

* Open your service
* Drag and drop the service task type to the workflow area.
* Give the task a title
* Chose the type for the task as "Generate Document"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FVYyoskXUyu40h4SMLInw%2Fimage.png?alt=media&amp;token=aa8c7ac3-6684-4df0-a5ee-be16e6d6aaf9" alt=""><figcaption><p>Creating a new document generation task</p></figcaption></figure>

* In the task configuration form, click on the Document Template edit button as shown below.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FVafXo6IFkwZjTxE9yhaf%2Fimage.png?alt=media&amp;token=136d3fd5-0790-450c-9a98-aeeda6ec62fc" alt=""><figcaption></figcaption></figure>

* The document template editor should appear as shown below.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FBXROAOZE1EtgN0f54ls5%2Fimage.png?alt=media&amp;token=fee41847-b0a7-48fc-a280-30b80d639e81" alt=""><figcaption></figcaption></figure>

###

##


# Using the Document Template Editor

### Using the Document Template Editor

Once you have a document generation task in your workflow, you can now edit and design your document template.

Additionally, you will be able to view and open document templates in your service by navigating to the "Document Templates" menu in your service:

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F5HWkCE9KMKQceqklAMqj%2Fimage.png?alt=media&amp;token=a46f29ee-c4f6-418f-ba10-890d25e5bc81" alt=""><figcaption><p>Document templates menu</p></figcaption></figure>

Now, to edit and design your document template:

* Open the document template editor from the "Edit button" in either a task configuration form or listed document templates as shown previously.

#### Editing Document Information

* Click on the "Edit Document Info" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FbuCDwjYR0jUzftWjcuvn%2Fimage.png?alt=media&amp;token=f779c534-e50f-444a-97ce-57ca1040f6b5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fj15f5qma6K7g0qz4uCgQ%2Fimage.png?alt=media&amp;token=ff3fb988-7559-44e2-b69d-6ace35acb11a" alt=""><figcaption></figcaption></figure>

* The following settings are available:
  * *Document Title*
  * *Document Type*
  * *Validity Period*: The duration in days during which the generated document will be valid
* Save the details once complete

With the document template editor, you can now design the layout and all other aspects of your documents. These are covered in the next sections. Enjoy!


# Designing a Document Layout

The layout feature for the document template editor allows you to give a custom and consistent look and feel for specific type of document generated in your automated process.

## Designing the Layout

Your document layout will be designed in standard HTML and CSS. To design your layout:

* Open the document template editor
* Input your content in the HTML area
* On the left of the editor, you should be able to enter and modify CSS for styling your layout

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F3qbVlKpTl00nqj47SUyL%2Fimage.png?alt=media&amp;token=e7740cd6-1266-40fe-96cb-82522aca5c85" alt=""><figcaption><p>Editing the layout design</p></figcaption></figure>

* You can also view your layout content as HTML markup by clicking on the "Code View" icon.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FkIcy2Ha7b2OhTmxzoVJP%2Fimage.png?alt=media&amp;token=27132ec5-7e77-42c3-bfda-b9ebe60eeb12" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F6L1N2CJXAgzzkKgg3jQo%2Fimage.png?alt=media&amp;token=9ff4e9f8-5c33-42df-8b63-b4abb14ed8a3" alt=""><figcaption><p>The HTML Markup / Code View</p></figcaption></figure>


# Using Document QR Codes

You can be able to add QR codes to your document templates, allowing anybody with an electronic or printed copy of the document to verify its authenticity by scanning an embedded QR code on the document.

## Adding a QR Code

To add a QR code to your document, you will need to use [context tags](/managing-services/context-tags). The steps below outline the process

* Open the editor for your document template
* Click on the "Use Context Tags" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FlkpKjqrXVgNFlIlQNgeo%2Fimage.png?alt=media&amp;token=62f924c9-c321-42c1-beef-37fb3efa08f2" alt=""><figcaption></figcaption></figure>

* In the context tags popup, click on the "Document Tags" tab
* Click on one of the specific size of the QR code you desire. It can either be small, medium or large.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FYJvIEpFkfiIRxM95GFfy%2Fimage.png?alt=media&amp;token=b0c9fbe2-8dad-455a-9000-cd7a368f29e4" alt=""><figcaption><p>Using QR code context tags</p></figcaption></figure>

* The QR code tag will be copied to your layout and you can now adjust its position using HTML and CSS.

## Designing the QR Scan Layout

The QR Scan layout is a design layout that allows you to dictate and design the page users will be directed to when they scan any QR codes present in your document.

To design the layout:

* Click on the "QR Scan Layout" icon

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FU6l8blGMlOrDvaudh22h%2Fimage.png?alt=media&amp;token=05852a39-9c2f-4f95-add5-8c1ef95a3552" alt=""><figcaption></figcaption></figure>

* Provide the content and styling (CSS) for your layout
* You can add various [context tags](/managing-services/context-tags) to your layout by clicking on the "Context Tags" button and choosing tags to add to your layout.
* Click the Save button once done


# Context Tags

## What are Context Tags?

A context tag is a way of associating content in a template to the actual data values that will be present in the individual instances of that template. In other words, it is a placeholder or marker that is used to indicate where specific data values should be inserted when the template is instantiated or used to create a new document, page, notification, or other piece of content.

When creating a template, you can use context tags to define specific areas where dynamic data should be inserted when the template is used to create an instance. The dynamic data is retrieved from various sources e.g. form submissions, assessment task form data, user profile info, organization info, and more. &#x20;

For example, a template for a business letter might include context tags for the recipient's name, address, and date, which can be replaced with actual data when the template is used to create a new letter.

It allows separating the structure of the data and the actual values of that data, so that the same template could be reused with different data values, creating different outputs.

## Using Context Tags

In Onestop, context tags are used in document templates, notification templates, field labels, field help text, and more.

* When in configuring a template in onestop, you will see a "Use Conext Tags" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FFm41ddFQ1NU8CyefAWMv%2Fimage.png?alt=media&amp;token=9f1f6337-ec27-4fb8-a35c-7fbb18f0acc8" alt=""><figcaption><p>Context Tags button</p></figcaption></figure>

* Click on the button
* A popup of all available context tags will appear for you to use
* The context tag popup has the different tag categories on the left and the tags for the currently selected category on the right as shown below

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FwqeSE7kIxzsCivXjnCYa%2Fimage.png?alt=media&amp;token=6fffebe5-f2bf-4cd7-a10f-ee271aa3a1cf" alt=""><figcaption><p>Tag categories and tags</p></figcaption></figure>

* To add a context tag to your template, simply click on the tag you wish to use and it will be appended to your template.

## Accessing Raw Values

When using the above context tags, Onestop will render the value in your target e.g. document, email etc. as a pre-rendered HTML value. If you want more control over how the value is rendered, you can opt-in to using the raw value of the field by appending **\_\_raw** to the tag. This will expose the raw json value of the field entry and you can use the Django Templating Language in your template to render more complex UI logic e.g. for loops.


# Managing Workflow Access for Teams

You can be able to fully manage team access to your services / processes. Each service will have the "Team Access" tab that allows you to manage how different teams access the workflow and individual tasks.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FFmmQohRSDXIWgJOvGsHu%2Fimage.png?alt=media&amp;token=6b30dd88-3e42-4d6f-85e6-ce1e7ad26579" alt=""><figcaption></figcaption></figure>

## Workflow Access

Workflow access determines which teams will be able to view workflow data in your process including form submissions, process status etc.

To give teams access to the service:

* Click on the "Workflow Access" tab
* Click on the "Link Team" button.
* In the dialog that appears, select a team to give access to.&#x20;
* You can also add a new team by clicking on the add button and selecting that team once it has been created.
* Click on the "Link Team" button to confirm and add

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FP4XJqqvTdAkL00uQqdyd%2Fimage.png?alt=media&amp;token=561b3e16-505f-4f66-adf3-3a2f8a062e7f" alt=""><figcaption></figcaption></figure>

## Task Access

To give access to workflow tasks, you must first ensure that your workflow actually has user tasks that can be assigned to workers.

### Granting a Team Access to a task

* Click on the "Task Access" tab.
* Select a task to give access to by click on its corresponding settings icon in the "Actions" column

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fw9C1oHgDa7MrdhZ44FmS%2Fimage.png?alt=media&amp;token=c919d3ee-b95d-49d0-9e31-1633eeba5b4d" alt=""><figcaption><p>Choosing a User Task</p></figcaption></figure>

* In the screen that pops up, Click on the "Give Team Access" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FYU9jubleZKKVVDIClr6x%2Fimage.png?alt=media&amp;token=234220b7-9862-4138-aae1-053f0a417dbd" alt=""><figcaption></figcaption></figure>

* Select a team to give access to.
* Choose the access level. Access level can be one of 4:
  * Perform: Gives the team members the permission to perform/execute this task.
  * Assign: Gives the team members permission to assign this task to other team members whose team have the perform access level.
  * Undo: Gives the team members permission to undo this task. **Please note that to be able to undo a task, a member / team must also have the permission ("Can Manage Process" or "Can Manage FormProcess" depending on your version) set on their team. Do this under team permissions.**
  * Supervise: Gives the team members permission to supervise this task.
* You are able to assign multiple access levels to a single team

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FBseoUMS3A0aAci1Y7SRF%2Fimage.png?alt=media&amp;token=71b59817-2f41-47fd-9b2d-f27a4230244d" alt=""><figcaption></figcaption></figure>

* Once done, Click the "Save Changes" button
* You should now see a list of teams with their corresponding access levels.
* To edit team access levels, simply click on the edit icon next to the listed team.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fr2gdf3DrTVqxl8fiNWgP%2Fimage.png?alt=media&amp;token=07ad9ca1-fbc9-452d-9f89-f5f23b3f3038" alt=""><figcaption></figcaption></figure>

* You can give more teams access to the task by repeating the same process for a different team.

### Revoking Task Access for a Team

To revoke task access for a team:

* Go to the task access tab
* Click the settings icon for the task you want to revoke access to
* Click on the edit icon for the team you want to revoke access

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fr2gdf3DrTVqxl8fiNWgP%2Fimage.png?alt=media&amp;token=07ad9ca1-fbc9-452d-9f89-f5f23b3f3038" alt=""><figcaption></figcaption></figure>

* In the dialog, remove all access levels that are given appear as shown below.
* Click on "Save Changes".

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FbODfdhVYIs2o6Qs50xTU%2Fonestop-revoking-task-access.gif?alt=media&amp;token=fb4ea711-3c83-43ec-90b4-be53a8fe1e25" alt=""><figcaption><p>Revoking task access</p></figcaption></figure>


# Advanced Settings

There are a number of advanced settings you can modify by going to the "Advanced Settings" tab of your service:

* ***Service Unit***: The name representing a unit of your service. This will be used throughout the system to identify units of your service and automatically pluralize them.
* ***Call to action text***: The call to action text for the service. This defaults to 'Apply' if no value is given.
* ***Initiated by Worker***: Check this field if you want the process defined by this service to be initiated by a worker in your team instead of an applicant/client. By default, your services will be initiated by external users/applicants/clients until you change this setting.
* ***Multiple Form Call to Action***: Call to Action when a user should choose among multiple forms


# Databanks and Datasets

In Onestop, your organizational data is stored in datasets that are arranged into databanks.

Data is intentionally separated from your workflows by design. This allows for a single source of truth when it comes to your organizational data, allowing your workflows to access organization-wide datasets, thus creating a truly integrated environment.&#x20;

This ensures consistency and accuracy in data usage, and also makes it easier to manage and update the data. Additionally, by separating data from workflows, it allows for more flexibility and scalability in how the data is used and allows for the data to be accessible to different users or systems in your organization.

## What is a Databank?

A databank is a collection of multiple datasets that store data used by your process workflows. It is synonymous to a database.

## What are Datasets

A dataset is a collection of data organized for you to use in and drive the workflows powering your organizational processes. You create organizational datasets by defining the structure of your data, similarly to how you would create a database table.

When creating a dataset, you need to define the structure of the data, which includes specifying the data types and format of the various fields or attributes, as well as any constraints or rules that must be followed when entering data into the dataset. This allows the data to be stored in a consistent and predictable format, making it easier to retrieve, update, analyze and manage.

Datasets are created with different fields and columns, and then new rows of data are added as needed. Fields or columns typically represent different attributes or characteristics of the data, such as name, address, date, or product price. Each field is given a specific data type, such as text, number, date, or Boolean, which determines the kind of data that can be stored in that field.

Datasets are used in different ways:

* **Data Entry**: You can use datasets to enter and store data in a structured format.
* **Form Selection fields**: Datasets can be used as the source of data for form selection fields, such as dropdown lists, to allow users to select from a predefined list of options. This can be useful for fields such as "state" or "department" for example.
* **Data Validation**: You can create field validators that use data stored in your datasets to validate user input. For example, you could use a dataset of valid email addresses to ensure that only valid emails are entered into a form.
* **Updated by workflow tasks**: Datasets can be updated by automated tasks depending on various configuration parameters. Automating dataset updates can help to reduce the workload in making sure that data stays up-to-date and accurate. For example, a workflow task can be configured to automatically update a dataset containing customer information, by adding new records or removing old ones when a new customer is added or when a customer unsubscribes. Another example can be a workflow task that automatically updates an inventory dataset by decreasing the stock quantity when a product is sold.
* **Design layouts**: Dataset records can be referenced and placed in to design layouts for documents, notifications etc.


# Creating a Databank

## Creating a New Databank

Creating a new databank is quick and easy.

* Click on the "Databanks" main menu.
* Click on the "Create Databank" button.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FFpQdJeBu8XRGWBvPa8qA%2Fimage.png?alt=media&amp;token=5938ffe1-a27a-4372-9a59-0e41085a65b1" alt=""><figcaption></figcaption></figure>

* Provide a name and description for your databank.
* Click on the save button.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FDm99Yix0ki5SwW49EbOO%2Fimage.png?alt=media&amp;token=115468e8-4954-46e3-8fef-05495c2bac1c" alt=""><figcaption></figcaption></figure>

* Once you have created a databank, you can now add datasets it.


# Creating Datasets

## Creating a New Dataset

Adding a new dataset to a databank is quick and easy.

* Click on the "Databanks" main menu.
* Choose the databank that you want to store your new dataset.
* If you don't have any databanks setup, [create a databank](/databanks/creating-a-databank) first.
* Once you have chosen or created a databank, you should be presented with the datasets page for you to add datasets to your databank.
* Click on the "Create Dataset" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FKvrr9H3kcUKuzq2FaOmt%2Fimage.png?alt=media&amp;token=e61adc40-bcc0-4ef2-9182-e5f8014d7cff" alt=""><figcaption></figcaption></figure>

* You will automatically be presented with a blank dataset in a grid view and with a placeholder name
* Give the dataset an appropriate name that represents the data it will be storing e.g. Projects. You can change its name by clicking on the name or the dataset title. This step is important as it will give you a clear indication of what the dataset contains, it's useful when you have multiple datasets.
* You can give a long description by clicking on the "Edit Dataset Info" button and filling in the description field.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FJbUlvxZnmn0ZVSAXdlNx%2Fimage.png?alt=media&amp;token=36a5eeca-0946-4646-996c-ece50bd96dc1" alt=""><figcaption><p>New Dataset Grid view</p></figcaption></figure>

* You can now start adding your columns/fields to the dataset.

## Adding Fields to a Dataset

* Click on the "Add Field" button.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FD6RA2wrh794AL1ucZHTC%2Fimage.png?alt=media&amp;token=96d05ed4-a0b5-424b-ac4f-1acba3a33a7d" alt=""><figcaption><p>Adding a new field</p></figcaption></figure>

* Provide the field name, description, type and specify whether or not it will be required.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FUEX6EKQYmzKesJqTlLrA%2Fimage.png?alt=media&amp;token=fb2854fb-6fe9-48fc-aecf-dbc80ab63ce4" alt=""><figcaption><p>Adding a new field</p></figcaption></figure>

{% hint style="info" %}
It is important to note that if you don't add a specific field called "id" in your dataset, it will be automatically added in the background and used to uniquely reference each record. If you do add a field called "id" you must make sure that all records you add to your dataset have a unique value for that "id" field, otherwise, it can cause errors when you try to reference or update specific records.
{% endhint %}

* Click on the "Add Field" button to save the changes
* You should see your added field in the grid view

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F04vhiIxAEtiRqAMkB1lG%2Fimage.png?alt=media&amp;token=28b5b2db-8281-4ffb-a345-f29667a19ee2" alt=""><figcaption></figcaption></figure>

* Add as many fields as are needed for your use case


# Adding Data to Datasets

There are 2 ways you can add data to your datasets:

1. Inserting Single Records
2. Importing Data

## Inserting Single Records

This method involves manually adding new records to the dataset, one at a time.&#x20;

To do this:

* Open the dataset
* Click on the "Insert New Record" Button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FtoUWlN1wPxq8sGwerokh%2Fimage.png?alt=media&amp;token=67d188c2-d59e-4fa5-b844-4a536963464a" alt=""><figcaption></figcaption></figure>

* A row is added to your dataset
* In the added row, fill in the values for each field in the row:
  * Double clicking on the cell for the field you want to fill.
  * Enter a value, making sure that they match the data type and format specified for each field.
  * Press enter on your keyboard once done, for the cell value to be saved
  * Repeat the process for each field
* Your record will be saved once you have completed filling in each field in the row.
* The insert process is shown below

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FqzaCKT1rJa6Vqmy42qnR%2Fonestop-dataset-add-record.gif?alt=media&amp;token=4e9af977-44ec-4459-869e-4c42c95be2c4" alt=""><figcaption><p>Inserting a single record</p></figcaption></figure>

## Importing Data

This method involves importing data from an external source, such as a spreadsheet or a database.&#x20;

Currently, you can only import data from a CSV file so make sure your data has been exported to a CSV format.

To import data into your dataset:

* Open your dataset
* Click on the "Import Data" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FZ9sFNT0sl8SXuLgEokkZ%2Fimage.png?alt=media&amp;token=71bb851a-6ab1-459c-82a6-77e4928ca21b" alt=""><figcaption></figcaption></figure>

* In the view that appears, click on the "Choose A File" button and browse to the desired file on your local machine. You can also drag your CSV file to the drop area displayed.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FGD8ndpXjMB0nZ8n6hfwF%2Fimage.png?alt=media&amp;token=a48f5b16-57bb-4aca-8c0d-39a9e211b164" alt=""><figcaption><p>Choose a file to import</p></figcaption></figure>

{% hint style="info" %}
It is important to note that the structure of the data stored in the CSV file MUST match the structure of your dataset.

Also, the column names in your CSV file must be in lower case and spaces replaced with an underscore (\_)
{% endhint %}

* Click on "Import Data"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FTTGnbbWiDc4fbKeRki3f%2Fimage.png?alt=media&amp;token=f9fa8c16-f2f5-43c6-a3d2-5072dacd132c" alt=""><figcaption></figcaption></figure>

* If your CSV data matches the structure of your dataset, you should see a success message and all the new records appear in your dataset.

<div><figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F8q45sNyWrl53Wad826Oq%2Fimage.png?alt=media&amp;token=a0f0d58c-284d-4807-8343-3fe589a5669c" alt=""><figcaption></figcaption></figure> <figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FxMqtAN16UJO4Ffo5ZV8k%2Fonestop-populated-dataset.png?alt=media&amp;token=ab1a554b-8feb-4a1f-9199-1238efbb4cde" alt=""><figcaption></figcaption></figure></div>


# Using Datasets

Datasets can be used in a form or in a workflow task.&#x20;

When used in a form a dataset is referenced so that a read operation can be performed on that dataset. When used in a workflow task, a dataset is referenced so that an update operation can be performed on that dataset.

For both scenarios, this reference to the dataset is done via Dataset connections.

## Dataset Connection

A dataset connection is simply a reference to a dataset for purposes of a read or update operation.

### Read Dataset Connection

A read dataset connection can be done from the form either on the [configuration of a drop down field](/managing-services/managing-forms/using-the-form-builder/form-field-types#settings-4) or [configuration of a field validator](/managing-services/managing-forms/using-the-form-builder/field-validators).

To create a read dataset connection:

* Click on the add icon or edit icon next to the data connection field.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FmROpPXLS0tCteS9AaE1G%2Fimage.png?alt=media&amp;token=f5d39459-eea6-45ad-a58d-1e83c5aad929" alt=""><figcaption></figcaption></figure>

* The dataset connection form appears

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Ff3QsfGcZqZPpVBMGBc9w%2Fimage.png?alt=media&amp;token=98c40580-521f-4c16-a00a-e0a91b13df3c" alt=""><figcaption></figcaption></figure>

* Choose reference type as 'Local' to connect to a dataset that is available on your organization's account.
* Choose the dataset you want to connect to.
* Provide a connection name.
* Click on the save button
* You can now use this connection for all other assets in your organization's account.

### Update Dataset Connection

An update dataset connection can be done from a workflow service task that is intended to [update a dataset](/managing-services/building-the-workflow/service-task-types#update-dataset).

To create an update dataset connection:

* Click on the add icon or edit icon next to the data connection field.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FnSpHhZJzsCeEU3A3BkxQ%2Fimage.png?alt=media&amp;token=e2a7faa8-4b61-4c82-a00d-0a65d89495ec" alt=""><figcaption></figcaption></figure>

* The update dataset connection form appears

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F6FTEWRAmmYOziSI19CHe%2Fimage.png?alt=media&amp;token=4ea36b3a-5e18-4c38-bfad-750cd56676d3" alt=""><figcaption></figcaption></figure>

* Choose a dataset that you want to connect to
* Provide or edit the connection name
* Choose the form that will contain the source data for updating the dataset.
* Add mappings for the update. For each mapping added:

  * Choose the target field to be updated on the dataset
  * Choose the source field from the selected form that will update the corresponding target field on the dataset       &#x20;
  * Note: For source fields that are of the type "dynamic matrix field", the rows in the data for the field will each be saved as a separate dataset record and you must add a mapping for each column in your dynamic matrix field.&#x20;

  <figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F05vefWqe3r0YoTUwINFQ%2Fimage.png?alt=media&amp;token=01505ff8-0d00-40e8-8f07-084f97e6715b" alt=""><figcaption><p>Update Settings for a connection that writes a single record to a dataset</p></figcaption></figure>

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F7u0JDWx1eWSF7qKthg1n%2Fimage.png?alt=media&amp;token=58ef5c72-7096-4b97-8148-3b959a5bcaae" alt=""><figcaption><p>Update Settings for a connection that writes multiple records to a dataset from a dynamic matrix field</p></figcaption></figure>

* Click on the save button


# Managing Portals

Onestop provides you with the feature of deploy [Customer Portals](/getting-started-with-onestop#customer-portal) and [Staff Portals](/getting-started-with-onestop#staff-portal).

In Onestop Admin, you can manage specific settings for your portals as well as add an unlimited number of portals for your different services.

## Managing a Portal

To manage an existing portal:

* Click on the "Portals" main menu.
* ![](https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FJsXHLr88I4kuIKtGRlnH%2Fimage.png?alt=media\&token=9ea6369b-19fe-41e4-a164-f09c03ae4300)
* In the list of portals that appear, click on the edit icon for the portal you want to manage.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FUbHAv62Gn8xEhdwImqVf%2Fimage.png?alt=media&amp;token=95018433-53dd-4163-bd0d-e4f389e6ff2c" alt=""><figcaption><p>Editing a Portal</p></figcaption></figure>

### Configuring Portal Settings

* A Portal form appears with a number of settings:
  * **Host name**: The domain name that will host your portal. If you are using our SaaS offering on onestop.site, your domain name will be a subdomain of .app.onestop.site. Custom domains are currently only offered on our Enterprise offering.
  * **Portal Display Name**: The name of the portal
  * **Email Address**: The email address for the portal if any.
  * **Google Analytics Key**: The Goolge analytics key you would like to use to track analytics for your customer portal.
  * **Enforce Two Factor Authentication**: This option will force all users on your customer and staff portals to use 2 Factor authentication when logging in to the customer and staff portals. 2FA methods supported are device authenticators and email.
  * **Outgoing Email Settings**: These are [mail server settings](/portals/configuring-mail-servers) needed if you want your services to send out email notifications using your custom email address.

##


# Configuring Mail Servers

## Configuring a Mail Server for your Portal

All email notifications will be sent out from a onestop.site email unless you add your own email server configuration for your portal(s).

To add mail server settings for a portal:

* Open / Edit your Portal.
* Click on the "Next" Button.
* Click on the "Add Outgoing Email Settings" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FpQ1mSxjLNuTZjtHjWpff%2Fimage.png?alt=media&amp;token=9f91f77c-ab93-496f-9c77-ffcad1466410" alt=""><figcaption></figcaption></figure>

* Ensure you can now see the Outgoing Email Settings Form

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FHuA1ZlmK6OkQsmPrngtA%2Fimage.png?alt=media&amp;token=ab7c054a-81e7-4ba5-bbfe-e05fac1c7211" alt=""><figcaption></figcaption></figure>

* Provide the following details that should be available from your mail server or email provider.
  * Name: *This is just a descriptive name for your mail server.*
  * SMTP Encryption
  * SMTP Host
  * SMTP User
  * SMTP Port
  * SMTP Password
* Test the mail server by clicking on the "Test Mail Server" button.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fs2GHjGtxdVAgpOD8zi1e%2Fimage.png?alt=media&amp;token=a022f691-abd2-4ca7-9e94-80177194ab7a" alt=""><figcaption><p>Testing the mail server</p></figcaption></figure>

{% hint style="info" %}
It is important to note that if you do decide to use your own mail server for sending out email notifications from Onestop, you or your technical team will be responsible for ensuring email deliverability.
{% endhint %}


# Creating a New Portal

## Creating a New Portal

To create a new portal:

* Click on the "Portals" main menu
* Click on the "Create New Portal" button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FDWNdrcjUqY7XFtGmXxlo%2Fimage.png?alt=media&amp;token=2dcee466-2192-45e9-9ab4-0580e02a7f04" alt=""><figcaption></figcaption></figure>

* Follow the steps for [Configuring Portal settings](/portals/managing-portals#configuring-portal-settings) previously described.


# Managing 2-Step Verification

*<mark style="color:purple;">**This feature is only available on Onestop Enterprise**</mark>*

Onestop allows you to enforce 2 step verification on your portal for certain types of users. This gives you more control of the security and flexibility of your portal in automating your process flows.

## Enabling Two Factor Authentication

To enable 2 Factor authentication:

* Go to Portals
* Select the portal
* Go to the **Advanced** tab
* Click on the "Enforce 2-Factor Authentication" Button
* You can now configure more settings for 2-Factor Authentication as described in the next paragraph.
* Click the Save Button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FiYlRXMO91vLAA8jjERrs%2FScreenshot%20from%202024-01-09%2018-35-46.png?alt=media&amp;token=214a298b-d919-400c-be68-014bd4558853" alt=""><figcaption><p>Enforcing 2-Factor Authentication</p></figcaption></figure>

## Managing 2-Factor Authentication Settings

Once you have enabled 2-Factor Authentication you can configure more settings. Its important to note that if you do not explicitly configure the settings you want, 2-Factor Authentication will have default behavior that may not be ideal for your organization. Configuring 2FA settings allows you to take control of the 2FA process on your portal.

To Configure settings:

* Open your portal
* Click on **Edit 2-Factor Authentication Settings**

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FPBQWb1UPDibGDmIFGDLo%2FScreenshot%20from%202024-01-09%2018-45-05(1).png?alt=media&amp;token=399388a0-04af-4e23-8f55-f68d1980f7ac" alt=""><figcaption><p>Edit 2-Factor Authentication Settings</p></figcaption></figure>

* You can configure the following settings for 2-Factor Authentication:
  * **Verification Methods**: Choose the methods that will be used for the 2nd factor of authentication after a user has already provided their password (the 1st factor). These include Email, Authenticator app etc. *If you do not select a verification method, all of them will be available on your portal*
  * Users to enforce 2FA for: These are the groups of users in Onestop who will have to use 2FA to acccess your portal. You can choose 1 or more of the 3 broad categories of users on Onestop i.e. Clients, Workers & Administrators. *If you do not select values here, all user will be required to used 2FA on your portal.*
  * Enforce 2FA on IP Change only: Only enforce 2FA when the user logs in from a new location, tracked via their IP address.
  * Re-Authentication Duration: The duration in hours since last login after which a user will be required to provide their 2nd Factor e.g. email verification token, SMS verification code etc.
  * IP Verification Duration: The number of hours since last login from a specific IP address after which the user must provide their 2nd factor, even if they are logging in from the Same IP address.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FPVdvBfwCOHCbzTcKgKna%2FScreenshot%20from%202024-01-09%2019-02-23.png?alt=media&amp;token=d897a872-ab05-4aa3-8a44-097d42d31078" alt=""><figcaption><p>Configuring 2FA Settings</p></figcaption></figure>


# Customizing Portal Menus

*<mark style="color:purple;">**This feature is only available on Onestop Enterprise**</mark>*

Onestop allows you to customize the naming and structuring of menus in the client and staff portal to a certain degree without coding.

## Customizing Menu Names

* Go to Portals
* Select the portal
* Go to the **Advanced** tab
* Click on the "**Customize Menus**" Button
* Select a menu and provide a custom name.
* Click the Save Button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FdYd2JYfqtOvVFhu8MGuD%2FScreenshot%20from%202024-01-09%2019-07-32.png?alt=media&amp;token=b207b680-643b-4ee1-bc28-62f2d62601a2" alt=""><figcaption><p>Customizing Menu Names</p></figcaption></figure>

## Changing Menu Structure For Services

Onestop gives you to options for structure the main menu for your deployed services:

1. Grouped By Category: Services are group as per their respective categories. This is the default
2. As a continuous Unordered List: Services are arranged on the main menu sequentially.

To change the default, simply go to your portal and select **Do Not Group Service in Menu**

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FVlkYLqvqyS0CIcYRm69j%2FScreenshot%20from%202024-01-09%2018-45-05(2).png?alt=media&amp;token=44703d5b-40a3-468b-815f-ed1826662552" alt=""><figcaption><p>Changing Menu Structure For Services</p></figcaption></figure>


# Managing Teams and Permissions

Onestop worker accounts can be organized into teams and given specific permissions.

## Creating a Team

To create a new team:

* Click on the "Teams" menu

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FgqYfVM5xdkWXerdppPFV%2Fimage.png?alt=media&amp;token=7bf5d6e7-40eb-468e-91d0-dc88434debc9" alt=""><figcaption></figcaption></figure>

* Click on "Create New Team"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F3GOVBskdIsgFRun3WmBJ%2Fimage.png?alt=media&amp;token=e9cc7005-98ee-4787-b798-9f9082d75fc3" alt=""><figcaption></figcaption></figure>

* Provide a team name
* Click on the Save button

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FP4FGIyNbVFK3F5lTyIoa%2Fimage.png?alt=media&amp;token=7e9657b8-7f85-4a17-b594-b0c9c3aca75e" alt=""><figcaption></figcaption></figure>

## Managing a Team

To manage a team:

* Click on the "Teams" main menu
* On the left panel of your screen, select the team you want to manage

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FPMOxaUD6Y25gOZx6ZYdE%2Fimage.png?alt=media&amp;token=e0f8d308-6767-4627-b5f3-cc28bd18df38" alt=""><figcaption></figcaption></figure>

* Click on the "Manage" button for the team at the top right of your screen as shown below

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FJUuSVtPam30XCZdOiboo%2Fimage.png?alt=media&amp;token=04416a00-b955-46e2-a1fd-2cc46b12cf8c" alt=""><figcaption></figcaption></figure>

* You can now manage various aspects of the team detailed in the next sections

### Adding Members to a Team

If you co-workers do not have accounts on Onestop, you must first invite them to Onestop using the "Invite Workers" button. You can subsequently add a work to a team as you are inviting them.

If your co-workers already have accounts on Onestop and you want to add them to a team, follow the instructions below:

* Follow the steps to [manage a team](#managing-a-team)
* In the "Members" section, choose the members you want to add to the team and move them to the right side of the selection box as shown below
* Click on "Save Changes"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FuTLwZD4aKKcjW1q6WM1d%2Fonestop-teams-add-members.gif?alt=media&amp;token=f355dd38-ba67-462d-8e77-49d779d4c77b" alt=""><figcaption></figcaption></figure>

### Adding Permissions to a Team

To add workflow task permissions to a team follow the guide on [task access here](/managing-services/managing-workflow-access-for-teams#task-access).

To add any other permission to a team:

* Follow the steps to [manage a team](#managing-a-team)
* In the "Permissions" section, choose the permissions you want to add to the team and move them to the right side of the selection box as shown below
* Click on "Save Changes"

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fr1aIRLeR3EXN7W6x2D86%2Fonestop-teams-add-permissions.gif?alt=media&amp;token=7630c32d-9b8a-4aea-bf29-3a2ce48812d0" alt=""><figcaption><p>Adding Permissions to a team</p></figcaption></figure>

## Permissions Matrix

The table below outlines all the core permissions available on Onestop for you to assign to different teams.

{% hint style="info" %}
**Please note that permissions are automatically created for any user task you create in your workflows and you have full control in assigning them to teams as describe in the managing task access (**[Managing Workflow Access for Teams](/managing-services/managing-workflow-access-for-teams#task-access))
{% endhint %}

{% hint style="info" %}
**Only administrators have access to the administration console and once a user is set as an administrator, they can do anything on the administration portal. Be careful who you give admin access.**&#x20;

**The only users with a higher level access than are super Administrators. Super Administrators can only be present in an enterprise setup and cannot be created on Onestop SaaS.**
{% endhint %}

<table><thead><tr><th width="180">Permission</th><th>Description</th></tr></thead><tbody><tr><td><strong>Invoicing</strong></td><td></td></tr><tr><td>Can View Invoice</td><td>User will be able to view invoices both in the list and individually.</td></tr><tr><td>Can Cancel Invoice</td><td>User will be able to cancel an invoice.</td></tr><tr><td>Can Reset Invoice to Pending</td><td>User will be able to reset an invoice's status to pending.</td></tr><tr><td><strong>Payments</strong></td><td></td></tr><tr><td>Can Confirm Manual Invoice Payment</td><td>User will be able to confirm payments made on an invoice that was paid via a payment form.</td></tr><tr><td>Can view transaction</td><td>User will be able to view payment transactions.</td></tr><tr><td><strong>Documents</strong></td><td></td></tr><tr><td>Can view generated document</td><td>User will be able to view documents generated in the system for the various workflows configured for your organization.</td></tr><tr><td>Can Change Document Status</td><td>User will be able to change the status of documents generated in the system for the various workflows configured for your organization.</td></tr><tr><td><strong>Workflow</strong></td><td></td></tr><tr><td>Can Bulk Assign Tasks</td><td>User will be able to assign tasks in bulk</td></tr><tr><td>Can move process instance to any stage</td><td>User will be able to move a process to any stage</td></tr><tr><td>Can complete any task</td><td>User will be able to complete any task without executing it</td></tr><tr><td>Can Reassign Tasks</td><td>User will be able to reassign task. To reassign a task, a user must also have the assign access level on that task</td></tr><tr><td>Can Reassign a Process Instance</td><td>User will be able to assign all tasks in a process instance to another user</td></tr><tr><td>Can Edit Submission Details</td><td>User will be able to edit submissions on the process workflow</td></tr><tr><td>Can Manage Process</td><td>User can manage the process. This is a required permission for a user to be able to undo a task.</td></tr></tbody></table>


# Creating User Accounts for Workers

User accounts for workers are created by an invite mechanism.

To add a new worker to your organization:

* Open the admin console
* Click on the "Invite Workers" button on the dashboard. A quick link is also availble on the side panel as shown below

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FYCQxlkFoN7q6CYq0aoH3%2FMS%20Paint%20_%20Microsoft%20Paint%20Online(1).png?alt=media&amp;token=8d5cb026-121d-461a-b9c0-077f0320e21e" alt=""><figcaption></figcaption></figure>

* Enter the user email(s) to invite
* Select the portal to invite the user(s) to
* Select the teams to add the invited user(s) to

  <figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FkHwBvulvpokmg9zG18k3%2Fimage.png?alt=media&amp;token=f5429f87-5ea6-43ff-bede-78e2d38b3a13" alt=""><figcaption></figcaption></figure>
* Click the 'Invite' button
* The emails entered will receive an invite notification to accept and create their account.


# Managing Departments

You can manage and assign workers to departments in your Organization.

## Managing Organization Details

To manage your Organization details, go to **My Organization**, edit the details you want to modify and save the form

## Distinguishing Departments and Teams

Where as a department represents the division of your organization a worker belongs to, teams are more cross functional and give you the flexibility to provide granular precision of what a specific worker can and cannot do on the platform.

## Managing Departments

### Assigning Workers to a department

To manage your organization's departments:

* Go to **My Organization**
* Select the department by clicking **Edit Item**
* In the **Add users to this department** field, move the users you want to assign from this department from left to right
* Click Save on the popup form
* Confirm clicking Save on the Organization Form.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2F5eLkuyS5Heb3qDuFWdiS%2FScreenshot%20from%202024-01-10%2011-57-30(1)(1).png?alt=media&amp;token=a0061aef-4102-44bb-ad11-523a28bf0bc2" alt=""><figcaption><p>Adding workers to a department</p></figcaption></figure>

### Removing Workers from a department

To manage your organization's departments:

* Go to **My Organization**
* Select the department by clicking **Edit Item**
* In the **Add users to this department** field, move the users you want to remove from this department from right to left
* Click Save on the popup form
* Confirm clicking Save on the Organization Form.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2FoNLiqOTvbSK7HvBqfoLM%2FScreenshot%20from%202024-01-10%2011-57-30(2)(1).png?alt=media&amp;token=74679aa2-5537-448c-b505-a587a3f010ae" alt=""><figcaption><p>Removing workers from a department</p></figcaption></figure>

### Creating a new department

To create a new department

* Go to **My Organization**
* Click on the Departments Button
* In the pop up that appears,
  * Provide the department name
  * In the **Add users to this department** field, move the users you want to assign from this department from left to right
* Click Save on the popup form
* Confirm clicking Save on the Organization Form.

<figure><img src="https://3247139528-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1tGxO0O4EK3NOayFEcfk%2Fuploads%2Fz0x7hinS8cXaOV4yM6Uw%2FScreenshot%20from%202024-01-10%2011-57-30(3).png?alt=media&amp;token=fc2fde1e-32ce-44ac-8c65-4b1cd13d5bc4" alt=""><figcaption><p>Creating a new department</p></figcaption></figure>


# Tips and Techniques

## Recursion

You may have a scenario where you need an activity to be always available to a user in your workflow. Onestop uses recursion to support a BPMN loop activity (<https://methodandstyle.com/repeating-activities-in-bpmn/>).

The concept is straight forward to implement: Make the next step of your current step to be that exact current step.


