--- pdfexport: true module: Medical Devices timetoread: True tutorial: deepdive alias: tutorials-continuous-flows glightbox: True search: boost: 2 tags: - medical --- # Continuous Flows ## Overview The Continuous Flow feature improves handling of scenarios where parts of a lot (Material) gradually move to the next step while the rest of the lot finishes the previous process step. It enables partial chunks of the lot to be processed in parallel across different steps, while preserving a single lot grouping: - Step execution activities like Checklists and Data Collections apply to the lot as a whole (not to each partial material individually). - All partial Materials must be merged back at the end of the Continuous Flow block. --- ## Topics - [Concept](#concept) - [Partial Track-Out](#partial-track-out) - [Context Resolution](#context-resolution) - [Auto Re-Evaluation of Material Ranks](#auto-re-evaluation-of-material-ranks) - [Materials Final Merge](#materials-final-merge) - [Auto Partial Merge](#auto-partial-merge) - [Scenario](#scenario) - [Configuration](#configuration) - [Configuration Entries](#configuration-entries) - [Generic Tables](#generic-tables) - [Lookup Tables](#lookup-tables) - [Checklists and Data Collections](#checklists-and-data-collections) - [Executing a Continuous Flow](#executing-a-continuous-flow) --- ## Concept The logic introduces a Material Rank: - Head: First/leading material chunk. - Middle: All other chunks in between. - Tail: Last/trailing material chunk. ![continuous flows concept](images/continuousflows_concept.png) Rank is automatically assigned on Partial Track-Out and recalculated when merging back. Checklists and Data Collections can be conditioned by 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. ### Partial Track-Out - During Track-Out, set the primary quantity below the main Material’s primary quantity to split a chunk. - The first split tracked out becomes Head; the remaining InProcess main material becomes Tail. Additional splits become Middle. - If the flow contains a Step with attribute _MedDevIsPartialMatMergeStep_ = true, a Future Action is created/updated on Partial Track-Out to automatically merge at the merge Step. - Additional partial Track-Outs in subsequent steps split the then-current Head into a new Head and Middle. ### Context Resolution - In Steps following a Partial Track-Out, Checklists/Data Collections appear only for the configured rank(s) as defined in the context tables. ### Auto Re-Evaluation of Material Ranks This functionality will enable MES to automatically re-evaluate Material ranks, to ensure continuity in the flow when Materials overtake others during the process. It will guarantee that, even when the relative positions of the Materials change, the first Material in the Flow will always be the "Head", the last will always be the "Tail" and everyone in between will be "Middle". !!! Note This is a core function of the Feature and thus it is recommended to always have it enabled. Otherwise, MES will assume that the rank update will be performed manually. ### Materials Final Merge - If a final merge Step is predefined: - Partial Materials are blocked at the merge Step waiting for the Merge Future Action to be applied. - Once all partial Materials arrive, the system automatically merges and releases the Material. - If no automatic merge is configured, users must manually merge partial Materials. - When recording full loss on a material, the system attempts to merge with the next material in the flow; if the merge Future Action performs the merge, AutoReEvaluationOfMaterialRanks does not execute. - When the full loss is recorded while the material is in active rework, Continuous Flows first resolves the rework case: - Non-main rework materials are terminated without updating the main flow. - Main rework materials complete the remaining rework path, return to the main flow, and then continue with the standard auto-movement and merge logic. - This applies to `Record Loss/Bonus` and `Track-Out`. ### Auto Partial Merge Supports automatically merging partial materials when they share the same conditions, reducing proliferation of partials in short cycle-time environments. The source and target materials must share the same: - System State (Queued/In Process/Processed) - Production Order - Manufacturer Lot Number - Resource (applies only to In Process) - Resource Lane (if it exists, applies only to In Process) ### Save In-Process Material Rank for Rework Returns When a Material is Tracked-In with a certain rank, the user may require it to maintain the same rank throughout the entire process, ensuring that it performs Checklists or Data Collections which are configured for Track-Out/Move-Next in the context of that rank, to guarantee continuity. This functionality enables MES to keep track of the Material's rank when it was Tracked-In, even if the rank is afterwards updated due to a Material returning from rework, by saving it in the Material's attribute **MedDevInProcessMaterialRank**, and use this attribute as the primary driver for context resolution. ![Context Resolution table configuration](images/continuousflows_inprocessrank.png) In this example, the Material was Tracked-In with rank "Tail", and may already have executed some Checklist or Data Collection configured in the context of this rank. While the Material was In-Process, a Material returned from Rework to a step behind its position, being awarded the "Tail" and causing this Material's rank to be updated to "Middle". With this functionality enabled, the original "Tail" rank is saved in the Material, and it will be used to resolve the tables when Track-Out and Move-Next are performed. --- ## Assumptions To use the Continuous Flow logic, the process should follow these 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 processing of different material chunks will be executed in sequence, e.g. a Tail will not surpass its Head. --- ## Scenario ### Enabling Continuous Flows This Feature can either be enabled globally in MES, or only for specific contexts. #### A) Global Configuration To enable this feature globally across MES, the following actions need to be taken: 1. **Configurations** * Enable Feature globally through `/MedDev/ContinuousFlows/EnableGlobalContinuousFlows`. These optional configurations can also be enabled, to apply these functionalities globally: * Enable Auto-Merging through `/MedDev/ContinuousFlows/EnableGlobalMergeFutureActionOnStepFeature` * Enable Auto Re-Evaluation of Material Ranks through `/MedDev/ContinuousFlows/EnableGlobalAutoReEvaluationOfMaterialRanks` * Enable Keep In-Process Rank on Rework Material Return through `/MedDev/ContinuousFlows/EnableGlobalKeepInProcessRankOnReworkMaterialReturn` ![continuous flows enable features](images/continuousflows_enablefeatures.png) !!! note Useful documentation on how to [Manage Configuration Entries](https://help.criticalmanufacturing.com/userguide/administration/configuration/) #### B) Context-Specific Configuration Instead of enabling the Continuous Flow feature globally, it is possible to enable it and its optional functionalities for specific contexts (e.g., per Flow, Product, or Production Order) using the `MedDevContinuousFlowFeaturesConfig` smart table: 1. Navigate to the `MedDevContinuousFlowFeaturesConfig` smart table. 2. Add a new row, filling in the key columns that define the context (one or more of: Flow, LogicalFlowPath, Product, ProductGroup, ProductionOrder). 3. Set the desired value column(s) to `true`: `ContinuousFlowsEnabled`, `AutoReEvaluationOfMaterialRanksEnabled`, `MergeFutureActionOnStepEnabled`, `KeepInProcessRankOnReworkMaterialReturnEnabled`. !!! note The global configuration entries need to be **disabled** for context-specific overrides to take effect. If a global entry is enabled, the smart table is ignored for that setting. The override logic is applied only for _enabling_ scenarios like the one described above, not _disabling_ ones (e.g., configuration entry is enabled, but the smart table has it set to false for a specific context). #### Rank names The default values for the Rank Names are `Head`, `Middle`, `Tail` and `InRework`. If required, these names can be changed by: 1. **Configurations** * Set Material Rank Names: * `/MedDev/ContinuousFlows/HeadRankName` * `/MedDev/ContinuousFlows/MiddleRankName` * `/MedDev/ContinuousFlows/TailRankName` * `/MedDev/ContinuousFlows/InReworkRankName` 2. **Update Lookup Table 'MedDevMaterialRank'** with new names, so that the MedDev Smart Tables are prepared to use them. ![continuous flows material ranks definition](images/continuousflows_materialranksdefinition.png) ### Generic Tables 1. Update **Generic Table** `ContextResolution` with both MedDev Smart Tables to ensure the resolution includes the Material `MedDevMaterialRank`: - MaterialChecklistResolution: `MedDevMaterialChecklistContext` - MaterialDataCollectionResolution: `MedDevMaterialDataCollectionContext` ![continuous flows context resolution setup](images/continuousflows_contextresolutionsetup.png) !!! warning 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. ### Configuration To assess how this industry and production requirement is addressed, consider a simplified model: Basic entities like **Step**, **Resource**, **Flow**, **Product**, and **Material** can be configured as detailed below: - Steps: - Catheter Production Order Starts - Assemble - Clean - After Clean - Dry - After Dry - Catheter Packing - Shipping - Final Packing - Shipping Customer - Flow - Flow Catheter - Product - Foley V Catheter - Material - Lot Foley V Catheter#01 (this Material represents a lot with 500 units) !!! note This is the [Master Data](masterdata/continuous_flow.xlsx) file used to create this model. Continuous flow should be applied to steps **Clean → After Clean → Dry → After Dry → Catheter Packing**: - Enable Partial Track-Out by setting the Use Split and Track-Out flag in step **Clean** ![continuous flows partial trackout setup](images/continuousflows_partialtrackoutsetup.png) - Configure additional Split/Track-Out options in the `StepSplitTrackOutContext` Smart Table - To auto-merge at the end of the flow block, set the `MedDevIsPartialMatMergeStep` attribute on the designated merge step **Catheter Packing** - If no such Step is found, the system assumes Materials will be merged manually - To automatically perform merge action on this step, set the `MedDevIsPartialMatMergeStep` attribute ![continuous flows merge step setup](images/continuousflows_mergestepsetup.png) - Additionally, if the cycle time is short, consider enabling the Auto Partial Merge, by setting the `MedDevAllowAutoPartialMerge` attribute for any steps throughout the process where several Materials of the same group may accumulate. ![continuous flows merge step setup](images/continuousflows_autopartialmerge.png) ### Checklists and Data Collections For all remaining configurations, follow these steps: 1. Create two **Parameters**: ![continuous flows create parameter 1](images/continuousflows_createparameter1.png) ![continuous flows create parameter 2](images/continuousflows_createparameter2.png) !!! note Useful Documentation - [Create Parameter](https://help.criticalmanufacturing.com/userguide/business-data/parameter/create_parameter/) - [How to: Create a Parameter](https://help.criticalmanufacturing.com/tutorials/modules/data-collection/how-to/howto_createparameter/) 2. Create a **Data Collection** ![continuous flows create data collection 1](images/continuousflows_createdatacollection1.png) ![continuous flows create data collection 2](images/continuousflows_createdatacollection2.png) ![continuous flows create data collection 2](images/continuousflows_createdatacollection3.png) 3. Assign both **Parameters** to the **Data Collection** created above: ![continuous flows assign parameter to data collection](images/continuousflows_assignparameterdatacollection.png) !!! note Useful Documentation - [Create Data Collection](https://help.criticalmanufacturing.com/userguide/business-data/data-collection/create_data_collection/) - [How to: Create a Data Collection](https://help.criticalmanufacturing.com/tutorials/modules/data-collection/how-to/howto_createdatacollection/) - [MaterialDataCollectionContext](https://help.criticalmanufacturing.com/userguide/administration/tables/smart-tables/materialdatacollectioncontext/) - [How to: Add Value to Smart Table](https://help.criticalmanufacturing.com/tutorials/general/howto_addvaluetosmarttable/) 4. Fill in the Smart Table `MedDevMaterialDataCollectionContext` with the **Data Collection** created above ![continuous flows material datacollections context setup](images/continuousflows_materialdatacollectionscontextsetup.png) 5. Create a **Checklist** ![continuous flows create checklist](images/continuousflows_createchecklist1.png) !!! note Useful Documentation - [Create Checklist](https://help.criticalmanufacturing.com/userguide/business-data/checklist/create_checklist/) - [How to: Create a Checklist](https://help.criticalmanufacturing.com/tutorials/modules/tasks-and-checklists/how-to/howto_createchecklist/) 6. Fill in the Smart Table `MedDevMaterialChecklistContext` with the **Checklist** created above ![continuous flows material checklist context setup](images/continuousflows_materialchecklistcontextsetup.png) --- ## Executing a Continuous Flow This section explores the Continuous Flows operations. To test and execute this functionality, follow the use case outlined in a step-by-step scenario. !!! Note This example does not contain any Rework flows configured. If a Material is sent to Rework while in a Continuous Flow, MES will handle the rank update automatically according to the specific scenario. A detailed explanation of this logic can be found in the User Guide. 1. In the **Step** `Clean`, perform a **Material Track In** of the **Material** `Lot Foley V Catheter#01` ![continuous flows track in main material at clean](images/continuousflows_trackinmainmaterialatclean.png) 2. Perform a partial track-out and move next on **Material** `Lot Foley V Catheter#01` ![continuous flows partial track out material 01 from clean](images/continuousflows_partialtrackoutmaterial01fromclean.png) - A new material **Material** `Lot Foley V Catheter#01.01` is created with: - Quantity: 100 - Rank: `Head` - Manufacturing Lot Number: `Lot Foley V Catheter#01` ![continuous flows material 01 is head manufacturer details](images/continuousflows_material01ishead_manufacturerdetails.png) ![continuous flows material 01 is head attributes details](images/continuousflows_material01ishead_attributesdetails.png) - Main **Material** `Lot Foley V Catheter#01` is updated with: - Future action created for future merge - Rank: `Tail` - Manufacturing Lot Number: `Lot Foley V Catheter#01` - Current Head: `Lot Foley V Catheter#01.01` - Current Tail: `Lot Foley V Catheter#01` ![continuous flows main material is tail future actions](images/continuousflows_mainmaterialistail_futureactions.png) ![continuous flows main material is tail manufacturer details](images/continuousflows_mainmaterialistail_manufacturerdetails.png) ![continuous flows main material is tail attributes details](images/continuousflows_mainmaterialistail_attributesdetails.png) 3. Dispatch and track-in **Material** `Lot Foley V Catheter#01.01` to **Step** `After Clean` ![continuous flows track in material 01 at after clean](images/continuousflows_trackinmaterial01atafterclean.png) 4. Perform a partial track-out and move next on **Material** `Lot Foley V Catheter#01` ![continuous flows partial track out material 02 from clean](images/continuousflows_partialtrackoutmaterial02fromclean.png) - A new material **Material** `Lot Foley V Catheter#01.02` is created with: - Quantity: 50 - Rank: `Middle` - Manufacturing Lot Number: `Lot Foley V Catheter#01` ![continuous flows material 02 is middle attributes details](images/continuousflows_material02ismiddle_attributesdetails.png) 5. Dispatch and track-in **Material** `Lot Foley V Catheter#01.02` to **Step** `After Clean` ![continuous flows track in material 02 at after clean](images/continuousflows_trackinmaterial02atafterclean.png) 6. Track-out **Material** `Lot Foley V Catheter#01.02` from **Step** `After Clean` into **Step** `Dry` ![continuous flows track out material 02 at after clean](images/continuousflows_trackoutmaterial02atafterclean.png) - **Material** `Lot Foley V Catheter#01.01` is updated with: - Rank: `Middle` ![continuous flows material 01 becomes middle attributes details](images/continuousflows_material01becomesmiddle_attributesdetails.png) - **Material** `Lot Foley V Catheter#01.02` is update with: - Rank: `Head` ![continuous flows material 02 becomes head attributes details](images/continuousflows_material02becomeshead_attributesdetails.png) - **Material** `Lot Foley V Catheter#01` is update with: - Current Head: `Lot Foley V Catheter#01.02` ![continuous flows material 02 becomes head main material attributes details](images/continuousflows_material02becomeshead_mainmaterialattributesdetails.png) 7. Record a full loss on **Material** `Lot Foley V Catheter#01.02` with option `Terminate Material on zero quantities and no Sub-Materials` set to `TRUE` ![continuous flows record loss with terminate material 02](images/continuousflows_recordlosswithterminatematerial02.png) - System doesn't allow the operation since `Head` material cannot be terminated ![continuous flows record loss with terminate material 02 error](images/continuousflows_recordlosswithterminatematerial02_error.png) - Repeat action to record a full loss on **Material** `Lot Foley V Catheter#01.02` but this time with option `Terminate Material on zero quantities and no Sub-Materials` set to `FALSE` ![continuous flows record loss without terminate material 02](images/continuousflows_recordlosswithoutterminatematerial02.png) - System allows full loss record on **Material** `Lot Foley V Catheter#01.02` and material **Quantity** is updated to `0` ![continuous flows record loss without terminate material 02 success](images/continuousflows_recordlosswithoutterminatematerial02_success.png) 8. Track-out and Move Next **Material** `Lot Foley V Catheter#01.01` from **Step** `After Clean` into **Step** `Dry` - **Material** `Lot Foley V Catheter#01.01` is update with: - Rank: `Head` ![continuous flows material 01 becomes head attributes details](images/continuousflows_material01becomeshead_attributesdetails.png) - **Material** `Lot Foley V Catheter#01.02` is terminated ![continuous flows material 01 becomes head material 02 terminated](images/continuousflows_material01becomeshead_material02terminated.png) 9. Perform next flow steps for **Material** `Lot Foley V Catheter#01.01` until material reaches **Step** `Catheter Packing` - When track-out operation is performed at **Step** `Dry`: - No **Checklist** is triggered for material with rank `Head` or `Middle` - **Data Collection** is performed for **Material** `Lot Foley V Catheter#01.01` (`Head`) > \*Refer to configuration in Smart Tables **MedDevMaterialDataCollectionContext** and **MedDevMaterialChecklistContext\*** ![continuous flows track out material 01 at dry dc for head](images/continuousflows_trackoutmaterial01atdry_dcforhead.png) - When **Material** `Lot Foley V Catheter#01.01` reaches state `Queued` in **Step** `Catheter Packing`: - **Material** `Lot Foley V Catheter#01.01` is set on hold for **Future Action** ![continuous flows material 01 hold future action](images/continuousflows_material01holdfutureaction.png) 10. Perform a partial track-out and move next on **Material** `Lot Foley V Catheter#01` - A new material **Material** `Lot Foley V Catheter#01.03` is created with: - Quantity: 150 - Rank: `Middle` - Manufacturing Lot Number: `Lot Foley V Catheter#01` 11. Perform next flow steps for **Material** `Lot Foley V Catheter#01.03` until material reaches **Step** `Catheter Packing` - When track-out operation is performed at **Step** `Dry`: - No **Checklist** is triggered for material with rank `Head` or `Middle` - No **Data Collection** is triggered for material with rank `Middle` or `Tail` > \*Refer to configuration in Smart Table **MedDevMaterialDataCollectionContext\*** - When **Material** `Lot Foley V Catheter#01.03` reaches state `Queued` in **Step** `Catheter Packing`: - **Material** `Lot Foley V Catheter#01.03` is set to on hold for **Future Action** 12. Update **Step** `Dry` to perform **Auto Partial Merge** - Set **Attribute** `MedDevAllowAutoPartialMerge` to `TRUE` ![continuousflows_allow auto partial merge at dry](images/continuousflows_allowautopartialmergeatdry.png) 13. Perform a partial track-out and move next on **Material** `Lot Foley V Catheter#01` - A new material **Material** `Lot Foley V Catheter#01.04` is created with: - Quantity: 25 - Rank: `Middle` - Manufacturing Lot Number: `Lot Foley V Catheter#01` 14. Perform next flow steps for **Material** `Lot Foley V Catheter#01.04` until material reaches **Step** `Dry` ![continuous flows material 04 queued at dry](images/continuousflows_material04queuedatdry.png) 15. Perform a partial track-out and move next on **Material** `Lot Foley V Catheter#01` - A new material **Material** `Lot Foley V Catheter#01.05` is created with: - Quantity: 25 - Rank: `Middle` - Manufacturing Lot Number: `Lot Foley V Catheter#01` 16. Perform next flow steps for **Material** `Lot Foley V Catheter#01.05` until material reaches **Step** `Dry` - **Material** `Lot Foley V Catheter#01.05` is merged into **Material** `Lot Foley V Catheter#01.04` - **Material** `Lot Foley V Catheter#01.05` is terminated ![continuous flows material 05 merged into material 04 material 05 terminated](images/continuousflows_material05mergedintomaterial04_material05terminated.png) - **Material** `Lot Foley V Catheter#01.04` quantity is updated ![continuous flows material 05 merged into material 04 material 04 updated](images/continuousflows_material05mergedintomaterial04_material04updated.png) 17. Perform next flow steps for **Material** `Lot Foley V Catheter#01` until material reaches **Step** `Dry` - **Material** `Lot Foley V Catheter#01.04` is merged into **Material** `Lot Foley V Catheter#01` - **Material** `Lot Foley V Catheter#01.04` is terminated ![continuous flows material 04 merged into tail material material 04 terminated](images/continuousflows_material04mergedintotailmaterial_material04terminated.png) - **Material** `Lot Foley V Catheter#01` quantity is updated ![continuous flows material 04 merged into tail material tail material updated](images/continuousflows_material04mergedintotailmaterial_tailmaterialupdated.png) 18. Track-out and Move Next **Material** `Lot Foley V Catheter#01` from **Step** `Dry` - **Checklist** is performed for **Material** `Lot Foley V Catheter#01` (`Tail`) > \*Refer to configuration in Smart Table **MedDevMaterialChecklistContext\*** ![continuous flows track out tail material from dry checklist for tail](images/continuousflows_trackouttailmaterialfromdry_checklistfortail.png) 19. Perform next flow steps for **Material** `Lot Foley V Catheter#01` until material reaches **Step** `Catheter Packing` ![continuous flows track out tail material from after dry materials merged into tail material](images/continuousflows_trackouttailmaterialfromafterdry_materialsmergedintotailmaterial.png) - **Materials** `Lot Foley V Catheter#01.01` and `Lot Foley V Catheter#01.03` are merged into **Material** `Lot Foley V Catheter#01` - **Material** `Lot Foley V Catheter#01.01` is terminated - **Material** `Lot Foley V Catheter#01.03` is terminated - **Material** `Lot Foley V Catheter#01` is updated - Quantity is updated after merge operation ![continuous flows track out tail material from after dry tail material updated](images/continuousflows_trackouttailmaterialfromafterdry_tailmaterialupdated.png) - Manufacturer Lot Number is reset ![continuous flows tail material completed manufacturer details](images/continuousflows_tailmaterialcompleted_manufacturerdetails.png) - Attributes are reset ![continuous flows tail material completed attributes details](images/continuousflows_tailmaterialcompleted_attributesdetails.png) !!! info For more information on Continuous Flows, as well as a guide on how it handles Rework scenarios, see [[meddev-feature-continuousflows]] in the User Guide.