> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dash360.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Set Up Uncertainty Classes

> Create the cost and schedule uncertainty profiles the Monte Carlo engine samples from, map them to basis codes, and apply them across a work package.

Risks in the register are one source of variability. The other is estimating uncertainty: the fact that a duration or a cost is an estimate rather than a fact. Uncertainty classes are how you describe that spread, and the Monte Carlo simulation samples from them.

<Warning>
  **This setup pays off on Risk Pro.** Uncertainty classes can be created and assigned on either tier, but the features that consume them (the Cost and Schedule Uncertainty cascade, and the Combined and Uncertainty Only simulation modes) are **Pro**. On Lite the simulation is locked to Risk Events Only, so classes you assign will not change its results.

  Setting them up on Lite is still worthwhile if you expect to upgrade, because the assignments are already in place when you do. See [Getting Started with Risk](/user-guide/risk/getting-started) for the full tier comparison.
</Warning>

<iframe src="https://www.loom.com/embed/6cf17cc6ca1545efa135ce29c433f1c0" title="Loom video player" frameborder="0" className="w-full aspect-video rounded-xl" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen />

## Seed the standard classes

<Steps>
  <Step title="Open the Uncertainty Classes tab">
    Go to **Admin > Projects**, click the pencil icon on the project, and select the **Uncertainty Classes** tab.
  </Step>

  <Step title="Click Add Default Classes">
    This seeds the standard ladder of classes in one action. It skips any class whose name already exists, so it is safe to run on a project that already has some defined.
  </Step>
</Steps>

For most projects this is enough to get to a first simulation. Add custom classes only where the standard ladder does not describe your estimates.

## Add a custom class

<Steps>
  <Step title="Click Add Uncertainty Class">
    The form opens below the table.
  </Step>

  <Step title="Set the identity fields">
    Choose a **Resource Type** (All, Labor, Non-Labor, or Travel) and a **Name**. The name is what estimators see in the class pickers.
  </Step>

  <Step title="Choose a Distribution Method">
    **PERT** for most estimates, **Triangular** for a simpler and more conservative shape, **Uniform** when any value in the range is equally plausible, or **Single Point** to switch uncertainty off while keeping the class assigned.
  </Step>

  <Step title="Enter the factors">
    Schedule and cost each take a Min, Most Likely, and Max, expressed as a **percentage of the estimate**, where 100 means no change. A schedule set of 80 / 100 / 150 samples a 10 day activity between 8 and 15 days.
  </Step>

  <Step title="Click Save Uncertainty Class">
    The class becomes selectable on activities and resource assignments.
  </Step>
</Steps>

<Note>
  A class can carry spread on one dimension and none on the other. Leaving cost at 100 / 100 / 100 while the schedule runs 80 / 100 / 150 is a perfectly normal setup for a class that only affects duration.
</Note>

## Map basis codes to classes

Estimators already record how each cost was arrived at, in the basis code. The basis code map turns that into a default uncertainty class, so a vendor quote can carry tighter bounds than an engineering judgment without anyone assigning classes line by line.

<Steps>
  <Step title="Scroll to Basis Code Defaults">
    It sits below the classes table on the same tab.
  </Step>

  <Step title="Pick a Cost class and a Schedule class for each basis code">
    Leave a dropdown blank where you do not want a default. Those assignments are simply left unassigned.
  </Step>

  <Step title="Save">
    The map is stored against the project.
  </Step>
</Steps>

<Warning>
  **Saving the map does not assign anything on its own.** It only records the defaults. Nothing changes on any resource assignment until somebody runs the apply step below. This catches people out, because the map looks like it has taken effect the moment it is saved.
</Warning>

## Apply the map across a work package

<Steps>
  <Step title="Open the Budget Form">
    Go to **Estimating > Budget Form** and select the work package.
  </Step>

  <Step title="Run Apply Uncertainty to Work Package">
    Each resource assignment receives the class mapped to its basis code, and activities take the class matching the most common basis code among their resource assignments.
  </Step>

  <Step title="Check the count in the result message">
    It reports how many assignments were newly given a class, which is the quickest confirmation that the map is wired the way you expected.
  </Step>
</Steps>

<Note>
  **The apply step skips anything already set.** A resource assignment or activity that already has an uncertainty class keeps it, so deliberate choices made by an estimator are never overwritten by a later bulk apply.
</Note>

## Next

* [How to Set Up Spread Profiles and Calendars](/user-guide/risk/how-to/spread-profiles-and-calendars), the last piece of setup.
* Running the simulation: [Risk Analysis](/user-guide/risk/risk-analysis).
* Full field reference: [Uncertainty Classes](/user-guide/admin/uncertainty-classes).
