DEEs#
Continuous Flows#
Below there are the list of DEEs that were created in the context of Continuous Flows Feature
MedDevAddMaterialRankToResolution#
Continuous Flows - Resolve Context only for First/Last Material of Lot.
Add Material's 'MedDevMaterialRank' to the context resolution values as 'MaterialRank'.
- Action Groups:
SmartTables.SmartTables.ResolveObjectsToDataSet.Pre
- Pre Conditions:
Override Native normal (not Line Flows) Checklist and DataCollection resolution
Material is present in DEE context - so that its possible to retrieve the 'MedDevMaterialRank' attribute
The Table is either 'MedDevMaterialChecklistContext' or 'MedDevMaterialDataCollectionContext'
- Action:
Override Native normal(not Line Flows) Checklist and DataCollection resolution - to pass the additional MaterialRank input key
MedDevCheckMaterialRankOnTerminate#
Continuous Flows - Resolve Context only for First/Last Material of Lot.
Don't allow Head or Tail materials to be terminated except via merge and Main material cannot be terminated regardless of its current rank or operation.
- Action Groups:
BusinessObjects.Material.Merge.Pre BusinessObjects.Material.Terminate.Post BusinessObjects.MaterialCollection.Terminate.Post
- Pre Conditions:
Feature /MedDev/ContinuousFlows/EnableContinuousFlows shall be enabled.
- Action:
Except in merge scenarios, if one of the Materials being terminated has MedDevMaterialRank as "Head" or "Tail", throw an error:
- "Head/Tail Material cannot be terminated - Adjust the Head/Trail Material Rank assignments first." (localizable)
In any scenario, if /MedDev/ContinuousFlows/EnableAutoReEvaluationOfMaterialRanks is enabled and the material is the main material throw an error:
- "Material cannot be terminated - is the original main material of the lot." (localizable)
MedDevSetFutureMergeOnPartialSplit#
When doing Complex Split and TrackOut (Partial TrackOut) a Future Merge should be created to merge back that splits Material
- Action Groups:
MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutMaterials.Pre MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutMaterials.Post MaterialManagement.MaterialManagementOrchestration.TrackOutMaterials.Post
- Pre Conditions:
N/A
- Action:
Create Future Action for material being processed.
MedDevSetMaterialRankOnMerge#
Continuous Flows - Resolve Context only for First/Last Material of Lot
When merging, update ranks in the merged material and in the main material.
- Action Groups:
BusinessObjects.Material.Merge.Post
- Pre Conditions:
Feature /MedDev/ContinuousFlows/EnableContinuousFlows shall be enabled.
- Action:
Set up Material attribute 'MedDevMaterialRank'
If there is a "Head" + "Tail" material(final merge) - remove MedDevMaterialRank and clean the ManufacturerLotNumber in the final target material.
If there's a "Head" but no "Tail" (lead merge) - set the MedDevMaterialRank to "Head" in the target material.
If there's a "Tail" but no "Head" (tail merge) - set the MedDevMaterialRank to "Tail" in the target material.
If there's a "Middle" but no "Head" / "Tail" (middle merge) - set the MedDevMaterialRank to "Middle" in the target material.
If there's no MedDevMaterialRank set in any Material - do nothing (i.e. normal merge behavior).
If ranks where changed, update main material attributes with the new CurrentHead and CurrentTail.
MedDevSetMaterialRankOnPartialSplit#
Continuous Flows - Resolve Context only for First/Last Material of Lot
When splitting, update the Materials attribute 'MedDevMaterialRank'.
- Action Groups:
MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutMaterials.Pre (> to retrieve Main Material) MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutMaterials.Post
- Pre Conditions:
Feature /MedDev/ContinuousFlows/EnableContinuousFlows shall be enabled.
If TrackOut if made with full quantity there are No splits therefore no logic to apply.
- Action:
Set up Material attribute MedDevMaterialRank and ManufacturerLotNumber.
If the main material has no MedDevMaterialRank, set(first split) as:
- "Tail"(configurable) on the main(that doesn't get tracked out)
- "Head"(configurable) on the first split child
If the main material has MedDevMaterialRank = "Tail"(subsequent splits) or "Middle"
- set it as "Middle"(configurable) for each subsequent split child
If the main material has MedDevMaterialRank = "Head"(multi - step partial trackout), set it
- as "Middle"(configurable) on the main(that doesn't get tracked out)
- as "Head"(configurable) on the new first split child
If ranks where changed, update main material attributes with the new CurrentHead and CurrentTail.
MedDevAutoPartialMerge#
Continuous Flows - Support Auto Partial Merge
- Action Groups:
MaterialManagement.MaterialManagementOrchestration.MoveMaterialsToNextStep.Post BusinessObjects.MaterialCollection.TrackIn.Post BusinessObjects.MaterialCollection.TrackOut.Post
- Pre Conditions:
- Feature
/MedDev/ContinuousFlows/EnableContinuousFlowsshall be enabled. - The attribute
MedDevAllowAutoPartialMergeof the step needs to be set to true. -
The material must be associated with a production order.
-
Action:
- If the production order of the material is null, nothing will happen.
- If the attribute
MedDevAllowAutoPartialMergeof a step isfalse, nothing will happen. - If the
MedDevAllowAutoPartialMergeattribute of a step is set totrue, and a material associated with a production order moves to the current step, it will automatically find a target material with the same system state(Queued) to merge with and update the material rank accordingly. - If the
MedDevAllowAutoPartialMergeattribute of a step is set totrue, and a material associated with a production order tracks in the current step, it will automatically find a target material with the same system state(InProcess) and the same resource to merge with and update the material rank accordingly. - If the
MedDevAllowAutoPartialMergeattribute of a step is set totrue, and a material associated with a production order tracks out the current step, it will automatically find a target material with the same system state(Processed) to merge with and update the material rank accordingly. - If no target material with the same system state is found in the current step, nothing will happen.
MedDevAutoMovementUntilMergeOnRecordLossToZero#
If a full loss is recorded against a material with associated rank, handle or prepare its termination.
- Action Groups:
BusinessObjects.MaterialCollection.RecordLoss.Post MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutMaterials.Pre MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutMaterials.Post MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutAndMoveMaterialsToNextStep.Pre MaterialManagement.MaterialManagementOrchestration.ComplexTrackOutAndMoveMaterialsToNextStep.Post
- Pre Conditions:
Feature /MedDev/ContinuousFlows/EnableContinuousFlows and /MedDev/ContinuousFlows/EnableAutoReEvaluationOfMaterialRanks shall be enabled.
Record Loss updated the material to zero primary quantity.
If action trigger is the Complex Track-Out operation, then the Action will only be executed on the Complex Track-Out (Post) orchestration method and not on Record Loss operation, to prevent Track-Out to be executed more than once in the same transaction, which would result in a runtime error.
Material is of rank Head, Tail, or a main material.
- Action:
For Head or Middle (main material):
- Merge within the current step if possible, otherwise, leave material queued ready to be merged in the current or in the next step.
- If the material is in "Queued" or "Dispatched > UnDispatch":
- Search for a Queued lot material in the current step to merge with.
- If found, perform the merge.
- If not found, do nothing:
- The material is already ready to be merged (another material may come later to merge with it or this material might later be updated to a Tail, in which case it will perform the search actively).
- If the material is in "In Process" > TrackOut or "Processed":
- Search for a Processed lot material in the current step to merge with.
- If found, perform the merge.
- If not found, move the material to the next step.
- Leave it in queued state, ready to be merged (another material may come later to merge with it or this material might later be updated to a Tail, in which case it will perform the search actively).
For Tail:
- Actively move the material through steps until it finds another material from the same group and merges directly.
- Search for a material from the same lot within the current step.
- If found, perform the merge.
- If not found, move to the next step and repeat the search.
When performing the merge:
- Do not terminate the source material if it is the main material.
- If necessary, switch the direction of the merge (choose who merges into whom) to preserve the main material.
MedDevUpdateMaterialRanksOnMoveNext#
When material moves to the next step, its rank (and those of related materials) will be recalculated.
- Action Groups:
BusinessObjects.MaterialCollection.MoveToNextStep.Pre BusinessObjects.MaterialCollection.MoveToNextStep.Post
- Pre Conditions:
Feature /MedDev/ContinuousFlows/EnableContinuousFlows and /MedDev/ContinuousFlows/EnableAutoReEvaluationOfMaterialRanks shall be enabled.
- Action:
Re-evaluate Material Ranks within Lot Group materials by ManufacturerLotNumber, then sort and re-evaluate:
- Prioritize Middle, then Tail and ignore Head materials.
- Prevents Tails from merging first when a Head quantity 0 is found in the same step, leaving out the possibility of Middles being left behind.
Middle
- Step 1: Check for a Head of the same lot in the old step:
- Indicates the current Middle is not truly a middle.
- Switch roles:
- Front material becomes Head.
- Back material becomes Middle.
-
Update the main material head attribute accordingly.
-
Step 2: If no Head in the old step, check for a Head with quantity 0 in the current step:
- Indicates the Head intends to terminate.
- Check if there is already a Future Merge Action for Head
- If exist, skip the Merge and wait for the Future Action to handle it
- If not exist, Merge Head into Middle (lead merge).
- Merge logic:
- Do not terminate the source if it's the main material.
- If necessary, switch merge target to preserve main material status.
TAIL
- Step 1: Check for any material from the same lot in the old step:
- Indicates the current Tail is not truly a tail.
- Switch roles:
- Front material becomes Middle (or Head).
- Back material becomes Tail.
-
Update both main material head and tail attributes accordingly.
-
Step 2: If switched material is now a Tail with PrimaryQuantity == 0:
-
Trigger Tail search for a suitable merge target.
-
Step 3: Check for a Head with quantity 0 in the current step:
- Indicates the Head intends to terminate.
- Merge Head into Tail(unless switched to Middle already).
- Merge logic:
- Do not terminate the source if it's the main material.
- If necessary, switch merge target to preserve main material status.
HEAD
- No re-evaluation needed for Heads.
- Re-evaluations already occur during:
- Merges (where Head is the final material merged with the old Head).
- Splits (where ranks are reassigned post-split).
- MoveNext of Middles or Tail (which automatically updates the Head as needed).
Label Verification and Reconciliation#
MedDevRecordPrintHistory#
Record History of Printing Printable Documents
- Action Groups:
BusinessObjects.PrintableDocument.Print.Post BusinessObjects.MaterialCollection.PrintMaterialLabel.Post PrintManagement.PrintManagementOrchestration.PrintPrintableDocuments.Post
- Pre Conditions:
N/A
- Action:
Update Material Relation MedDevMaterialPrintableDocument with the requested print counts
MedDevPreFillDataCollectionInstance#
Fill out the DataCollection instance based on the relation MedDevMaterialPrintableDocument of the material.
- Action Groups:
MaterialManagement.MaterialManagementOrchestration.ComplexTrackInMaterials.Post
-
Pre Conditions:
N/A -
Action:
If the relation MedDevMaterialPrintableDocument of a material has some values and dispatch and track in the material,then open a DataCollection instance through post data or track out wizard,the values are being populated to the DataCollection instance from MedDevMaterialPrintableDocument the relation
MedDevHandleProtocolInstanceCreation#
Handle the addition of materials when Protocol Instance is opened.
- Action Groups:
ExceptionManagement.ExceptionManagementOrchestration.OpenProtocolInstance.Post BusinessObjects.DataCollectionInstance.Post.Post
- Pre Conditions:
N/A
- Action:
When Protocol Instance is opened on label verification/reconciliation on continuous flows, associate materials from the same group (with the same Manufacturer Lot Number as the original materials) to the Protocol Instance.
eDHR Validation and Sign-off#
MedDevMaterialProtocolContextPreValidation#
Pre-validates configuration to insert or update in the MedDevMaterialProtocolContext Smart Table.
- Action Groups:
N/A
- Pre Conditions:
N/A
- Action:
Checks that if the Step has MedDevIsMatProtocolStep attribute enabled, then for each Operation, the required fields are validated as follows:
- When Operation is AssociateMaterial, one and only one of GroupingProperty or GroupingRule is set.
- When Operation is AttachDocument, validate the Report column is not empty.
If any of these constraints is not met, a localized exception is thrown.
MedDevHandleProtocolValidation#
Handle the protocol association to materials
- Action Groups:
BusinessObjects.MaterialCollection.TrackOut.Post BusinessObjects.MaterialCollection.MoveToNextStep.Post
- Pre Conditions:
- Step has attribute
MedDevIsMatProtocolStepenabled. -
Protocol operations configured in SmartTable
MedDevMaterialProtocolContext. -
Action:
Check if the Step has the MedDevIsMatProtocolStep attribute enabled.
If so, resolve the SmartTable MedDevMaterialProtocolContext to get the protocol information about Operation AssociateMaterial
- If grouping by property
- If property = "Name", we just associate the current material to the protocol
- If property = "Manufacturer Lot Number"/"Production Order", get the active materials by the respective property
- If grouping by rule
- Execute rule and get the list of materials to associate with the Protocol.
Check if there is already an open Protocol Instance for the Protocol where any of the grouped materials is assigned.
- If yes, check the materials from the same group which are not already in the Protocol Instance, and add them to the same Protocol Instance.
- If no, create a new Protocol Instance and associate all grouped materials to it.