Continuous Flows#
Overview#
The Continuous Flow feature aims to improve the handling of scenarios where parts of a lot Material can gradually move to the next step while the rest of the lot finishes the previous process Step.
It allows partial chunks of the lot to be processed in parallel in different steps, while preserving the concept of a single lot grouping. Step execution activities such as Checklists and Data Collections are applied to the lot as a whole instead of to each individual partial material. All Materials should be merged back at the end of the Continuous Flow block.
Concept#
The logic introduces a Material Rank concept, where the first/leading Material chunk is ranked as Head, while the last/trailing Material receives the Tail rank. All Materials between them receive the Middle rank.
The rank is automatically assigned during Partial Track-Out and re-calculated when materials are merged.
Checklist and Data Collection contexts can be configured based on rank, allowing, for example:
- A Checklist to be triggered only for the Head material.
- A Data Collection to be completed only when the final Tail material reaches a specific step.
A step can also be configured as a Merge Step, causing all partial Materials to be automatically merged once they reach that step.
Material Ranks#
| Rank | Description |
|---|---|
| Head | Leading material in the Continuous Flow |
| Middle | Material positioned between Head and Tail |
| Tail | Last material in the Continuous Flow |
| --- | |
| ## Assumptions |
To use Continuous Flows, the process should follow these assumptions:
- The material quantity represents a bulk of non-serialized units. If sub-materials are used, a Line-Flow based approach may be more appropriate.
- The Partial Track-Out feature is used to split materials into chunks for subsequent processing.
- Processing of material chunks occurs sequentially, meaning a Tail material should not overtake its Head.
Enabling Continuous Flows#
This feature can be enabled using two different alternatives.
A) Global Configuration#
To enable Continuous Flows globally across MES:
- Enable
/MedDev/ContinuousFlows/EnableGlobalContinuousFlows
Optional configurations:
/MedDev/ContinuousFlows/EnableGlobalMergeFutureActionOnStepFeature/MedDev/ContinuousFlows/EnableGlobalAutoReEvaluationOfMaterialRanks
B) Context-Specific Configuration#
Instead of enabling the feature globally, it can be enabled for specific contexts using the MedDevContinuousFlowFeaturesConfig smart table.
- Navigate to the smart table.
- Add a new row using one or more context columns:
- Flow
- LogicalFlowPath
- Product
- ProductGroup
- ProductionOrder
- Set the desired feature columns to
true:ContinuousFlowsEnabledAutoReEvaluationOfMaterialRanksEnabledMergeFutureActionOnStepEnabledKeepInProcessRankOnReworkMaterialReturnEnabled
Note
Global configuration entries must be disabled for context-specific overrides to be considered.
For a complete description of the smart table, see the Tables artifact reference.
Continuous Flow Resolution Logic#
Each Continuous Flow setting is resolved per material as follows:
- Global configuration is checked first.
- If the global configuration is disabled, the system evaluates the
MedDevContinuousFlowFeaturesConfigsmart table using:- Flow
- LogicalFlowPath
- Product
- ProductGroup
- ProductionOrder
If a matching row is found with the relevant feature enabled, the setting applies to that material context.
If neither global configuration nor smart table configuration enables the feature, Continuous Flows remain disabled.
Changing Rank Names#
The default rank names are:
- Head
- Middle
- Tail
To change these values:
Configuration Entries#
/MedDev/ContinuousFlows/HeadRankName/MedDev/ContinuousFlows/MiddleRankName/MedDev/ContinuousFlows/TailRankName
Lookup Table Update#
Update the MedDevMaterialRank lookup table with the corresponding values.
Table Context Resolution#
MES allows Checklists and Data Collections to be configured according to Material Rank.
To enable this behavior:
-
Enable the following Smart Tables:
MedDevMaterialChecklistContextMedDevMaterialDataCollectionContext
-
Update the
ContextResolutiontable:
| Resolution | Smart Table |
|---|---|
| MaterialChecklistResolution | MedDevMaterialChecklistContext |
| MaterialDataCollectionResolution | MedDevMaterialDataCollectionContext |
Note
Existing data from MaterialChecklistContext and MaterialDataCollectionContext should be copied before switching the ContextResolution configuration.
Configurable Functionalities#
Auto Re-Evaluation of Material Ranks#
This functionality automatically updates Material ranks to preserve flow continuity when material positions change.
Pre-Conditions#
The functionality can be configured either through:
-
Global configuration -
/MedDev/ContinuousFlows/EnableGlobalAutoReEvaluationOfMaterialRanks -
Context-Specific setting on the
MedDevContinuousFlowFeaturesConfigSmart Table underAutoReEvaluationOfMaterialRanksEnabledcolumn
When enabled:
- The first material in the flow remains Head.
- The last material in the flow remains Tail.
- All others remain Middle.
Note
It is recommended to keep this functionality enabled.
Materials Final Merge#
This functionality defines where a Continuous Flow ends by merging all materials back into a single material.
Pre-Conditions#
The functionality can be configured either through:
-
Global configuration -
/MedDev/ContinuousFlows/EnableGlobalMergeFutureActionOnStepFeature -
Context-Specific setting on the
MedDevContinuousFlowFeaturesConfigSmart Table underMergeFutureActionOnStepEnabledcolumn
Configure the merge step:
- Step Attribute:
MedDevIsPartialMatMergeStep = True
If the Flow contains a Step configured with the MedDevIsPartialMatMergeStep attribute set to True, a Future Action will be created or updated during Partial Track-Out to automatically merge the materials at that step.
When the Materials reach the merge step, they are automatically blocked while waiting for the Future Action.
Once all Materials have reached the merge step, the system automatically merges and releases the resulting Material.
If no automatic merge is configured, the user must manually merge the Materials as required.
Auto Partial Merge#
If cycle times are short, Continuous Flows may generate several Materials that eventually reach the same Step under the same conditions. In these cases, it may be preferable to automatically merge them before the final merge step.
Pre-Conditions#
Set the Step attribute to True:
MedDevAllowAutoPartialMerge
The source and target Materials must have the same conditions:
- System State (Queued / In Process / Processed)
- Production Order
- Manufacturer Lot Number
- Resource (for In Process Materials)
- Resource Lane (if applicable)
This functionality supports the automatic partial merge of Materials belonging to the same group when they are in the same Step and under the same conditions.
A partial merge operation is performed whenever a Material enters a Step where the MedDevAllowAutoPartialMerge attribute is enabled.
If Materials with the ranks "Head" and "Tail" are in conditions to merge, MES will check if there is a Material of the same group in a Rework flow. If there isn't, MES will consider the Continuous flow to be over after the merge, removing any rank from the Material. If there is, this merge will will result on the material to keep the "Head" rank, while keeping the Continuous flow active.
Schematic diagram#
When the head material reaches a step that allows automatic partial merging, no action will be taken.
graph LR
A[Step A] --> B[Step B <br> MedDevAllowAutoPartialMerge : true] --> C[Step C]
subgraph Continuous Flow
A
B
C
end
M1[Material X <br>Qty: 250<br>PO001]
M2[Material X.01<br>Qty: 50<br>PO001]
T1[Tail]
H1[Head]
T1 --- M1
H1 --- M2
M1 -.- A
M2 -.- B
classDef step fill:#1f3a5f, color:white, stroke:#000, stroke-width:2px, rx:10, ry:10;
classDef Material fill:#fffff, color:black, stroke:#007acc, stroke-width:1px, rx:8, ry:8;
classDef label fill:#d38b4c, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
class A,B,C step;
class M1,M2 Material;
class T1,H1 label;
When a non-head material reaches a step that allows automatic partial merging, the system searches for a target material in the current step with the same status and conditions. If such a material is found, it merges with it.
The middle material enters the step that allows automatic partial merging
graph LR
A[Step A] --> B[Step B <br> MedDevAllowAutoPartialMerge : true] --> C[Step C]
subgraph Continuous Flow
A
B
C
end
M1[Material X <br>Qty: 200<br>PO001]
M2[Material X.01<br>Qty: 50<br>PO001]
M3[Material X.02<br>Qty: 50<br>PO001]
T1[Tail]
Middle[Middle]
H1[Head]
T1 --- M1
H1 --- M2
Middle[Middle] --- M3
M1 -.- A
M2 -.- B
M3 -.- B
classDef step fill:#1f3a5f, color:white, stroke:#000, stroke-width:2px, rx:10, ry:10;
classDef Material fill:#fffff, color:black, stroke:#007acc, stroke-width:1px, rx:8, ry:8;
classDef label fill:#d38b4c, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
class A,B,C step;
class M1,M2,M3 Material;
class T1,H1,Middle label;
The middle material is merged to the head material
graph LR
subgraph Continuous Flow
direction LR
A[Step A] --> B["Step B <br> MedDevAllowAutoPartialMerge : true"] --> C[Step C]
end
M1["Material X <br>Qty: 200<br>PO001"]
M2["Material X.01<br>Qty: 100<br>PO001"]
M3["Material X.02<br>(Terminated)<br>Qty: 50<br>PO001"]
T1[Tail]
Middle[Middle]
H1[Head]
T1 --- M1
H1 --- M2
Middle --- M3
M1 -.- A
M2 -.- B
M3 -.- B
M3 -- Merge --> M2
classDef step fill:#1f3a5f, color:white, stroke:#000, stroke-width:2px, rx:10, ry:10;
classDef Material fill:#fffff, color:black, stroke:#007acc, stroke-width:1px, rx:8, ry:8;
classDef label fill:#d38b4c, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
classDef terminated fill:#fffff, color:black, stroke:#cc0000, stroke-width:2px, stroke-dasharray: 5 5, rx:8, ry:8;
classDef labelTerminated fill:#cc0000, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
class A,B,C step;
class M1,M2 Material;
class T1,H1 label;
class M3 terminated;
class Middle labelTerminated;
When a non-head material reaches a step that allows automatic partial merging, the system searches for a target material in the current step with the same status and conditions. If such a material is found, it merges with it.
The middle material is at the step that allows automatic partial merging
graph LR
A[Step A] --> B[Step B <br> MedDevAllowAutoPartialMerge : true] --> C[Step C]
subgraph Continuous Flow
A
B
C
end
M1[Material X <br>Qty: 200<br>PO001]
M2[Material X.01<br>Qty: 50<br>PO001]
M3[Material X.02<br>Qty: 50<br>PO001]
T1[Tail]
Middle[Middle]
H1[Head]
T1 --- M1
H1 --- M2
Middle[Middle] --- M3
M1 -.- A
M2 -.- C
M3 -.- B
classDef step fill:#1f3a5f, color:white, stroke:#000, stroke-width:2px, rx:10, ry:10;
classDef Material fill:#fffff, color:black, stroke:#007acc, stroke-width:1px, rx:8, ry:8;
classDef label fill:#d38b4c, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
class A,B,C step;
class M1,M2,M3 Material;
class T1,H1,Middle label;
The main material enters the step
graph LR
A[Step A] --> B[Step B <br> MedDevAllowAutoPartialMerge : true] --> C[Step C]
subgraph Continuous Flow
A
B
C
end
M1[Material X <br>Qty: 200<br>PO001]
M2[Material X.01<br>Qty: 50<br>PO001]
M3[Material X.02<br>Qty: 50<br>PO001]
T1[Tail]
Middle[Middle]
H1[Head]
T1 --- M1
H1 --- M2
Middle[Middle] --- M3
M2 -.- C
M3 -.- B
M1 -.- B
classDef step fill:#1f3a5f, color:white, stroke:#000, stroke-width:2px, rx:10, ry:10;
classDef Material fill:#fffff, color:black, stroke:#007acc, stroke-width:1px, rx:8, ry:8;
classDef label fill:#d38b4c, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
class A,B,C step;
class M1,M2,M3 Material;
class T1,H1,Middle label;
The middle material is merged to the main material
graph LR
subgraph Continuous Flow
direction LR
A[Step A] --> B["Step B <br> MedDevAllowAutoPartialMerge : true"] --> C[Step C]
end
M1["Material X <br>Qty: 200<br>PO001"]
M2["Material X.01<br>Qty: 100<br>PO001"]
M3["Material X.02<br>(Terminated)<br>Qty: 50<br>PO001"]
T1[Tail/Main Material]
Middle[Middle]
H1[Head]
T1 --- M1
H1 --- M2
Middle --- M3
M2 -.- C
M3 -.- B
M1 -.- B
M3 -- Merge --> M1
classDef step fill:#1f3a5f, color:white, stroke:#000, stroke-width:2px, rx:10, ry:10;
classDef Material fill:#fffff, color:black, stroke:#007acc, stroke-width:1px, rx:8, ry:8;
classDef label fill:#d38b4c, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
classDef terminated fill:#fff, color:black, stroke:#cc0000, stroke-width:2px, stroke-dasharray: 5 5, rx:8, ry:8;
classDef labelTerminated fill:#cc0000, color:white, stroke:#000, stroke-width:1px, rx:6, ry:6;
class A,B,C step;
class M1,M2 Material;
class T1,H1 label;
class M3 terminated;
class Middle labelTerminated;
Setting Up a Continuous Flow#
Step Configuration#
The Steps where a Material may be split into partial chunks must be configured to allow Partial Track-Out by enabling the Use Split and Track-Out flag.
If automatic partial merging is desired, enable MedDevAllowAutoPartialMerge attribute of the Step and must be enabled in all steps where it is required.
If automatic merging at the end of the Continuous Flow is desired, enable MedDevIsPartialMatMergeStep attribute of the Step and must be enabled in the last step of the Continuous Flow.
If no Step is configured as a merge step, the system assumes the Materials will be merged manually.
Context Tables#
Material Checklists and Data Collections should be configured using:
MedDevMaterialChecklistContextMedDevMaterialDataCollectionContext
These tables contain an additional column:
Material Rank
This column can be used to define whether a Checklist or Data Collection applies only to Materials with a specific rank.
Leaving the field blank means the configuration applies to all Materials regardless of rank.
Different Checklist and Data Collection variants can be configured for Head, Middle, and Tail Materials.
Executing a Continuous Flow#
During Track-Out, a Partial Track-Out is performed by specifying a quantity lower than the current Material quantity.
The first Material split and tracked out receives the Head rank.
The main Material still InProcess will be updated to the Tail rank.
Subsequent Partial Track-Out operations create additional Materials with the Middle rank.
In the following Steps:
- Checklists are resolved according to Material Rank.
- Data Collections are resolved according to Material Rank.
- Auto Partial Merge may occur when configured.
- Materials may be automatically merged at the configured merge step.
Additional Partial Track-Out operations can be performed in subsequent Steps, following the same ranking logic.
Resource Setup / Line Clearance for Continuous Flow#
Overview#
Line Clearance ensures a Resource is ready before processing a Material. It helps prevent product mix-ups and contamination by requiring setup either for every material or only when a change-over occurs. In the context of Continuous Flows, we can trigger change over setup when the Material group changes, which is determined by the ManufacturerLotNumber property of the Material.
To apply the logic above, the Resource must be configured to require setup, and the Step must be configured to use a Setup Characteristic that is resolved by a rule.
Configuration#
1. Configure the Resource#
-
Navigate to Resource → Additional Information.
-
Set Setup Mode to one of the following:
- Always – Setup is required before every Track-In.
- On Change Over – Setup is required only when the configured setup characteristic changes.
2. Configure the Step#
-
Navigate to Step → Edit.
-
Set Setup Characteristic to Rule.
-
Assign the rule
MedDevContinuousFlowSetupCharacteristic








