Skip to content

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 like Checklists and Data Collections should be 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 adds a Material Rank concept, where the first/leading Material chunk will be ranked as the Head Material, whereas the last/trailing Material will have the Tail rank. All other material chunks in between will get the Middle rank.

Continuous Flow Concept diagram

The Rank is automatically set on Partial Track Out, and re-calculated when merging back.

Checklist and Data Collection contexts can be configured based on Rank, so that, for example, a Checklist can be triggered only for the Head material and a Data Collection can be filled only when the final Tail material passes through the step.

A step can be configured as a Merge Step, causing all partial Materials to be automatically merged together once they reach the Step.

Assumptions#

To use the Continuous Flow logic, the process should follow the following assumptions:

  • The material quantity should represent a bulk of non-serialized units. If sub-materials are used, a Line-Flow based approach might be more adequate.
  • The Partial Track-Out feature is used to Split the chunks of materials for the next Step.
  • The different material chunks processing will be executed in sequence, e.g. a Tail will not surpass its Head.

Setting Up a Continuous Flow#

Step Configuration#

The Steps where a Material can be temporarily split into partial chunks, need to be configured to allow Partial Track-outs, by setting the Use Split and Track-Out flag. If needed, additional Split and Trackout settings can be configured in the StepSplitTrackOutContext Smart Table.

Partial Split Step configuration

If it is intended to merge back the Materials automatically in the end of the flow block, the merge step should have the MedDevIsPartialMatMergeStep attribute set. If no step with this attribute is found in the flow, the system will assume the materials will be merged manually.

Merge Step configuration

Context Tables#

The Material Checklists and Data Collections contexts need to be setup in the new default context tables - MedDevMaterialChecklistContext and MedDevMaterialDataCollectionContext respectively.

These tables have a new Column Material Rank, which can be used to specify if the Checklist or Data Collection applies only to Materials of that Rank. Leaving the Material Rank blank means it will apply to any material, independently of rank (same behavior as before).

Continuous Flow Checklist Context

It is also possible to set different checklists/data collection variants for Head, Middle and Tail Materials, to provide the user different instructions depending on the Material stage.

Executing a Continuous Flow#

Partial Track-Out#

During the Track-Out operation, to perform a Partial Track-Out, ensure the primary quantity is set to a value below the main material's primary quantity.

Partial Track-Out

The first material Split and Tracked out will have the MedDevMaterialRank attribute set as "Head", and the main Material still InProcess will be ranked as "Tail". If additional Partial Track-Out splits are needed, the following splits will have the "Middle" rank.

If the Flow contains a Step is configured with MedDevIsPartialMatMergeStep flag, a Future Action will be created/updated during Partial Track-Out to automatically merge back the materials at the merge step.

There can be additional partial Track-Outs in subsequent steps, which will follow a similar logic, splitting the Head Material into a new Head and Middle Materials.

Context Resolution#

In the Steps following the Partial Track-out, Checklists and Data Collections will only appear to the respective Head/Middle/Tail Materials as configured in the context tables.

Materials Merge#

If a merge Step was pre-defined, the Materials will automatically get blocked at the step waiting for the Merge Future Action.

Material Waiting Future Action

Once all Materials have reached the merge Step, the system will automatically merge and release the Material.

Merge Materials

If no automatic merge was configured, the user should manually merge each partial Material as needed.

When recording full loss on a material, it will try to merge with the next material in the flow and this future action will also try to run and do the merge. If the future action merge is performed, the AutoReEvaluationOfMaterialRanks logic will not be executed.

Administration#

Installing/Enabling the Feature#

To use this feature, the following actions need to be taken:

  1. Configurations

    • Enable Feature through /MedDev/ContinuousFlows/EnableContinuousFlows.
    • Enable Auto-Merging through /MedDev/ContinuousFlows/EnableMergeFutureActionOnStepFeature, if desired.
  2. Update Generic Table 'ContextResolution' with both MedDev Smart Tables to ensure the resolution includes the Material MedDevMaterialRank:

    • MaterialChecklistResolution: "MedDevMaterialChecklistContext"
    • MaterialDataCollectionResolution: "MedDevMaterialDataCollectionContext"

Context Resolution table configuration

Note

This will override the existing MaterialChecklistContext and MaterialDataCollectionContext tables - all data from the original context tables should be copied to the new MedDev equivalent tables before switching the ContextResolution settings.

Changing the Rank names#

The default values for the Rank Names are Head, Middle, and Tail. If required, these names can be changed by:

  1. Configurations

    • Set Material Rank Names:
      • /MedDev/ContinuousFlows/HeadRankName
      • /MedDev/ContinuousFlows/MiddleRankName
      • /MedDev/ContinuousFlows/TailRankName
  2. Update Lookup Table 'MedDevMaterialRank' with new names, so that the MedDev Smart Tables are prepared to use them.

Support Auto Partial Merge#

Overview#

Support auto partial merge as materials keep up with materials under the same conditions. A partial merge operation must be performed in any step where the attribute MedDevAllowAutoPartialMerge is set to true.

Motivation#

If the cycle time is short, to creating a chunk to be moved to the next process, it can lead to having many materials of the same group in the same step under the same conditions while in reality this could be represented by a single material.

How to work#

Pre Conditions#

To use this feature, the following actions need to be taken:

  1. Configurations

    • Set them to true
      • /MedDev/ContinuousFlows/EnableContinuousFlows/
  2. Set the attribute MedDevAllowAutoPartialMerge of a step to true

    • Step attribute: MedDevAllowAutoPartialMerge
  3. The material must be associated with a production order

  4. The source material and the target material have the same conditions:

  5. System State (Queued/In Process/ Processed)

  6. Production Order
  7. Manufacturer Lot Number
  8. Resource (applies only to "In Process")
  9. Resource Lane (if it exists, applies only to "In Process")
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:#fff, 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;

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:#fff, 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;