Visit actions
Introduction
The Visit Actions table allows the definition of actions at patient visits, e.g. screen failure, randomization, titration, or dispensing.
Specified actions within a visit are forecasted to occur in the sequence they are specified. This is called an action sequence. Not all actions follow this logic, the exceptions are noted in the Visit Actions section below.
Some visit actions can lead to multiple nodes in the patient tree being shown for a single visit. This occurs if multiple actions are associated with a single visit which cannot be shown with a single node.
Example: Multiple nodes for visit screening because Collect Data is used at screening, resulting in a ‘screening_>=50kg’ node and a ‘screening_<50kg’ node
All visit actions are interpreted in order of appearance per visit. This can influence the patient journey, such as in the following examples:
If a dispensing action is defined before a titration action for a visit, then patients will be selected for dispensing according to their dose level before the titration.
If a dispensing action is defined after a titration action for a visit, then patients will be selected for dispensing according to their dose level after the titration.
Notwithstanding the above, the impact of some visit actions is always considered at the end of a visit. Visit actions where this applies are:
This can influence the distribution of patients on the patient journey, such as in the following example:
The following visit actions are specified for a visit
Discontinue 20% --- if dose is Low
Discontinue 50% --- if dose is High
Set dose level: High --- if dose is Low
In this case, patients on dose level Low will discontinue with a 20% probability, but this will be shown on the connector(s) to the first node of the following visit.
Table columns and contents
Visit
Alias
Event
Definition
Visits in the visit actions table can be specified as comma-separated visit names (e.g. V1, V2) in column Visit.
Rules
Specifying visits is mandatory unless these are already specified in the table header. If no visit is entered for a table row, an error with the following message is shown:
argument of type 'NoneType' is not iterable
Visits in the visit actions table have to match specified visits in the visit schedule. If an invalid visit name is entered for a table row, no error is raised, but the row will not be interpreted for that visit.
Notes
Column visit is not needed if a visit actions table for specific visits is defined.
Treatment Arm
Alias
Treatment group.
Definition
Treatment arms in the visit actions table can be specified as comma-separated treatment arm names (e.g. TA, TB) in column Treatment Arm.
Rules
Treatment arms in rows without action Randomize of the visit actions table have to match specified treatment arms in rows with action Randomize of the visit actions table. If an invalid treatment arm is entered, a warning with the following message is shown:
No treatment arm identified in [value as entered for treatment arm]. The action will apply for all treatment arms.
Notes
Treatment arms occur in the visit actions table only.
Treatment arms are defined in rows with action Randomize.
Cohort
Definition
Cohorts in the visit actions table can be specified as comma-separated cohort codes (e.g. CO_01, CO_02) in column Cohort. Specifying a cohort defines that an action only occurs for patients in the specified cohort. If an invalid cohort is entered, a warning with the following message is shown:
No cohorts identified in ERROR. The action will apply for all cohorts.
Rules
Cohorts in the visit actions table have to match specified cohorts in the cohorts table.
Study Phase
Definition
Study phases in the visit actions table can be specified as comma-separated study phase codes (e.g. EUR, APAC) in column Study Phase. Specifying a study phase defines that a screen fail, dispensing or discontinuation action only occurs in the specified study phase.
Rules
Study phases in the visit actions table have to match specified phases in study phases. If an invalid study phase is entered, a warning with the following message is shown:
No study phases identified in [value as entered for study phase]. The action will apply for all study phases.
Visit action rows with a defined study phase can only contain actions dispense or discontinue. If a different action is specified, an error with the following message is shown:
Action of type [action as specified] isn't allowed in combination with conditionals using Study Phase. Only the following actions are allowed: ['DispenseAction', 'DiscontinueAction', 'ScreenfailAction'].
Notes
If study phases are defined in the visit actions table, 4C Supply® will create a set of study-phase-specific patient treatment trees.
Region
Definition
Regions in the visit actions table can be specified as comma-separated region codes (e.g. EUR, APAC) in column Region. Specifying a region defines that an action only occurs for patients in the specified region.
Rules
Regions in the visit actions table have to match regions specified in the network table. If an invalid region is entered, a warning with the following message is shown:
No regions identified in [value as entered for region]. The action will apply for all regions.
Dispensing units specified to be dispensed in a region have to be able to reach that region by the specified distribution network. If a dispensing unit is specified to be dispensed in a region, but cannot reach the region using the specified distribution network, the forecast calculation aborts and a forecast calculation error with the following message is shown:
[Depot] is not in the network for this dispensing unit: [dispensing unit]. But demand from underlying sites or depots exists.
Notes
If regions are defined in the visit actions table, 4C Supply® will create a set of region-specific patient treatment trees.
Titration level
Alias: Dose level
Definition
Titration levels in the visit actions table can be specified as comma-separated does level codes (e.g. DL_L, DL_H) in column Titration Level. Specifying a titration level defines that an action only occurs for patients in the specified titration level.
Titration level names should not contain the dash/hyphen symbol. Underscores are recommended.
Rules
Titration levels have to match titrations specified in visit action set titration level. If an invalid titration level is entered, a warning with the following message is shown:
No titration levels identified in [titration level as specified]. The action will apply for all titration levels.
If a titration level is used to specify that an action only applies to a patients on a certain dose level, then every titration level needs to be covered. E.g: if titration levels "100", "75" and "50" are defined and it is intended to specify that patients on dose level 100 can titrate to 75 with a 10% probability at V3, then all of the following actions must be specified:
Visit |
Treatment Arm |
Dose Level |
Action |
Arguments |
---|---|---|---|---|
V3 |
|
100 |
Set Dose Level |
100: 0.9, 75: 0.1, 50: 0.0 |
V3 |
|
75 |
Set Dose Level |
100: 0.0, 75: 1.0, 50: 0.0 |
V3 |
|
50 |
Set Dose Level |
100: 0.0, 75: 0.0, 50: 1.0 |
Notes
Titration levels are defined in rows with action set titration level.
Conditionals
Definition
Conditionals in the visit actions table can be specified in column Conditionals. Specifying a conditional defines that an action only occurs for patients where the condition applies.
Conditionals in the visit actions table can be specified as:
{[Conditional]} == "[Value]" (e.g. {weight group} == "<50kg") or
logical combinations of these (e.g. {weight group} == "<50kg" or {phase} == "Ph_A")
Rules
Conditional names have to match the definition for the conditionals to be interpreted as the same object (e.g. weight group "<50kg" and weight group "<=50kg" will be interpreted as different weight groups).
If conditionals are used to specify that an action only applies to a certain group of patients, then every value of the collected data parameter used as conditional must be covered. E.g:
Collected data parameter "Weight Group" has values "<50kg", "50-70kg", "70-90kg" and ">90kg"
When "Weight Group" is used as a conditional for a dispensing action, then a dispensing action must be defined for:
{Weight Group} == "<50kg",
{Weight Group} == "50-70kg",
{Weight Group} == "70-90kg" and
{Weight Group} == ">90kg"
Notes
Conditionals are defined using action collect data.
Conditionals can be used e.g. to model weight-based or BSA-based dispensing.
Cohorts, regions and titration levels can also be specified as conditionals.
Group
Definition
Per default, actions of the same type at the same visit are evaluated together (i.e. are assumed to occur simultaneously). Action groups can be used to change this behavior. Actions in a group are evaluated together, while actions in different groups are evaluated separately. Action groups can be specified as text in column Groups of the visit actions table.
Rules
Actions groups are interpreted in order of appearance. If, e.g., an action belonging to group B appears before the first action belonging to group A, then the actions belonging to group B are evaluated together before the actions in group A.
Action
Definition
Actions (e.g. Randomize, Set titration level) in the visit actions table can be specified in column Action and determine which action occurs.
Rules
Only defined actions can be specified.
Only one action can be defined per row.
Some action need arguments to be interpreted correctly.
Notes
More details on visit actions are detailed below.
Arguments
Definition
Arguments are needed for some actions to function (e.g. action Titration needs the definition of titration probabilities). Arguments can be specified in the visit actions table in column Arguments.
Rules
Arguments are required for some actions.
Notes
More details on visit action arguments are detailed below.
Visit Actions
Collect Data
Definition
Action Collect data allows definition of user-defined data parameters and assignment of values with defined probabilities.
Rules
Action Collect data must be specified with the name of the data parameter in column Action and the values with probabilities in column Arguments.
Argument data parameter values is mandatory. If not specified, an error with the following message is shown:
'NoneType' object has no attribute 'split'
Data parameter definition syntax
Collect data: [data parameter name]
Arguments
Data parameter values
Syntax
[Value name]: [Probability], [Value name]: [Probability], …
Rules
Probabilities must be valid numbers (integer, float (=decimal), percentage). If a non-valid number is specified, an error with the following message is shown:
Could not convert '[value as entered for probability]' to a number. Ignoring this part of the action argument: [data parameter name]: [value as entered for probability]"
Specified probabilities are evaluated together to reach a total of 100% (e.g. <50kg: 3, >=50kg: 1 is evaluated as DL_Low: 75%, DL_High: 25%).
If argument(s) Data parameter values is/are specified without a probability, the interpreter will assume an equal distribution of probabilities and a total probability of 100%.
Notes
Care must be taken to ensure that collected data parameters and collected data parameter values specified as Conditionals accurately match the corresponding definitions in the row with action Collect Data (e.g. if a collected data parameter value is defined as "<50kg", then a Conditional with "< 50kg" will not be interpreted as expected.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
Screening |
|
|
Collect Data: Weight Group |
<50kg: 0.7, >=50kg: 0.3 |
Randomization |
|
|
Randomize |
TA: 2, TB: 1 |
Randomization |
TA |
{Weight Group} == "<50kg" |
Dispense |
1 of Kit_A |
Randomization |
TB |
{Weight Group} == "<50kg" |
Dispense |
1 of Kit_B |
Randomization |
TA |
{Weight Group} == ">=50kg" |
Dispense |
2 of Kit_A |
Randomization |
TB |
{Weight Group} == ">=50kg" |
Dispense |
2 of Kit_B |
Discontinue
Definition
Action Discontinue registers a patient as dropped out of the trial.
Rules
Action Discontinue accepts argument Discontinuation probability.
Argument Discontinuation probability is mandatory. If not specified, an error with the following message is shown:
Identified DiscontinueAction, but no probability found in the argument '[value as entered]'. Hence skipping it.
Arguments
Discontinuation probability
Syntax
[Probability]
Rules
Only one discontinuation probability can be specified (further entries will be ignored).
Probabilities must be valid numbers (integer, float (=decimal), percentage).
Notes
Irrespective of the action sequence, discontinuations are evaluated to occur at the end of the event they are specified for.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
V5 |
TA |
|
Discontinue |
0.02 |
V5 |
TB |
|
Discontinue |
0.05 |
Dispense
Alias
Dispensing
Fixed Dispensing
Definition
Action Dispense allocates dispensing units to patients.
Rules
Action Dispense accepts argument dispensing quantity.
If no argument is specified, the interpreter will assume that no kits should be dispensed for this action.
Arguments
Dispensing Quantity
Syntax
[Quantity] of [Dispensing unit code], [Quantity] of [Dispensing unit code], …
Rules
Quantity must be an integer. If a non-integer is specified, a warning with the following message is shown:
Either no quantity or no kit could be identified in [value as specified for quantity] of [value as specified for kit type], skipping
Dispensing unit code must match a dispensing unit code as specified in dispensing units. If a non-matching string value is entered, a warning with the following message is shown:
Either no quantity or no kit could be identified in [value specified for quantity] of [value as specified for kit type], skipping
Notes
It is generally best to keep dispensing as last action per visit as this supports "flattening" of the treatment tree to show one node per visit.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
V2 |
TA_1 |
|
Fixed dispensing |
1 of Kit_A, 1 of Kit_SoC |
V2 |
TA_2 |
|
Fixed dispensing |
1 of Kit_B, 1 of Kit_SoC |
Move to event
Alias
Move patient to event
Move patient to visit
Definition
Action Move to event allows patients to skip visits.
Rules
Action Move to event level accepts argument Visit.
Argument Visit to is mandatory. If not specified, an error with the following message is shown:
argument of type 'NoneType' is not iterable
Arguments
Visit
Syntax
[Visit]: [probability]
Rules
Visit must match specified visits in the visit schedule. If a non-valid string is entered, a warning with the following message is shown:
Detected MOVE PATIENT TO EVENT action, but couldn't find any events in arguments [value as specified for visit]. Skipping action
Couldn't interpret action Move to visit: [value as specified for visit], skipping row
Probability must be a valid decimal or percentage value. If an invalid entry is made, a warning with the following message is shown:
No probability identified for 'MOVE PATIENT TO EVENT' action in [value as specified for visit]: [value as specified for probability], assuming probability of 1. To define a probability, the argument should use the syntax 'event: probability'
Notes
Visit schedule sections which are reached using a move to event action are shown in the patient treatment input screen with suffix _mte_[moved from visit]_[moved to visit]
in the patient code. If, e.g. a patient on treatment arm taA and dose level dlL reaches visit Esc1 by moving from V2, then the patient code at Esc2 (visit after Esc1) is Esc2_taA_dlL_mte_V2_Esc1
.
Irrespective of the action sequence, move to event actions are evaluated to occur at the end of the event they are specified for.
Action Move to Event was added with 4C Supply® V1.3.0 (
).Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
V3 |
TA, TB |
|
Collect data: Escape |
Yes: 0.1, No: 0.9 |
V3 |
TA, TB |
{Escape} == "Yes" |
Move to event |
Escape |
Randomize
Alias
Randomization
Assign treatment arm
Definition
Action Randomize assigns a treatment arm to a patient.
Rules
Action Randomize accepts argument treatment arm to specify which treatment arms patients can be randomized to and the randomization ratio.
Argument treatment arm is mandatory. If not specified, an error with the following message is shown:
'NoneType' object has no attribute 'split'
In forecast calculations with RTSM data extract, the randomization visit specified in 4C Supply® must map correctly to the randomization visit in the RTSM. This can be verified in the RTSM data extract mapping input screen.
If the randomization visit specified in 4C Supply® is earlier in the visit schedule than the randomization visit specified in the RTSM, then there may be patients in the extract without a treatment arm for whom 4C Supply® expects a treatment arm. This will generate a forecast calculation error.
If the randomization visit specified in 4C Supply® is later in the visit schedule than the randomization visit specified in the RTSM, then there may be patients in the extract with a treatment for whom 4C Supply® does not expect a treatment arm. This may cause the treatment arm of the respective patient to be overwritten in the forecast.
Arguments
Treatment Arm
Syntax
[Treatment Arm]: [Ratio], [Treatment Arm]: [Ratio], …
Rules
Ratio must be an integer. If a string value is specified, an error with the following message will be shown:
Could not convert '[value as entered]' to a number. Ignoring this part of the action argument: [treatment arm as defined]: [value as entered]
In forecast calculations with RTSM data extract, the treatment arms specified in 4C Supply® must map correctly to the corresponding treatment arms in the RTSM. This can be verified in the RTSM data extract mapping input screen.
Notes
Although there is a specific column Treatment arm, treatment arms are defined as argument for action Randomize because they are initially defined here.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
V1 |
|
|
Randomize |
TA_1: 2, TA_2: 2, TA_Pla: 1 |
Register
Alias
Screen
Definition
Action Register registers a patient for participation in the trial.
Rules
Action Register accepts no arguments. Specified arguments do not generate an error message, but are ignored.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Argument |
---|---|---|---|---|
Screening |
|
|
Register |
1 |
Screen fail
Definition
Defines the proportion of patients who attend the screening visit but no subsequent visits.
In forecast calculations with RTSM data extract, the screen failure rate specified in 4C Supply® is the screen failure rate which is considered in the forecast calculation for
existing screened patients and
forecasted patients.
Rules
Accepts percentage values (e.g. 50%). If a non-valid entry is made when defining in the specification, no error is shown, but a screen failure rate of 0% is assumed.
Valid range: 0% - 99%. If 100% are specified, an error with the following message is shown:
'pop from an empty set'
If >100% are specified, an error with the following message is shown:
float() argument must be a string or a number, not 'NoneType'
In forecast calculations with RTSM data extract, if the screen failure rate specified in 4C Supply® does not match the real future screen failure rate (for which the RTSM extract often contains valuable data), no warning is shown, but the demand and supply forecasts can be incorrect. It may be advisable to adjust the screening failure rate that is declared in 4C Supply® to match the screening failure rate observed in the actual patient population.
Arguments
Screen fail probability
Syntax
[Probability]
Rules
Probabilities must be valid numbers (integer, float (=decimal), percentage). If non-valid arguments are specified, an error with the following message is shown:
unsupported operand type(s) for *: 'NoneType' and 'int'
Probabilities must be between 0% and 100% (0 and 1). If an out-of-range arguments is specified, an error with the following message is shown:
unsupported operand type(s) for *: 'NoneType' and 'int'
Notes
Irrespective of the action sequence, screen fail actions are evaluated to occur at the end of the event they are specified for.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
Screening |
|
|
Screen |
|
Screening |
|
|
Screen fail |
0.1 |
Titration
Alias
Set titration level
Set dose level
Definition
Action Titration allows patients to titrate from on titration level to another.
Rules
Action Titration level accepts argument Titrate to.
Argument Titrate to is mandatory. If not specified, an error with the following message is shown:
'NoneType' object has no attribute 'split'
Arguments
Titrate to
Syntax
[Titration level]: [Probability], [Titration level]: [Probability], …
Rules
Probabilities must be valid numbers (integer, float (=decimal), percentage). If non-valid arguments are specified, an error with the following message is shown:
unsupported operand type(s) for *: 'NoneType' and 'int'
Specified probabilities of argument Titrate to are evaluated together to reach a total of 100% (e.g. DL_Low: 3, DL_High: 1 is evaluated as DL_Low: 75%, DL_High: 25%).
If argument(s) Titrate to is/are specified without a probability, the interpreter will assume an equal distribution of probabilities and a total probability of 100%.
Example
Visit |
Treatment Arm |
Conditionals |
Action |
Arguments |
---|---|---|---|---|
V3 |
TA_A |
|
Titration |
DL_Low |
V4 |
TA_A |
DL_Low |
Titration |
DL_Low: 0.7, DL_Med: 0.2, DL_High: 0.1 |