> For the complete documentation index, see [llms.txt](https://help.tillit.cloud/tillit/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.tillit.cloud/tillit/knowledge-base/industry-configuration-guides/cosmetics-filling-plant.md).

# Cosmetics Filling Plant

This cookbook walks you through setting up TilliT for a **cosmetics filling and packing plant**. By the end, you will have a fully configured site with filling and packing lines, shift patterns, GMP-compliant quality activities, batch traceability, material tracking, and a scheduler that can plan and optimise production runs.

The setup is based on a real-world cosmetics facility that fills and packs products such as shampoos, lotions, body washes, and creams across several filling lines. The plant operates with two-shift patterns, follows GMP (Good Manufacturing Practice) procedures, and integrates with an ERP system (e.g. SAP) for production orders and batch management.

{% hint style="info" %}
All names used in this guide are generic examples. Replace them with your own site, line, and product names.
{% endhint %}

***

## Prerequisites

Before you begin, ensure you have:

* A TilliT tenant provisioned for your organisation
* An administrator account with access to **Settings**
* The [Excel Add-in](/tillit/tools/excel-addin-v2.md) installed (recommended for bulk data loading)

For a general introduction to TilliT setup concepts, see [Introduction for New TilliT Customers](/tillit/readme-1/introduction-for-new-tillit-customers.md).

***

{% stepper %}
{% step %}

## Create the Site

A site represents the physical location of your production plant.

**Go to Settings -> Asset Hierarchy -> Sites -> Create**

| Field         | Example Value   |
| ------------- | --------------- |
| Name          | Cosmetics Plant |
| Timezone      | Europe/Helsinki |
| Location Code | CP              |

For more detail, see [Site](/tillit/knowledge-base/setting-up-tillit/asset-hierarchy/site.md).
{% endstep %}

{% step %}

## Define Asset Classes

Asset classes group similar types of equipment. A cosmetics filling plant typically has the following asset classes:

| Asset Class           | Description                                                                                      |
| --------------------- | ------------------------------------------------------------------------------------------------ |
| Cosmetic Lines        | The parent filling/packing lines                                                                 |
| Cosmetic Fillers      | Filling machines (volumetric, piston, or gravimetric) — also cap on combined fill/cap monoblocks |
| Cosmetic Labellers    | Labelling machines — also apply batch/date coding                                                |
| Cosmetic Case Packers | Case/carton packing machines                                                                     |
| Cosmetic Palletisers  | Palletising machines or stations                                                                 |
| Cosmetic QA           | Quality assurance station (shared)                                                               |

{% hint style="info" %}
Asset classes are **global** across the tenant. Prefix yours (e.g. `Cosmetic Lines`) so the cosmetics plant has its own classes instead of inheriting another site's model (e.g. an existing wine-bottling site that also uses generic `Lines`/`Fillers`). This keeps reporting, run-rate templates, and activity assignments scoped to the cosmetics line.
{% endhint %}

{% hint style="info" %}
This guide models lines where **capping is built into the filler** and **coding is built into the labeller**, and weight verification is an in-process check — so there are no separate **Capper**, **Coding**, or **Checkweigher** asset classes. If your plant runs those as standalone machines, add those classes and the matching assets.
{% endhint %}

Some plants may also have dedicated asset classes for:

* **Bulk Holding** - bulk/compounding tanks feeding the filler
* **Shrink Wrappers** - overwrap or shrink-wrap stations

**Go to Settings -> Asset Hierarchy -> Asset Class -> Create**

Create one asset class for each type listed above. See [Asset Class](/tillit/knowledge-base/setting-up-tillit/asset-hierarchy/asset-class.md) for details.
{% endstep %}

{% step %}

## Build the Asset Hierarchy

Assets represent the individual machines on each line. In a cosmetics plant the hierarchy follows this pattern:

```
Site
├── Line 1 (class: Cosmetic Lines)
│   ├── Line 1 Filler (class: Cosmetic Fillers)        ← also caps (capping merged into the filler)
│   ├── Line 1 Labeller (class: Cosmetic Labellers)    ← also codes (batch/date coding merged into the labeller)
│   ├── Line 1 Case Packer (class: Cosmetic Case Packers)
│   └── Line 1 Palletiser (class: Cosmetic Palletisers)
├── Line 2 (class: Cosmetic Lines)
│   ├── Line 2 Filler (class: Cosmetic Fillers)
│   ├── Line 2 Labeller (class: Cosmetic Labellers)
│   ├── Line 2 Case Packer (class: Cosmetic Case Packers)
│   └── Line 2 Palletiser (class: Cosmetic Palletisers)
├── ...additional lines...
└── QA (class: Cosmetic QA)  ← shared across all lines
```

### Key points

* **Filling lines** follow a linear flow: Filler -> Labeller -> Case Packer -> Palletiser.
* On these lines, **capping is performed on the filler** (combined fill/cap monoblock) and **batch/date coding is performed at the labeller**, so there are no separate Capper or Coder stations. Weight checks are captured as in-process quality checks rather than a dedicated checkweigher asset.
* Not every line has every station - some may share a palletiser.
* **Shared assets** like QA sit at the top level, not under a specific line.
* Use **Display Order** to control the sequence assets appear in the UI (e.g. 100, 200, 300).
* Each line is typically identified by a **work centre code** from the ERP (e.g. WC-LINE1).

**Go to Settings -> Asset Hierarchy -> Assets -> Create**

Create each asset, assign it to the correct asset class, and set the parent asset for child equipment. See [Asset](/tillit/knowledge-base/setting-up-tillit/asset-hierarchy/assets.md) for details.

{% hint style="info" %}
For sites with many assets, use the [Excel Add-in](/tillit/tools/excel-addin-v2/entity-data-source.md) to create assets in bulk.
{% endhint %}
{% endstep %}

{% step %}

## Configure Shifts

Shift templates define the working hours for each line. A cosmetics plant typically operates two shifts on weekdays:

| Shift Template | Start Time | Duration | Description                             |
| -------------- | ---------- | -------- | --------------------------------------- |
| Morning 8hr    | 06:00      | 8 hours  | Standard morning shift                  |
| Afternoon 8hr  | 14:00      | 8 hours  | Afternoon shift                         |
| Morning 10hr   | 06:00      | 10 hours | Extended morning shift                  |
| Afternoon 10hr | 16:00      | 10 hours | Extended afternoon shift                |
| 16x5           | --         | --       | 2-shift coverage (Mon-Fri, 06:00-22:00) |

### Creating shift schedules

Setting up shifts is a two-step process: first, you define the overall shift pattern (**Shift Template** and its **Items**); then, you link that pattern to your equipment using a **Shift Calendar**.

{% stepper %}
{% step %}

#### Create and Configure the Shift Template

1. Go to: **Settings -> Asset Hierarchy -> Shift Templates -> Create**.
2. Create the required shift templates.
3. Within each created template, go to: **Items**
4. Define the specific shift periods, including their start times and durations.

See [Creating a Shift Template](/tillit/knowledge-base/setting-up-tillit/asset-hierarchy/shifts/shift-patterns.md) for details.
{% endstep %}

{% step %}

#### Assign Shifts to Assets

Once your templates and items are ready, create calendars to map these schedules to the correct assets.

Since not every line runs the same schedule, calendars ensure each asset accurately reflects its real-world operating schedule.

1. Go to: **Settings -> Asset Hierarchy -> Calendars -> Create**.
2. Add your **Shift Template** as a calendar Item.
3. Select the relevant asset and apply the template.
   {% endstep %}
   {% endstepper %}
   {% endstep %}

{% step %}

## Set Up Units of Measure

Before creating materials and process variables, define the units of measure your site will use.

| Unit | Description                               |
| ---- | ----------------------------------------- |
| PC   | Pieces (bottles, caps, labels, cases)     |
| KG   | Kilograms (bulk product)                  |
| g    | Grams (fill weight)                       |
| mL   | Millilitres (fill volume)                 |
| mm   | Millimetres (label placement, dimensions) |
| %    | Percentage                                |
| EA   | Each                                      |

**Go to Settings -> Configuration -> Unit of Measure -> Create**

See [Unit of Measure](/tillit/knowledge-base/setting-up-tillit/configuration/unit-of-measure-uom.md) for details.
{% endstep %}

{% step %}

## Create Material Groups

Material groups categorise your raw materials, packaging components, and finished goods. For a cosmetics plant:

| Group          | Description                                            |
| -------------- | ------------------------------------------------------ |
| Finished Goods | Finished packaged cosmetics products (SKUs)            |
| Bulk           | Bulk/compounded product (formulations)                 |
| BOT            | Bottles, tubes, jars, and containers                   |
| CAP            | Caps, closures, pumps, and applicators                 |
| LAB            | Labels (front, back, neck, wrap)                       |
| CAR            | Cartons and cases (shelf-ready, shipper)               |
| PAL            | Pallets, slip sheets, stretch wrap, layer pads         |
| BTL            | Batch labels (blank and printed)                       |
| PKG            | Secondary packaging (gift boxes, sleeves, shrink wrap) |

**Go to Settings -> Material Definition -> Material Groups -> Create**

See [Material Group](/tillit/knowledge-base/setting-up-tillit/material-definition/material-group.md) for details.

{% hint style="info" %}
Match your material groups to how your ERP categorises components in the bill of materials. This makes order integration straightforward.
{% endhint %}
{% endstep %}

{% step %}

## Add Materials

Materials represent the specific items consumed or produced. A cosmetics plant typically has hundreds of materials across groups.

**Typical material types:**

* **Bulk products** - the compounded formulation (shampoo base, lotion, cream), measured in KG
* **Bottles/containers** - plastic bottles, tubes, jars, identified by volume and mould code
* **Closures** - caps, pumps, applicators, flip-tops
* **Labels** - front labels, back labels, often product-specific
* **Cases** - carton/shipper boxes, sized to the product (e.g. 6x300mL)
* **Batch labels** - blank paper labels for batch/lot marking
* **Finished goods** - the final packaged product (SKU)

**Go to Settings -> Material Definition -> Materials -> Create**

For bulk loading, use the [Excel Add-in](/tillit/tools/excel-addin-v2/entity-data-source.md) to import materials from a spreadsheet.

See [Material](/tillit/knowledge-base/setting-up-tillit/material-definition/material.md) for details.
{% endstep %}

{% step %}

## Define Attributes

Attributes store metadata against orders, materials, and assets. In a cosmetics filling plant, think of them as the product's "Manufacturing Specification Sheet" or identity card. They hold details about a work order, such as fragrance, colour, and package size. TilliT uses them to show relevant fields and calculate changeover times.

### Order Number Attributes

These attach to all work orders that share the same Order Number. They are useful when production orders are split into multiple operations but still need shared information. When orders are loaded via the API, these attribute values can be provided in the payload. See [Step 14](#integrate-order-loading-from-erp). Group them by purpose:

**Product & Batch**

| Attribute         | Data Type | Purpose                                  |
| ----------------- | --------- | ---------------------------------------- |
| MaterialNumber    | STRING    | ERP material/SKU code                    |
| BatchNumber       | STRING    | Production batch number                  |
| BulkBatchNumber   | STRING    | Bulk/compounding batch number            |
| BulkMaterialCode  | STRING    | Bulk material code from ERP              |
| BulkLotNumber     | STRING    | Bulk lot number for traceability         |
| BestBefore        | STRING    | Best-before / expiry date                |
| ProductionDate    | STRING    | Date the bulk was produced               |
| StorageConditions | STRING    | Storage temperature range (e.g. 10-30 C) |

**Fill Specifications**

| Attribute         | Data Type | Purpose                                        |
| ----------------- | --------- | ---------------------------------------------- |
| NominalFillVolume | NUMBER    | Nominal fill volume in mL                      |
| NominalFillWeight | NUMBER    | Nominal fill weight in g                       |
| MinFillWeight     | NUMBER    | Minimum acceptable fill weight                 |
| FillNozzles       | NUMBER    | Number of filler nozzles/heads in use          |
| ProductViscosity  | STRING    | Product viscosity category (low, medium, high) |

**Packaging Configuration**

| Attribute      | Data Type | Purpose                                              |
| -------------- | --------- | ---------------------------------------------------- |
| BottleCode     | STRING    | Bottle/container material code                       |
| ClosureCode    | STRING    | Cap/closure material code                            |
| ClosureType    | STRING    | Closure type (screw cap, pump, flip-top, applicator) |
| LabelCode      | STRING    | Label material code                                  |
| CaseConfig     | STRING    | Case packing configuration (e.g. 6x300mL)            |
| UnitsPerCase   | NUMBER    | Number of units per case                             |
| CaseDimensions | STRING    | Case dimensions (LxWxH in mm)                        |

**Palletising**

| Attribute       | Data Type | Purpose                             |
| --------------- | --------- | ----------------------------------- |
| PalletType      | STRING    | Pallet type (EURO, standard)        |
| CasesPerLayer   | NUMBER    | Cases per pallet layer              |
| LayersPerPallet | NUMBER    | Number of pallet layers             |
| CasesPerPallet  | NUMBER    | Total cases per pallet              |
| UnitsPerPallet  | NUMBER    | Total finished units per pallet     |
| LayerPad        | BOOLEAN   | Layer pad/divider between layers    |
| UnitWeight      | NUMBER    | Weight of a single packed unit (kg) |

**General**

| Attribute           | Data Type | Purpose                                       |
| ------------------- | --------- | --------------------------------------------- |
| EANCode             | STRING    | Consumer package EAN barcode                  |
| GS1String           | STRING    | Full GS1 barcode string for case label        |
| SpecialInstructions | STRING    | Special handling or production notes          |
| PreviousProduct     | STRING    | Previous product on line (for line clearance) |
| WorkCentre          | STRING    | ERP work centre code                          |

### Material Attributes

| Attribute       | Data Type | Purpose                                                    |
| --------------- | --------- | ---------------------------------------------------------- |
| ProductCategory | STRING    | Product category (shampoo, lotion, cream, body wash, etc.) |
| Fragrance       | STRING    | Fragrance family or code                                   |
| Colour          | STRING    | Product colour                                             |

**Go to Settings -> Configuration -> Attributes -> Create**

See [Attribute](/tillit/knowledge-base/setting-up-tillit/configuration/copy-of-attribute.md) for details.

{% hint style="info" %}
You do not need to create all attributes manually before loading orders. When you use the order upsert API in [Step 14](#integrate-order-loading-from-erp), any attribute that does not already exist will be created automatically.
{% endhint %}
{% endstep %}

{% step %}

## Set Up Process Variables

Process variables define the measurements and checks that operators capture during production. In cosmetics, fill weight and label placement are the most critical.

#### Fill Weight

| Process Variable | UoM | Upper Limit           | Lower Limit     | Notes                            |
| ---------------- | --- | --------------------- | --------------- | -------------------------------- |
| Fill Weight      | g   | `NominalFillWeight+5` | `MinFillWeight` | Referenced from order attributes |
| Tare Weight      | g   | --                    | --              | Bottle + closure empty weight    |

#### Label Placement

| Process Variable       | UoM | Upper Limit | Lower Limit | Notes                                   |
| ---------------------- | --- | ----------- | ----------- | --------------------------------------- |
| Label Height From Base | mm  | 13          | 9           | Distance from bottle base to label edge |
| Label Alignment        | mm  | 2           | -2          | Front-to-back label alignment offset    |

#### Checkweigher

| Process Variable    | UoM | Upper Limit            | Lower Limit       | Notes                            |
| ------------------- | --- | ---------------------- | ----------------- | -------------------------------- |
| Checkweigher Weight | g   | `NominalFillWeight+10` | `MinFillWeight-5` | In-line 100% weight verification |

#### Tolerance settings

Set a **target**, **upper limit** and **lower limit** on each measured process variable. The tolerance lives on the process variable (and can be overridden per order via the order's tolerances — see Step 14), so any activity item that measures it is judged automatically — **you don't add a separate "in tolerance?" checkbox**. Default tolerances for this plant:

| Process Variable       | Target | Lower | Upper | UoM |
| ---------------------- | ------ | ----- | ----- | --- |
| Fill Weight            | 315    | 310   | 320   | g   |
| Tare Weight            | 8      | 7     | 9     | g   |
| Checkweigher Weight    | 315    | 305   | 325   | g   |
| Label Height From Base | 11     | 9     | 13    | mm  |
| Label Alignment        | 0      | -2    | 2     | mm  |

**Go to Settings -> Configuration -> Process Variable -> Create**

See [Process Variable](/tillit/knowledge-base/setting-up-tillit/configuration/process-variable.md) for details.

{% hint style="info" %}
Process variables that reference attributes (like `NominalFillWeight`) will automatically pull the correct spec from the current work order. This means one activity template works for all products.
{% endhint %}

{% hint style="info" %}
When an activity item **measures** a process variable, set the item's tolerance type to **Process Variable** and link the PV. The operator enters the reading and the item flags out-of-tolerance against the PV's limits — no separate pass/fail field. The fill weight, tare weight, label height, and label alignment checks all work this way.
{% endhint %}
{% endstep %}

{% step %}

## Create Activity Classes

Activity classes group related activity templates in the UI. For a cosmetics filling plant:

| Activity Class | Purpose                                              |
| -------------- | ---------------------------------------------------- |
| Line Setup     | Line clearance, changeover, and startup checks       |
| Quality        | In-process quality checks (weight, label, visual)    |
| Machine Checks | Equipment verification and sensor testing            |
| Data Capture   | Material booking, batch logging, consumption records |
| Sampling       | Lab sample collection (start, during, end of batch)  |
| Cleaning       | CIP, line cleaning, and sanitation                   |
| End of Run     | End-of-batch and teardown activities                 |
| Palletising    | Pallet configuration and label verification          |

**Go to Settings -> Activity Template -> Activity Classes -> Create**

See [Activity Class](/tillit/knowledge-base/setting-up-tillit/activity-templates/activity-class.md) for details.
{% endstep %}

{% step %}

## Build Activity Templates

Activity templates are the digital forms that replace the paper-based operation system documents used on the production floor. A cosmetics plant typically has a comprehensive set covering GMP requirements.

### Core Activity Categories

**Pre-Start Preparation (on Order ready, before the order starts)**

These fire on the **Order ready** event — the order is staged and the line prepared so it can start cleanly. "Ready" precedes "start".

| Activity                         | Triggered by | Assigned to (where) |
| -------------------------------- | ------------ | ------------------- |
| Stage Order Materials            | Order ready  | Cosmetic Lines      |
| Bulk Product Hook-up             | Order ready  | Cosmetic Fillers    |
| Change Parts Setup               | Order ready  | Cosmetic Lines      |
| Label and Coding Reel Load       | Order ready  | Cosmetic Labellers  |
| Pre-Start Readiness Confirmation | Order ready  | Cosmetic Lines      |

**Line Setup & Clearance (before production starts)**

| Activity                         | Triggered by | Assigned to |
| -------------------------------- | ------------ | ----------- |
| Previous Product Clearance       | Order start  | operators   |
| Line Inspection & Cleaning       | Order start  | operators   |
| Wash & Disinfection Confirmation | Order start  | operators   |
| Capper Rejection Test            | Order start  | operators   |
| Rejection Sensor Test            | Order start  | operators   |
| Case Packer Program Verification | Order start  | operators   |
| Checkweigher Setup               | Order start  | operators   |
| Line Function Confirmation       | Order start  | operators   |

**Material & Batch Verification**

| Activity                      | Triggered by | Assigned to |
| ----------------------------- | ------------ | ----------- |
| Work Order Verification       | Order start  | operators   |
| Material Verification         | Order start  | operators   |
| Bulk Product Verification     | Order start  | operators   |
| Printed Material Verification | Order start  | operators   |
| EAN Barcode Verification      | Order start  | operators   |
| Material Booking Confirmation | Order start  | operators   |

**In-Process Quality Checks**

| Activity                   | Triggered by      | Assigned to |
| -------------------------- | ----------------- | ----------- |
| Closure Tightness Check    | Order start       | operators   |
| Closure Leak Test          | Interval (hourly) | operators   |
| Reject Lane Inspection     | Interval          | operators   |
| Visual Quality Check       | Interval          | operators   |
| Batch Marking Verification | Order start       | operators   |
| Fill Weight Check          | Interval (hourly) | operators   |
| Tare Verification          | Batch change      | operators   |
| Label Placement Check      | Order start       | operators   |

**Sampling**

| Activity                   | Triggered by | Assigned to |
| -------------------------- | ------------ | ----------- |
| Start-of-Batch Lab Samples | Order start  | operators   |
| Mid-Batch Lab Samples      | Interval     | operators   |
| End-of-Batch Lab Samples   | Order end    | operators   |

Lab sample activities collect physical samples from the line for laboratory testing. Each activity should prompt the operator to record the sample details and confirm the sample has been taken. Below are example form structures for each sampling point.

**Start-of-Batch Lab Samples** - collected from the first units off the line to confirm the product meets specification before full production begins.

| Form Item             | Type             | Example / Notes                                          |
| --------------------- | ---------------- | -------------------------------------------------------- |
| Sample Time           | Date/Time        | Auto-filled with current timestamp                       |
| Batch Number          | Text (read-only) | Pulled from order attribute `BatchNumber`                |
| Bulk Batch Number     | Text (read-only) | Pulled from order attribute `BulkBatchNumber`            |
| Fill Weight Sample 1  | Number (g)       | Weigh first sample unit                                  |
| Fill Weight Sample 2  | Number (g)       | Weigh second sample unit                                 |
| Fill Weight Sample 3  | Number (g)       | Weigh third sample unit                                  |
| Appearance Check      | Select           | Clear / Cloudy / Off-colour / Contains particles         |
| Fragrance Check       | Select           | Correct / Incorrect / Weak / Strong                      |
| Viscosity Check       | Select           | Within spec / Too thin / Too thick                       |
| pH Reading            | Number           | Measured with pH meter (e.g. target 5.0-6.5 for shampoo) |
| Closure Torque Sample | Number (Nm)      | Torque test on 3 units (e.g. target 1.2-1.8 Nm)          |
| Label Adhesion OK     | Checkbox         | Confirm label is firmly adhered, no peeling or bubbling  |
| Sample Sent to Lab    | Checkbox         | Operator confirms physical sample placed in lab tray     |
| Operator Comments     | Text             | Free-text field for any observations                     |

**Mid-Batch Lab Samples** - collected at regular intervals (e.g. every 2 hours or every 3000 units) during the run to monitor ongoing quality.

| Form Item                | Type        | Example / Notes                                      |
| ------------------------ | ----------- | ---------------------------------------------------- |
| Sample Time              | Date/Time   | Auto-filled with current timestamp                   |
| Units Produced at Sample | Number      | Count at time of sampling                            |
| Fill Weight Sample 1     | Number (g)  | Weigh first sample unit                              |
| Fill Weight Sample 2     | Number (g)  | Weigh second sample unit                             |
| Fill Weight Sample 3     | Number (g)  | Weigh third sample unit                              |
| Average Fill Weight      | Number (g)  | Auto-calculated from samples                         |
| Appearance Check         | Select      | Clear / Cloudy / Off-colour / Contains particles     |
| Viscosity Check          | Select      | Within spec / Too thin / Too thick                   |
| pH Reading               | Number      | pH meter reading                                     |
| Closure Torque Sample    | Number (Nm) | Torque test on 3 units                               |
| Label Placement OK       | Checkbox    | Confirm label height and alignment within spec       |
| Print Quality OK         | Checkbox    | Batch code, expiry date, and EAN legible             |
| Micro Swab Taken         | Checkbox    | If required by GMP schedule (e.g. every 4 hours)     |
| Sample Sent to Lab       | Checkbox    | Operator confirms physical sample placed in lab tray |
| Operator Comments        | Text        | Free-text for drift observations or adjustments made |

**End-of-Batch Lab Samples** - collected from the last units off the line to confirm the product remained within specification throughout the run.

| Form Item                    | Type               | Example / Notes                                       |
| ---------------------------- | ------------------ | ----------------------------------------------------- |
| Sample Time                  | Date/Time          | Auto-filled with current timestamp                    |
| Total Units Produced         | Number (read-only) | Final production count                                |
| Fill Weight Sample 1         | Number (g)         | Weigh first sample unit                               |
| Fill Weight Sample 2         | Number (g)         | Weigh second sample unit                              |
| Fill Weight Sample 3         | Number (g)         | Weigh third sample unit                               |
| Appearance Check             | Select             | Clear / Cloudy / Off-colour / Contains particles      |
| Fragrance Check              | Select             | Correct / Incorrect / Weak / Strong                   |
| Viscosity Check              | Select             | Within spec / Too thin / Too thick                    |
| pH Reading                   | Number             | pH meter reading                                      |
| Closure Torque Sample        | Number (Nm)        | Torque test on 3 units                                |
| Retention Sample Collected   | Checkbox           | Retain sample stored for shelf-life stability testing |
| Retention Sample Quantity    | Number             | Number of units retained (e.g. 6)                     |
| Micro Swab Taken             | Checkbox           | End-of-batch environmental swab if required           |
| Sample Sent to Lab           | Checkbox           | Operator confirms physical sample placed in lab tray  |
| Batch Release Recommendation | Select             | Pass / Conditional / Fail                             |
| Operator Comments            | Text               | Summary observations from the run                     |

{% hint style="info" %}
Retention samples are a GMP requirement - most cosmetics plants retain 6-12 units per batch for stability and complaint investigation purposes. The retention period is typically equal to the product shelf life plus one year.
{% endhint %}

**Packing & Palletising**

| Activity                       | Triggered by | Assigned to            |
| ------------------------------ | ------------ | ---------------------- |
| Case Packing Verification      | Order start  | operators              |
| Case Label Verification        | Order start  | operators              |
| Pallet Configuration Check     | Order start  | operators              |
| Transfer Quantity Confirmation | Order end    | operators, supervisors |

**End of Run**

| Activity                           | Triggered by | Assigned to            |
| ---------------------------------- | ------------ | ---------------------- |
| Case Packer Cleaning               | Order end    | operators              |
| Line Cleaning & Teardown           | Order end    | operators              |
| Complaint/Reject Sample Collection | Order end    | operators              |
| Material Return & Verification     | Order end    | operators              |
| Run Values Recording               | Order end    | operators              |
| Deviation Log                      | Manual       | operators, supervisors |

### Form item types

Each form item has a **data type** that controls how it is captured and judged. Choose the right one — for a GMP record the difference matters:

| Notation     | Item data type                             | Use it for                                                                                                                                                                                                                       |
| ------------ | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **P/F**      | **Pass / Fail**                            | A quality **verdict** — the operator records pass or fail, a fail is a recorded non-conformance that can block the order, trigger an event, or require a comment. Use for every GMP check/confirmation.                          |
| **# → PV**   | **Number with Process-Variable tolerance** | A **measurement** judged automatically against a process variable's target + upper/lower limits (set the item's *tolerance type* to **Process Variable**). The reading itself flags in/out of spec — no separate pass/fail item. |
| **#**        | **Number**                                 | A plain count or value with no tolerance (e.g. units produced, reject count).                                                                                                                                                    |
| **barcode**  | **Barcode**                                | Operator **scans** a code; validate by length/fields (e.g. EAN-13) or GS1 structure.                                                                                                                                             |
| **material** | **Material**                               | Scan or select a material; **validates the scan against the order's expected material** (via the material's barcode reference).                                                                                                  |
| *txt*        | **Text**                                   | Free text or a reference code (batch number, operator name).                                                                                                                                                                     |
| ⏱            | **Date / Time**                            | Timestamps (e.g. sample time).                                                                                                                                                                                                   |

{% hint style="warning" %}
**Pass/Fail, not Boolean.** A generic Boolean (true/false) is just data; a **Pass/Fail** item is a quality verdict that TilliT treats as a check result — it drives compliance status, escalation, and order-blocking. Use **Pass/Fail** for all checks/confirmations. And never pair a measurement with a "within spec?" Pass/Fail — put the limits on the **process variable** and let the **# → PV** measurement decide.
{% endhint %}

Every activity carries the items operators complete. The three lab sampling activities are detailed in full above (their fill-weight, torque, and pH readings are **# → PV** measurements); the rest use the concise sets below.

**Pre-Start Preparation (Order ready)**

| Activity                         | Form items                                                                                |
| -------------------------------- | ----------------------------------------------------------------------------------------- |
| Stage Order Materials            | P/F Bulk Staged, P/F Bottles Staged, P/F Caps Staged, P/F Labels Staged, P/F Cases Staged |
| Bulk Product Hook-up             | *Bulk Batch Number*, P/F Bulk Connected, P/F Lines Purged                                 |
| Change Parts Setup               | *Bottle Size*, P/F Change Parts Fitted, *Closure Type*, P/F Tooling Set                   |
| Label and Coding Reel Load       | *Label Code*, P/F Reel Loaded, P/F Coding Ribbon Loaded, P/F Print Verified               |
| Pre-Start Readiness Confirmation | P/F All Materials Staged, P/F Line Set Up, P/F Ready to Start, *Confirmed By*             |

**Line Setup & Clearance**

| Activity                         | Form items                                                               |
| -------------------------------- | ------------------------------------------------------------------------ |
| Previous Product Clearance       | *Previous Product*, P/F Line Cleared of Previous Product, *Cleared By*   |
| Line Inspection & Cleaning       | P/F Line Visually Clean, P/F No Foreign Material Present, *Inspected By* |
| Wash & Disinfection Confirmation | P/F Wash Completed, *Disinfectant Used*, P/F Contact Time Met            |
| Capper Rejection Test            | P/F Test Cap Rejected, P/F Reject Mechanism OK                           |
| Rejection Sensor Test            | P/F Sensor Triggered, P/F Reject Confirmed                               |
| Case Packer Program Verification | *Program Number*, P/F Correct Program Loaded                             |
| Checkweigher Setup               | **# Checkweigher Weight → PV** (g), P/F Calibration Check Passed         |
| Line Function Confirmation       | P/F All Stations Operational, *Confirmed By*                             |

**Material & Batch Verification**

| Activity                      | Form items                                                                                                  |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------- |
| Work Order Verification       | P/F Order Number Correct, P/F Material Matches Order                                                        |
| Material Verification         | *Material Code*, *Batch Number*, P/F Material Verified                                                      |
| Bulk Product Verification     | *Bulk Batch Number*, *Bulk Material Code*, P/F Bulk Verified                                                |
| Printed Material Verification | *Label Code*, P/F Print Correct                                                                             |
| EAN Barcode Verification      | **barcode** Scan EAN (EAN-13), **material** Verify Material (scan is validated against the order's product) |
| Material Booking Confirmation | # Quantity Booked, P/F Booking Confirmed                                                                    |

**In-Process Quality**

| Activity                   | Form items                                                    |
| -------------------------- | ------------------------------------------------------------- |
| Closure Tightness Check    | **# Torque Reading → PV: Closure Torque**                     |
| Closure Leak Test          | # Units Tested, P/F Leak Detected                             |
| Reject Lane Inspection     | P/F Rejects Present, # Reject Count                           |
| Visual Quality Check       | P/F Appearance OK, *Defects Noted*                            |
| Batch Marking Verification | P/F Batch Code Legible, P/F Expiry Date Correct               |
| Fill Weight Check          | **# Fill Weight → PV: Fill Weight** (g)                       |
| Tare Verification          | **# Tare Weight → PV: Tare Weight** (g)                       |
| Label Placement Check      | **# Label Height → PV** (mm), **# Label Alignment → PV** (mm) |

**Packing & Palletising**

| Activity                       | Form items                                                 |
| ------------------------------ | ---------------------------------------------------------- |
| Case Packing Verification      | # Units Per Case, P/F Case Config Correct                  |
| Case Label Verification        | P/F Case Label Correct, P/F GS1 Scan OK                    |
| Pallet Configuration Check     | # Cases Per Layer, # Layers Per Pallet, P/F Config Correct |
| Transfer Quantity Confirmation | # Quantity Transferred, *Confirmed By*                     |

**End of Run**

| Activity                           | Form items                                                    |
| ---------------------------------- | ------------------------------------------------------------- |
| Case Packer Cleaning               | P/F Cleaning Completed, *Cleaned By*                          |
| Line Cleaning & Teardown           | P/F Teardown Completed, P/F Line Clean                        |
| Complaint/Reject Sample Collection | # Samples Collected, P/F Samples Stored                       |
| Material Return & Verification     | *Material Returned*, # Quantity Returned, P/F Return Verified |
| Run Values Recording               | # Total Produced, # Total Rejects, # Downtime Minutes         |
| Deviation Log                      | *Deviation Description*, *Action Taken*                       |

{% hint style="info" %}
These are starter item sets to get each activity functional. Expand them with option lists, barcode scans, and calculated fields as your GMP procedures require.
{% endhint %}

### When and where (triggers and placement)

Each activity needs a **When** (a trigger / *activity starter*) and a **Where** (an *assignment* to an asset class). For these lines:

**When — triggers**

| Trigger      | Event                              | Activities                                                                                                                                                                                              |
| ------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Order ready  | `Order ready`                      | Pre-start prep: Stage Order Materials, Bulk Product Hook-up, Change Parts Setup, Label and Coding Reel Load, Pre-Start Readiness Confirmation                                                           |
| Order start  | `Order started`                    | All line-setup & clearance, all material/batch verification, Closure Tightness, Batch Marking, Label Placement, Start-of-Batch Lab Samples, Case Packing/Label Verification, Pallet Configuration Check |
| Hourly       | `Order started` + 60-min interval  | Closure Leak Test, Fill Weight Check                                                                                                                                                                    |
| Periodic     | `Order started` + 120-min interval | Reject Lane Inspection, Visual Quality Check, Mid-Batch Lab Samples                                                                                                                                     |
| Batch change | `Order changeover started`         | Tare Verification                                                                                                                                                                                       |
| Order end    | `Order completed`                  | End-of-Batch Lab Samples, Transfer Quantity Confirmation, Case Packer Cleaning, Line Cleaning & Teardown, Complaint/Reject Sample Collection, Material Return & Verification, Run Values Recording      |
| Manual       | `Activity Manual Start`            | Deviation Log                                                                                                                                                                                           |

**Where — assigned to asset class**

| Asset class           | Activities                                                                                                                                                               |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Cosmetic Lines        | Clearance/inspection/wash, Line Function, Work Order/Material/Bulk/Booking verification, Reject Lane, Visual Quality, all Lab Samples, Transfer Quantity, all End-of-Run |
| Cosmetic Fillers      | Capper Rejection Test, Rejection Sensor Test, Checkweigher Setup, Closure Tightness, Closure Leak, Fill Weight, Tare Verification (capping + weight live on the filler)  |
| Cosmetic Labellers    | Printed Material & EAN Verification, Batch Marking, Label Placement (labelling + coding)                                                                                 |
| Cosmetic Case Packers | Case Packer Program Verification, Case Packing & Case Label Verification, Case Packer Cleaning                                                                           |
| Cosmetic Palletisers  | Pallet Configuration Check                                                                                                                                               |

{% hint style="info" %}
**When** = an *Activity Starter* (event type, plus an interval for periodic checks). **Where** = an *Activity Assignment* binding the template + starter to an asset class. Assigning to a class (e.g. `Cosmetic Fillers`) applies the activity to that station on every line automatically. Interval checks combine the start event with a repeat interval (e.g. every 60 minutes after the order starts).
{% endhint %}

### Building an activity template

For each activity, you need to:

1. **Create the template** with a name and activity key.
2. **Assign it to an activity class.**
3. **Set the "Claimable By" field** to define who can see and claim the activity.
4. **Configure the trigger** to define when it fires.
5. **Build the form items** that operators fill in.

**Go to Settings -> Activity Template -> Activity Template -> Create**

See [Creating an Activity](/tillit/knowledge-base/setting-up-tillit/activity-templates/activity/creating-an-activity.md) for a complete walkthrough.

For trigger types, see [When](/tillit/knowledge-base/setting-up-tillit/activity-templates/activity/when.md) and [Where](/tillit/knowledge-base/setting-up-tillit/activity-templates/activity/where.md).

{% hint style="info" %}
Start with the line setup and clearance activities first. These are the GMP-critical checks that must happen before every production run. Expand to in-process and end-of-run activities once the team is comfortable.
{% endhint %}
{% endstep %}

{% step %}

## Configure Order Templates

Order templates define how a work order is executed across a line. They specify which machines within the line participate in the order and the operation type for each stage.

#### Filling Line (Line 1 example)

| Order Template     | Operation    | From Asset | To Asset           |
| ------------------ | ------------ | ---------- | ------------------ |
| Line 1 Filler      | FILLER       | Line 1     | Line 1 Filler      |
| Line 1 Labeller    | LABELLER     | Line 1     | Line 1 Labeller    |
| Line 1 Case Packer | CASE\_PACKER | Line 1     | Line 1 Case Packer |
| Line 1 Palletiser  | PALLETISER   | Line 1     | Line 1 Palletiser  |
| QA                 | QA           | Line 1     | QA                 |

Repeat this pattern for each line. (No separate Capper/Coder/Checkweigher templates — capping runs on the filler and coding on the labeller.)

### Order template components

Each order template can declare the **material groups** it consumes, so the bill of materials cascades to the right station when an order is created. For these combined lines:

| Order Template | Consumes (material groups)                                     |
| -------------- | -------------------------------------------------------------- |
| Filler         | Bulk, BOT (bottles), CAP (closures — capping is on the filler) |
| Labeller       | LAB (labels)                                                   |
| Case Packer    | CAR (cases), BTL (batch labels)                                |
| Palletiser     | PAL (pallets)                                                  |
| QA             | —                                                              |

**Go to Settings -> Asset Hierarchy -> Order Templates -> Create**

See [Order Template](/tillit/knowledge-base/setting-up-tillit/asset-hierarchy/order-template.md) for details.
{% endstep %}

{% step %}

## Set Up the Scheduler

Once Digital Operations is configured, you can set up the Scheduler to plan and optimise production runs.

{% stepper %}
{% step %}

### Create the Data Template

The **Default Data Template** links the Scheduler to the Digital Operations site and connects scheduler equipment to live production data.

In newly provisioned environments, sections such as Equipment, Availability, Optimisation, and Changeovers may not be available until a Data Template has been created.

**Go to Scheduler -> Data Templates -> Create**

Create the Default Data Template.

See [Data Templates](/tillit/knowledge-base/scheduler/data-templates.md) for details.
{% endstep %}

{% step %}

### Create Scheduler Equipment

Each filling line becomes a piece of equipment in the Scheduler:

| Equipment (Name) | External ID (Code) | Display Order |
| ---------------- | ------------------ | ------------- |
| Line 1           | Line 1             | 1             |
| Line 2           | Line 2             | 2             |
| Line 3           | Line 3             | 3             |

See [Equipment](/tillit/knowledge-base/scheduler/data-templates/equipment.md) for details.
{% endstep %}

{% step %}

### Create Availability Templates

Typical availability patterns for a cosmetics plant:

| Template (Code) | Name             | Description                           | Days    |
| --------------- | ---------------- | ------------------------------------- | ------- |
| 16x5            | 16 Hours Mon-Fri | Mon-Fri, 06:00-22:00 (2 shifts)       | Mon-Fri |
| 8x5             | 8 Hours Mon-Fri  | Mon-Fri, 06:00-14:00 (day shift only) | Mon-Fri |

After creating the templates, **assign one to each line** - a line with no availability has no working calendar and the scheduler can't place work on it. Assign `16x5` to all three lines for two-shift coverage (or `8x5` for a day-shift-only line).

{% hint style="warning" %}
When you assign an availability to equipment you give it a **calendar date range**. Keep this to the scheduling horizon you actually need (e.g. one year) - **do not** use an open-ended far-future end date. The scheduler materialises every shift in the range when it loads the line, so a multi-decade window generates tens of thousands of periods per line and the schedule view will fail to load. A one-year window is plenty and can be rolled forward later.
{% endhint %}

See [Availability](/tillit/knowledge-base/scheduler/data-templates/availability.md) for details.
{% endstep %}

{% step %}

### Define Optimisation Properties

Optimisation properties are the characteristics the scheduler uses to sequence orders and calculate changeover times. For cosmetics filling:

| Property (Name)  | Example Values                                 | Description                                             |
| ---------------- | ---------------------------------------------- | ------------------------------------------------------- |
| Product Category | Shampoo, Lotion, Cream, Body Wash, Conditioner | Drives cleaning requirements between categories         |
| Fragrance        | Unscented, Floral, Citrus, Fresh Mint...       | Fragrance changes may require line flush                |
| Colour           | Clear, White, Pink, Blue...                    | Dark-to-light transitions need more cleaning            |
| Bottle Size      | 100mL, 200mL, 300mL, 500mL                     | Size changes require filler head and packer adjustments |
| Closure Type     | Screw Cap, Pump, Flip-Top, Applicator          | Closure changes require capper changeover               |

{% hint style="info" %}
A property only affects sequencing if your **finished-good materials carry its value**. Each finished good should be tagged with all five properties (e.g. *Moisturising Shampoo 300mL* = Product Category `Shampoo`, Fragrance `Floral`, Colour `Clear`, Bottle Size `300mL`, Closure Type `Screw Cap`). The scheduler reads these values off the order's product and applies the matching changeover rule. Components (bottles, caps, labels) don't need optimisation properties.
{% endhint %}

See [Optimisation](/tillit/knowledge-base/scheduler/data-templates/optimisation.md) for details.
{% endstep %}

{% step %}

### Configure Changeover Rules

Changeovers define the downtime required to clean or mechanically reconfigure a line when switching between products. In cosmetics, changeovers are driven by cleaning and mechanical adjustments.

**Key changeover rules for cosmetics filling:**

* **Same product category, same fragrance** - 15-30 minutes (mechanical changeover only)
* **Same category, different fragrance** - 30-60 minutes (partial line flush)
* **Different product category** - 60-120 minutes (full wash and disinfection)
* **Colour change (dark to light)** - additional 30-60 minutes for cleaning
* **Bottle size change** - 20-40 minutes (filler, capper, labeller, case packer adjustments)
* **Closure type change** - 15-30 minutes (capper changeover)

Changeover times are entered as a matrix of from-value to to-value for each optimisation property.

These rules are grouped into a **changeover set** (e.g. *Cosmetics Filling*). Remember to **assign that changeover set to each line** - a line not linked to a set won't apply any changeover times when sequencing.

See [Changeovers](/tillit/knowledge-base/scheduler/data-templates/changeovers.md) for details.
{% endstep %}

{% step %}

### Define Operations and Production Routes

Equipment, availability, and changeovers tell the scheduler *where* and *when* it can work. **Operations** tell it *what* the work is and *how long* it takes.

The model is a small hierarchy:

```
Operation (one per finished good - code = the product's material code)
  └── Route
        └── Segment "Fill and Pack"
              ├── Consumed materials  - the bill of materials (bulk, bottle, cap, label, case, batch label)
              ├── Produced material   - the one finished good this operation makes
              └── Run rate            - throughput in units per second
```

For each finished good, create an operation with a single **Fill and Pack** segment that:

* **consumes** its components - e.g. *Moisturising Shampoo 300mL* consumes the shampoo bulk, a 300mL bottle, a screw cap, the 300mL front label, a 6x300mL case, and a batch label;
* **produces** the one finished good (the SKU); and
* declares a **run rate** in units per second. The scheduler derives an order's duration from `quantity ÷ run rate` (e.g. 10,000 units at 2 units/s ≈ 1.4 hours of run time, before changeovers). Smaller bottles typically run faster (2.0-2.5 u/s) than larger ones (≈1.5 u/s); and
* declares an **equipment requirement**. Match the segment to an **equipment class** (e.g. *Lines*) rather than a single line, so the scheduler can place the order on **any** line in that class. Without an equipment requirement the scheduler has nowhere to run the order.

{% hint style="info" %}
The run rate replaces a fixed duration: a segment is timed *either* by a fixed duration *or* by a throughput rate. For filling lines, the per-product run rate is what you want, since duration then scales with order quantity.
{% endhint %}

See [Operations](/tillit/knowledge-base/scheduler/data-templates/operations.md) for details.
{% endstep %}

{% step %}

### Load Scheduler Data

For bulk loading of scheduler master data, including equipment properties, availability calendars, and changeover matrices, use the Excel Add-in.

See [Loading data with Excel Add-in](/tillit/tools/excel-addin-v2/entity-data-source.md) for details.
{% endstep %}
{% endstepper %}
{% endstep %}

{% step %}

## Integrate Order Loading from ERP

In most cosmetics plants, production orders originate in an ERP system such as SAP and need to flow into TilliT automatically. Use the `POST:/core/order-instances/upsert` endpoint to load orders with all their attributes, tolerances, and components.

### Order Payload Structure

The upsert endpoint accepts an array of orders. Below is an example based on a typical cosmetics production order for a 300mL shampoo:

```json
[
  {
    "orderNumber": "WO-20260428-001",
    "orderDate": "2026-04-21",
    "dueDate": "2026-04-29",
    "scheduledStart": "2026-04-28T06:00:00",
    "scheduledEnd": "2026-04-29T14:00:00",
    "quantityTarget": 9500,
    "defaultRunRate": 120,
    "status": "NEW",
    "name": "Moisturising Shampoo 300mL",
    "asset": "Line 1",
    "batchNumber": "B26041",
    "material": {
      "externalId": "FG-SH-300",
      "name": "Moisturising Shampoo 300mL"
    },
    "attributes": [
      { "attributeName": "MaterialNumber", "value": "FG-SH-300" },
      { "attributeName": "BatchNumber", "value": "B26041" },
      { "attributeName": "BulkMaterialCode", "value": "BLK-SH-001" },
      { "attributeName": "BulkBatchNumber", "value": "B26040" },
      { "attributeName": "BulkLotNumber", "value": "LOT-2026-04-001" },
      { "attributeName": "ProductionDate", "value": "2026-04-22" },
      { "attributeName": "BestBefore", "value": "2029-04" },
      { "attributeName": "StorageConditions", "value": "10-30 C" },
      { "attributeName": "NominalFillVolume", "value": "300" },
      { "attributeName": "NominalFillWeight", "value": "315" },
      { "attributeName": "MinFillWeight", "value": "310" },
      { "attributeName": "BottleCode", "value": "BOT-300-RND" },
      { "attributeName": "ClosureCode", "value": "CAP-SC-28" },
      { "attributeName": "ClosureType", "value": "Screw Cap" },
      { "attributeName": "LabelCode", "value": "LAB-SH-300" },
      { "attributeName": "CaseConfig", "value": "6x300mL" },
      { "attributeName": "UnitsPerCase", "value": "6" },
      { "attributeName": "PalletType", "value": "EURO" },
      { "attributeName": "CasesPerLayer", "value": "55" },
      { "attributeName": "LayersPerPallet", "value": "4" },
      { "attributeName": "CasesPerPallet", "value": "220" },
      { "attributeName": "UnitsPerPallet", "value": "1320" },
      { "attributeName": "LayerPad", "value": "true" },
      { "attributeName": "UnitWeight", "value": "1.8" },
      { "attributeName": "EANCode", "value": "5901234123457" },
      { "attributeName": "WorkCentre", "value": "WC-LINE1" },
      { "attributeName": "SpecialInstructions", "value": "" }
    ],
    "tolerances": [
      { "processVariableName": "Fill Weight", "target": 315, "lowerLimit": 310, "upperLimit": 320 },
      { "processVariableName": "Checkweigher Weight", "target": 315, "lowerLimit": 305, "upperLimit": 325 },
      { "processVariableName": "Label Height From Base", "target": 11, "lowerLimit": 9, "upperLimit": 13 }
    ],
    "orderComponents": [
      { "componentExternalId": "BOT-300-RND", "componentGroup": "BOT", "componentName": "300mL Round Bottle", "target": 9785 },
      { "componentExternalId": "CAP-SC-28", "componentGroup": "CAP", "componentName": "28mm Screw Cap", "target": 9785 },
      { "componentExternalId": "LAB-SH-300", "componentGroup": "LAB", "componentName": "Shampoo Front Label 300mL", "target": 10450 },
      { "componentExternalId": "CAR-6x300", "componentGroup": "CAR", "componentName": "Case 6x300mL", "target": 1635 },
      { "componentExternalId": "BTL-100x74", "componentGroup": "BTL", "componentName": "Batch Label 100x74mm", "target": 1666 },
      { "componentExternalId": "BLK-SH-001", "componentGroup": "Bulk", "componentName": "Moisturising Shampoo Bulk", "target": 2994 }
    ]
  }
]
```

### Key points

* **`asset`** - set to the parent line name. If order templates are configured in [Step 12](#configure-order-templates), the order automatically cascades to child assets.
* **`batchNumber`** - the production batch number from the ERP. This is critical for GMP traceability.
* **`attributes`** - all values are strings, even for `BOOLEAN` and `NUMBER` types.
* **`tolerances`** - override the default process variable limits for this specific order.
* **`orderComponents`** - the bill of materials for the order. Quantities can include overages.
* **Upsert behaviour** - if you send a work order that matches an existing combination of `orderNumber`, `operation`, and `asset`, TilliT updates the existing order instead of creating a duplicate.
* **Auto-creation** - materials, attributes, UoMs, and tolerances that do not already exist will be created automatically.

### Typical attribute categories in the payload

| Category        | Attributes                                                                                | Purpose                              |
| --------------- | ----------------------------------------------------------------------------------------- | ------------------------------------ |
| Product & batch | MaterialNumber, BatchNumber, BulkBatchNumber, BulkMaterialCode, BulkLotNumber, BestBefore | GMP traceability                     |
| Fill specs      | NominalFillVolume, NominalFillWeight, MinFillWeight, FillNozzles, ProductViscosity        | Filler setup and weight checks       |
| Packaging       | BottleCode, ClosureCode, ClosureType, LabelCode, CaseConfig, UnitsPerCase                 | Line setup and material verification |
| Palletising     | PalletType, CasesPerLayer, LayersPerPallet, CasesPerPallet, UnitsPerPallet, LayerPad      | Pallet build configuration           |
| Barcoding       | EANCode, GS1String                                                                        | Barcode verification and case labels |
| General         | SpecialInstructions, WorkCentre, PreviousProduct                                          | Operator notes and line clearance    |

For the full API reference, see [Upload Production Schedule](https://help.tillit.cloud/api/developer-guides/guide-to-using-rest-api/examples/upload-production-schedule).
{% endstep %}

{% step %}

## Create Your First Work Order

With all master data in place, you can test by creating a work order manually:

1. Navigate to the line where you want to run the order.
2. Click **Create Order**.
3. Select the material to produce.
4. Enter the quantity and batch number.
5. Fill in the order number attributes.
6. Start the order.

When the order starts, TilliT automatically triggers the configured activities and the order flows through each machine according to the order template.

See [Create adhoc Order](/tillit/knowledge-base/everyday-usage/orders/create-adhoc-order.md) and [Start an Order](/tillit/getting-started/start-the-order.md) for details.
{% endstep %}

{% step %}

## Schedule Production (Scheduler)

With the scheduler configured, you can now plan production:

1. Open the **Scheduler**.
2. Import orders from your ERP or create them manually.
3. Assign orders to lines.
4. Let the scheduler optimise the sequence based on changeover rules.
5. Publish the schedule to Digital Operations.

### Scheduler orders

A scheduler order is lighter than a Digital Operations work order - it tells the optimiser *what to make and by when*, and references the **operation** (the finished good) rather than carrying the full BOM and attributes:

| Field                     | Example                 | Notes                                                                                                          |
| ------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------- |
| Order code                | WO-2606-001             | Unique key (upserts match on it)                                                                               |
| Operation                 | FG-SH-300               | The finished good's operation (defines BOM + run rate)                                                         |
| Quantity                  | 10000                   | In finished units; duration = quantity ÷ run rate                                                              |
| Earliest start / Due date | 2026-06-01 / 2026-06-05 | The window the optimiser must fit the run into                                                                 |
| Priority                  | 1-5                     | Relative importance when sequencing                                                                            |
| Status                    | **Planned**             | Load new orders as `Planned` - the optimiser plans these. (`Released` is for orders already committed/locked.) |

{% hint style="info" %}
New orders should be created with status **Planned** so the scheduler is free to place and sequence them. Scheduler orders are scoped to the **location**, not the data template - so a site whose lines share one location shares one order pool.
{% endhint %}

To load a backlog (e.g. two weeks of orders) in bulk, upsert them via the scheduler order API or the Excel Add-in, then optimise.

See [How to Schedule](/tillit/knowledge-base/scheduler/getting-started.md) and [Scheduler to Digital Operations integration](/tillit/knowledge-base/scheduler/execution.md) for details.
{% endstep %}
{% endstepper %}

***

## Summary Checklist

Use this checklist to track your progress:

* [ ] Site created with correct timezone
* [ ] Asset classes defined, Cosmetic-prefixed so they don't inherit another site's model (Cosmetic Lines, Cosmetic Fillers, Cosmetic Labellers, Cosmetic Case Packers, Cosmetic Palletisers, Cosmetic QA — capping on filler, coding on labeller)
* [ ] Assets created with correct parent-child hierarchy
* [ ] Shift templates configured (morning, afternoon, 16x5 patterns)
* [ ] Units of measure defined (PC, KG, g, mL, mm, %)
* [ ] Material groups created (Finished Goods, Bulk, BOT, CAP, LAB, CAR, PAL, BTL)
* [ ] Materials loaded (bulk products, bottles, caps, labels, cases, finished goods)
* [ ] Attributes defined (product & batch, fill specs, packaging, palletising, barcoding)
* [ ] Process variables configured (fill weight, label placement, checkweigher)
* [ ] Activity classes created (Line Setup, Quality, Machine Checks, Sampling, End of Run, etc.)
* [ ] Activity templates built for GMP-critical checks (line clearance, material verification, quality)
* [ ] Each activity given a **When** (trigger/starter) and **Where** (assignment to an asset class)
* [ ] Order templates mapped for each line
* [ ] Scheduler equipment created
* [ ] Availability templates configured and **assigned to each line** (bounded date range, \~1 year)
* [ ] Optimisation properties defined (Product Category, Fragrance, Colour, Bottle Size, Closure Type)
* [ ] Finished-good materials tagged with their optimisation property values
* [ ] Changeover rules entered and the changeover set assigned to each line
* [ ] Operations created (one per finished good: Fill and Pack segment with consumed BOM, produced finished good, run rate in units/sec, and an equipment-class requirement so any line can run it)
* [ ] Scheduler orders loaded as **Planned** (operation, quantity, start/due, priority)
* [ ] Order integration configured and payload tested
* [ ] First work order tested end-to-end
* [ ] Production scheduled and optimised end-to-end

***

## Related Articles

* [Planning Overview](/tillit/planning/overview.md)
* [Data Gathering Checklist](/tillit/planning/data-gathering/checklist.md)
* [Upload Production Schedule (API)](https://help.tillit.cloud/api/developer-guides/guide-to-using-rest-api/examples/upload-production-schedule)
* [Entity Data Source](/tillit/tools/excel-addin-v2/entity-data-source.md)
