π
← Back to Categories
GCX015 Sequence (GCX015R)
Objective: Handles GCX015R processing.
πΊοΈ High-Level Visual Map
flowchart TD
A[Start GCX015 Processing]:::start
B[1:Initialize System Configuration]:::process
C[2:Load Incoming Messages]:::process
D{Message Available?}:::decision
E[27:Close MQ Connections]:::final
F[3:Determine Message Type]:::process
G{Test Message?}:::decision
H[28:Process Special Test Messages]:::process
I{Train or Cargo?}:::decision
J[16:Retrieve Train Records]:::process
K[15:Retrieve Cargo Records]:::process
L[6:Process Message Segments]:::process
M[8:Validate Required Segments]:::process
N{Valid Segments?}:::decision
O[12:Send Error Messages]:::process
P[9:Process Rejection Information]:::process
Q[10:Determine Final Status]:::process
R{Should Update Status?}:::decision
S[17:Update Train Status]:::process
T[18:Update Cargo Status]:::process
U[19:Check AEI Train Qualification]:::process
V{AEI Qualified?}:::decision
W[20:Load Train Car Information]:::process
X[21:Send AEI Status Messages]:::process
Y[22:Send Terminal Status Messages]:::process
Z[23:Process Automatic Train Arrival]:::process
AA[13:Log Message Processing]:::process
BB[26:Send Merlin Reports]:::process
CC[25:Update Administrative Tables]:::process
MQ1[(MQS-MESSAGE)]:::datasource
IMS1[(GCSTBRT-AD-SEGMENT)]:::datasource
IMS2[(GCWTL-TRAIN-LIST)]:::datasource
IMS3[(GCSUSRT-SEGMENT)]:::datasource
IMS4[(GCSTBRT-MS-SEGMENT)]:::datasource
IMS5[(GCSTBRT-T1-SEGMENT)]:::datasource
A --> B
B --> C
IMS1 -.-> |Read Admin Config| B
C --> D
MQ1 -.-> |Read Messages| C
D -->|No Messages| E
D -->|Messages Found| F
F --> G
G -->|Yes| H
H --> CC
IMS5 -.-> |Update Timestamps| CC
CC --> E
G -->|No| I
I -->|Train| J
I -->|Cargo| K
IMS2 -.-> |Get Train Data| J
IMS3 -.-> |Get Cargo Data| K
J --> L
K --> L
L --> M
M --> N
N -->|Invalid| O
N -->|Valid| P
P --> Q
Q --> R
R -->|No Update| AA
R -->|Update Train| S
R -->|Update Cargo| T
IMS2 -.-> |Update Train Status| S
IMS3 -.-> |Update Cargo Status| T
S --> U
U --> V
V -->|Yes| W
W --> X
X --> Y
Y --> Z
Z --> AA
V -->|No| AA
T --> AA
O --> AA
AA --> BB
IMS4 -.-> |Get Error Messages| L
BB --> C
classDef start fill:#67A353
classDef process fill:#08AAD2
classDef decision fill:#FFE347
classDef datasource fill:#2EA597
classDef final fill:#D13313
classDef success fill:#2BB534
classDef error fill:#D13313
π Step-by-Step Logic Trace
β Consolidated Acceptance Criteria
- Administrative configuration is being initialized → the system should retrieve admin segment with table ID 'AD' and sequence ID 'ADMINID', and if not found, set default Merlin ID to 'OM01247'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_1InitializeSystemConfiguration(["Start Step"])
E_1InitializeSystemConfiguration(["End Step"])
N_1InitializeSystemConfiguration_Node0{"Administrative configuration is
being initialized"}:::decision N_1InitializeSystemConfiguration_Node0_action["The system should retrieve admin
segment with table ID AD and
sequence ID ADMINID , and if not
found, set default Merlin ID to
OM01247"]:::main N_1InitializeSystemConfiguration_Node0 -- Yes --> N_1InitializeSystemConfiguration_Node0_action N_1InitializeSystemConfiguration_Node0_action --> E_1InitializeSystemConfiguration S_1InitializeSystemConfiguration --> N_1InitializeSystemConfiguration_Node0 N_1InitializeSystemConfiguration_Node0 -- No --> E_1InitializeSystemConfiguration
being initialized"}:::decision N_1InitializeSystemConfiguration_Node0_action["The system should retrieve admin
segment with table ID AD and
sequence ID ADMINID , and if not
found, set default Merlin ID to
OM01247"]:::main N_1InitializeSystemConfiguration_Node0 -- Yes --> N_1InitializeSystemConfiguration_Node0_action N_1InitializeSystemConfiguration_Node0_action --> E_1InitializeSystemConfiguration S_1InitializeSystemConfiguration --> N_1InitializeSystemConfiguration_Node0 N_1InitializeSystemConfiguration_Node0 -- No --> E_1InitializeSystemConfiguration
File: GCX015.cbl
GIVEN:
The system is starting message processing
WHEN:
Administrative configuration is being initialized
THEN:
The system should retrieve admin segment with table ID 'AD' and sequence ID 'ADMINID', and if not found, set default Merlin ID to 'OM01247'
β Consolidated Acceptance Criteria
- Loading messages from the queue → the system should connect to MQ manager, open the queue, and get messages with conversion options enabled
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_2LoadIncomingMessages(["Start Step"])
E_2LoadIncomingMessages(["End Step"])
N_2LoadIncomingMessages_Node0{"Loading messages from the queue"}:::decision
N_2LoadIncomingMessages_Node0_action["The system should connect to MQ
manager, open the queue, and get
messages with conversion options
enabled"]:::main N_2LoadIncomingMessages_Node0 -- Yes --> N_2LoadIncomingMessages_Node0_action N_2LoadIncomingMessages_Node0_action --> E_2LoadIncomingMessages S_2LoadIncomingMessages --> N_2LoadIncomingMessages_Node0 N_2LoadIncomingMessages_Node0 -- No --> E_2LoadIncomingMessages
manager, open the queue, and get
messages with conversion options
enabled"]:::main N_2LoadIncomingMessages_Node0 -- Yes --> N_2LoadIncomingMessages_Node0_action N_2LoadIncomingMessages_Node0_action --> E_2LoadIncomingMessages S_2LoadIncomingMessages --> N_2LoadIncomingMessages_Node0 N_2LoadIncomingMessages_Node0 -- No --> E_2LoadIncomingMessages
File: GCX015.cbl
GIVEN:
The system has initialized configuration
WHEN:
Loading messages from the queue
THEN:
The system should connect to MQ manager, open the queue, and get messages with conversion options enabled
β Consolidated Acceptance Criteria
- M10 segment reference number starts with 'TRAIN' → the message should be classified as Train type, or if M10 reference number starts with 'CARGO' then classify as Cargo type, or if neither but M11 segment exists then extract cargo information from M11
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_3DetermineMessageType(["Start Step"])
E_3DetermineMessageType(["End Step"])
N_3DetermineMessageType_Node0{"M10 segment reference number starts
with TRAIN"}:::decision N_3DetermineMessageType_Node0_action["The message should be classified as
Train type, or if M10 reference
number starts with CARGO then
classify as Cargo type, or if
neither but M11 segment exists then
extract cargo information from M11"]:::main N_3DetermineMessageType_Node0 -- Yes --> N_3DetermineMessageType_Node0_action N_3DetermineMessageType_Node0_action --> E_3DetermineMessageType S_3DetermineMessageType --> N_3DetermineMessageType_Node0 N_3DetermineMessageType_Node0 -- No --> E_3DetermineMessageType
with TRAIN"}:::decision N_3DetermineMessageType_Node0_action["The message should be classified as
Train type, or if M10 reference
number starts with CARGO then
classify as Cargo type, or if
neither but M11 segment exists then
extract cargo information from M11"]:::main N_3DetermineMessageType_Node0 -- Yes --> N_3DetermineMessageType_Node0_action N_3DetermineMessageType_Node0_action --> E_3DetermineMessageType S_3DetermineMessageType --> N_3DetermineMessageType_Node0 N_3DetermineMessageType_Node0 -- No --> E_3DetermineMessageType
File: GCX015.cbl
GIVEN:
A valid message is being processed
WHEN:
M10 segment reference number starts with 'TRAIN'
THEN:
The message should be classified as Train type, or if M10 reference number starts with 'CARGO' then classify as Cargo type, or if neither but M11 segment exists then extract cargo information from M11
β Consolidated Acceptance Criteria
- Processing segments by type where M10 contains manifest data, P4 contains additional data, N10 contains line release number, K1 contains message text, and K3 contains acceptance data → the system should process each segment type appropriately and continue until end marker or spaces are encountered
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_6ProcessMessageSegments(["Start Step"])
E_6ProcessMessageSegments(["End Step"])
N_6ProcessMessageSegments_Node0{"Processing segments by type where
M10 contains manifest data, P4
contains additional data, N10
contains line release number, K1
contains message text, and K3
contains acceptance data"}:::decision N_6ProcessMessageSegments_Node0_action["The system should process each
segment type appropriately and
continue until end marker or spaces
are encountered"]:::main N_6ProcessMessageSegments_Node0 -- Yes --> N_6ProcessMessageSegments_Node0_action N_6ProcessMessageSegments_Node0_action --> E_6ProcessMessageSegments S_6ProcessMessageSegments --> N_6ProcessMessageSegments_Node0 N_6ProcessMessageSegments_Node0 -- No --> E_6ProcessMessageSegments
M10 contains manifest data, P4
contains additional data, N10
contains line release number, K1
contains message text, and K3
contains acceptance data"}:::decision N_6ProcessMessageSegments_Node0_action["The system should process each
segment type appropriately and
continue until end marker or spaces
are encountered"]:::main N_6ProcessMessageSegments_Node0 -- Yes --> N_6ProcessMessageSegments_Node0_action N_6ProcessMessageSegments_Node0_action --> E_6ProcessMessageSegments S_6ProcessMessageSegments --> N_6ProcessMessageSegments_Node0 N_6ProcessMessageSegments_Node0 -- No --> E_6ProcessMessageSegments
File: GCX015.cbl
GIVEN:
Message segments are available for processing
WHEN:
Processing segments by type where M10 contains manifest data, P4 contains additional data, N10 contains line release number, K1 contains message text, and K3 contains acceptance data
THEN:
- The system should process each segment type appropriately
- Continue until end marker or spaces are encountered
β Consolidated Acceptance Criteria
- Checking for required segments → the system should log error if M10 segment not found, or if P4 segment not found, or if K3 segment not found and create default K3 segment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_8ValidateRequiredSegments(["Start Step"])
E_8ValidateRequiredSegments(["End Step"])
N_8ValidateRequiredSegments_Node0{"Checking for required segments"}:::decision
N_8ValidateRequiredSegments_Node0_action["The system should log error if M10
segment not found, or if P4 segment
not found, or if K3 segment not
found and create default K3 segment"]:::main N_8ValidateRequiredSegments_Node0 -- Yes --> N_8ValidateRequiredSegments_Node0_action N_8ValidateRequiredSegments_Node0_action --> E_8ValidateRequiredSegments S_8ValidateRequiredSegments --> N_8ValidateRequiredSegments_Node0 N_8ValidateRequiredSegments_Node0 -- No --> E_8ValidateRequiredSegments
segment not found, or if P4 segment
not found, or if K3 segment not
found and create default K3 segment"]:::main N_8ValidateRequiredSegments_Node0 -- Yes --> N_8ValidateRequiredSegments_Node0_action N_8ValidateRequiredSegments_Node0_action --> E_8ValidateRequiredSegments S_8ValidateRequiredSegments --> N_8ValidateRequiredSegments_Node0 N_8ValidateRequiredSegments_Node0 -- No --> E_8ValidateRequiredSegments
File: GCX015.cbl
GIVEN:
Message segments have been processed
WHEN:
Checking for required segments
THEN:
- The system should log error if m10 segment not found, or if p4 segment not found, or if k3 segment not found
- Create default k3 segment
β Consolidated Acceptance Criteria
- K3 total reject count equals zero and total accept count is greater than zero → the system should set ACK status, but if total reject count is greater than zero, set ERROR status, and if both counts are zero, set ACK status with warning message
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_9ProcessRejectionInformation(["Start Step"])
E_9ProcessRejectionInformation(["End Step"])
N_9ProcessRejectionInformation_Node0{"K3 total reject count equals zero
and total accept count is greater
than zero"}:::decision N_9ProcessRejectionInformation_Node0_action["The system should set ACK status,
but if total reject count is greater
than zero, set ERROR status, and if
both counts are zero, set ACK status
with warning message"]:::exclusion N_9ProcessRejectionInformation_Node0 -- Yes -->|Alternative| N_9ProcessRejectionInformation_Node0_action N_9ProcessRejectionInformation_Node0_action --> E_9ProcessRejectionInformation S_9ProcessRejectionInformation --> N_9ProcessRejectionInformation_Node0 N_9ProcessRejectionInformation_Node0 -- No --> E_9ProcessRejectionInformation
and total accept count is greater
than zero"}:::decision N_9ProcessRejectionInformation_Node0_action["The system should set ACK status,
but if total reject count is greater
than zero, set ERROR status, and if
both counts are zero, set ACK status
with warning message"]:::exclusion N_9ProcessRejectionInformation_Node0 -- Yes -->|Alternative| N_9ProcessRejectionInformation_Node0_action N_9ProcessRejectionInformation_Node0_action --> E_9ProcessRejectionInformation S_9ProcessRejectionInformation --> N_9ProcessRejectionInformation_Node0 N_9ProcessRejectionInformation_Node0 -- No --> E_9ProcessRejectionInformation
File: GCX015.cbl
GIVEN:
A K3 segment is being processed
WHEN:
- K3 total reject count equals zero
- Total accept count is greater than zero
THEN:
The system should set ACK status, but if total reject count is greater than zero, set ERROR status, and if both counts are zero, set ACK status with warning message
β Consolidated Acceptance Criteria
- Train is in pre-arrived status → the system should set pre-arrival status, or if train review is complete, set review-completed status, otherwise set standard ACK status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_10DetermineFinalStatus(["Start Step"])
E_10DetermineFinalStatus(["End Step"])
N_10DetermineFinalStatus_Node0{"Train is in pre-arrived status"}:::decision
N_10DetermineFinalStatus_Node0_action["The system should set pre-arrival
status, or if train review is
complete, set review-completed
status, otherwise set standard ACK
status"]:::main N_10DetermineFinalStatus_Node0 -- Yes --> N_10DetermineFinalStatus_Node0_action N_10DetermineFinalStatus_Node0_action --> E_10DetermineFinalStatus S_10DetermineFinalStatus --> N_10DetermineFinalStatus_Node0 N_10DetermineFinalStatus_Node0 -- No --> E_10DetermineFinalStatus
status, or if train review is
complete, set review-completed
status, otherwise set standard ACK
status"]:::main N_10DetermineFinalStatus_Node0 -- Yes --> N_10DetermineFinalStatus_Node0_action N_10DetermineFinalStatus_Node0_action --> E_10DetermineFinalStatus S_10DetermineFinalStatus --> N_10DetermineFinalStatus_Node0 N_10DetermineFinalStatus_Node0 -- No --> E_10DetermineFinalStatus
File: GCX015.cbl
GIVEN:
K3 acceptance data has been processed with zero rejections and positive acceptances
WHEN:
Train is in pre-arrived status
THEN:
The system should set pre-arrival status, or if train review is complete, set review-completed status, otherwise set standard ACK status
β Consolidated Acceptance Criteria
- Error status flag is set → the system should send error notification message via EMCSEND to configured Merlin recipients
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_12SendErrorMessages(["Start Step"])
E_12SendErrorMessages(["End Step"])
N_12SendErrorMessages_Node0{"Error status flag is set"}:::decision
N_12SendErrorMessages_Node0_action["The system should send error
notification message via EMCSEND to
configured Merlin recipients"]:::exclusion N_12SendErrorMessages_Node0 -- Yes -->|Alternative| N_12SendErrorMessages_Node0_action N_12SendErrorMessages_Node0_action --> E_12SendErrorMessages S_12SendErrorMessages --> N_12SendErrorMessages_Node0 N_12SendErrorMessages_Node0 -- No --> E_12SendErrorMessages
notification message via EMCSEND to
configured Merlin recipients"]:::exclusion N_12SendErrorMessages_Node0 -- Yes -->|Alternative| N_12SendErrorMessages_Node0_action N_12SendErrorMessages_Node0_action --> E_12SendErrorMessages S_12SendErrorMessages --> N_12SendErrorMessages_Node0 N_12SendErrorMessages_Node0 -- No --> E_12SendErrorMessages
File: GCX015.cbl
GIVEN:
An error status has been determined
WHEN:
Error status flag is set
THEN:
The system should send error notification message via EMCSEND to configured Merlin recipients
β Consolidated Acceptance Criteria
- Creating log entries → the system should format different log messages for cargo versus train operations, and use special format when status should not be updated
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_13LogMessageProcessing(["Start Step"])
E_13LogMessageProcessing(["End Step"])
N_13LogMessageProcessing_Node0{"Creating log entries"}:::decision
N_13LogMessageProcessing_Node0_action["The system should format different
log messages for cargo versus train
operations, and use special format
when status should not be updated"]:::main N_13LogMessageProcessing_Node0 -- Yes --> N_13LogMessageProcessing_Node0_action N_13LogMessageProcessing_Node0_action --> E_13LogMessageProcessing S_13LogMessageProcessing --> N_13LogMessageProcessing_Node0 N_13LogMessageProcessing_Node0 -- No --> E_13LogMessageProcessing
log messages for cargo versus train
operations, and use special format
when status should not be updated"]:::main N_13LogMessageProcessing_Node0 -- Yes --> N_13LogMessageProcessing_Node0_action N_13LogMessageProcessing_Node0_action --> E_13LogMessageProcessing S_13LogMessageProcessing --> N_13LogMessageProcessing_Node0 N_13LogMessageProcessing_Node0 -- No --> E_13LogMessageProcessing
File: GCX015.cbl
GIVEN:
Message processing activities need to be logged
WHEN:
Creating log entries
THEN:
The system should format different log messages for cargo versus train operations, and use special format when status should not be updated
β Consolidated Acceptance Criteria
- Retrieving cargo records using the cargo control number from M10 data → the system should call cargo I/O module with GET function for cargo segment, and if not found, log error message indicating cargo control number was not found
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_15RetrieveCargoRecords(["Start Step"])
E_15RetrieveCargoRecords(["End Step"])
N_15RetrieveCargoRecords_Node0{"Retrieving cargo records using the
cargo control number from M10 data"}:::decision N_15RetrieveCargoRecords_Node0_action["The system should call cargo IO
module with GET function for cargo
segment, and if not found, log error
message indicating cargo control
number was not found"]:::main N_15RetrieveCargoRecords_Node0 -- Yes --> N_15RetrieveCargoRecords_Node0_action N_15RetrieveCargoRecords_Node0_action --> E_15RetrieveCargoRecords S_15RetrieveCargoRecords --> N_15RetrieveCargoRecords_Node0 N_15RetrieveCargoRecords_Node0 -- No --> E_15RetrieveCargoRecords
cargo control number from M10 data"}:::decision N_15RetrieveCargoRecords_Node0_action["The system should call cargo IO
module with GET function for cargo
segment, and if not found, log error
message indicating cargo control
number was not found"]:::main N_15RetrieveCargoRecords_Node0 -- Yes --> N_15RetrieveCargoRecords_Node0_action N_15RetrieveCargoRecords_Node0_action --> E_15RetrieveCargoRecords S_15RetrieveCargoRecords --> N_15RetrieveCargoRecords_Node0 N_15RetrieveCargoRecords_Node0 -- No --> E_15RetrieveCargoRecords
File: GCX015.cbl
GIVEN:
A message has been classified as Cargo type
WHEN:
Retrieving cargo records using the cargo control number from M10 data
THEN:
The system should call cargo I/O module with GET function for cargo segment, and if not found, log error message indicating cargo control number was not found
β Consolidated Acceptance Criteria
- Retrieving train records using the train ID from M10 data → the system should call train I/O module with GET function for root record only, and if not found, log error message indicating train ID was not found
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_16RetrieveTrainRecords(["Start Step"])
E_16RetrieveTrainRecords(["End Step"])
N_16RetrieveTrainRecords_Node0{"Retrieving train records using the
train ID from M10 data"}:::decision N_16RetrieveTrainRecords_Node0_action["The system should call train IO
module with GET function for root
record only, and if not found, log
error message indicating train ID
was not found"]:::main N_16RetrieveTrainRecords_Node0 -- Yes --> N_16RetrieveTrainRecords_Node0_action N_16RetrieveTrainRecords_Node0_action --> E_16RetrieveTrainRecords S_16RetrieveTrainRecords --> N_16RetrieveTrainRecords_Node0 N_16RetrieveTrainRecords_Node0 -- No --> E_16RetrieveTrainRecords
train ID from M10 data"}:::decision N_16RetrieveTrainRecords_Node0_action["The system should call train IO
module with GET function for root
record only, and if not found, log
error message indicating train ID
was not found"]:::main N_16RetrieveTrainRecords_Node0 -- Yes --> N_16RetrieveTrainRecords_Node0_action N_16RetrieveTrainRecords_Node0_action --> E_16RetrieveTrainRecords S_16RetrieveTrainRecords --> N_16RetrieveTrainRecords_Node0 N_16RetrieveTrainRecords_Node0 -- No --> E_16RetrieveTrainRecords
File: GCX015.cbl
GIVEN:
A message has been classified as Train type
WHEN:
Retrieving train records using the train ID from M10 data
THEN:
The system should call train I/O module with GET function for root record only, and if not found, log error message indicating train ID was not found
β Consolidated Acceptance Criteria
- Train is deleted and status is ACK, or train is delete-pending and status is ACK → the system should set status to 'DELETED', or if train is not deleted or delete-pending, update with current status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_17UpdateTrainStatus(["Start Step"])
E_17UpdateTrainStatus(["End Step"])
N_17UpdateTrainStatus_Node0{"Train is deleted and status is ACK,
or train is delete-pending and
status is ACK"}:::decision N_17UpdateTrainStatus_Node0_action["The system should set status to
DELETED , or if train is not deleted
or delete-pending, update with
current status"]:::main N_17UpdateTrainStatus_Node0 -- Yes --> N_17UpdateTrainStatus_Node0_action N_17UpdateTrainStatus_Node0_action --> E_17UpdateTrainStatus S_17UpdateTrainStatus --> N_17UpdateTrainStatus_Node0 N_17UpdateTrainStatus_Node0 -- No --> E_17UpdateTrainStatus
or train is delete-pending and
status is ACK"}:::decision N_17UpdateTrainStatus_Node0_action["The system should set status to
DELETED , or if train is not deleted
or delete-pending, update with
current status"]:::main N_17UpdateTrainStatus_Node0 -- Yes --> N_17UpdateTrainStatus_Node0_action N_17UpdateTrainStatus_Node0_action --> E_17UpdateTrainStatus S_17UpdateTrainStatus --> N_17UpdateTrainStatus_Node0 N_17UpdateTrainStatus_Node0 -- No --> E_17UpdateTrainStatus
File: GCX015.cbl
GIVEN:
Train processing requires status update
WHEN:
- Train is deleted
- Status is ack, or train is delete-pending
- Status is ack
THEN:
The system should set status to 'DELETED', or if train is not deleted or delete-pending, update with current status
β Consolidated Acceptance Criteria
- Status is ACK and saved status description is spaces → the system should set cargo ACK flags, or if saved status exists, restore saved status and description, or if status is error, save current status and set error flags
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_18UpdateCargoStatus(["Start Step"])
E_18UpdateCargoStatus(["End Step"])
N_18UpdateCargoStatus_Node0{"Status is ACK and saved status
description is spaces"}:::decision N_18UpdateCargoStatus_Node0_action["The system should set cargo ACK
flags, or if saved status exists,
restore saved status and
description, or if status is error,
save current status and set error
flags"]:::main N_18UpdateCargoStatus_Node0 -- Yes --> N_18UpdateCargoStatus_Node0_action N_18UpdateCargoStatus_Node0_action --> E_18UpdateCargoStatus S_18UpdateCargoStatus --> N_18UpdateCargoStatus_Node0 N_18UpdateCargoStatus_Node0 -- No --> E_18UpdateCargoStatus
description is spaces"}:::decision N_18UpdateCargoStatus_Node0_action["The system should set cargo ACK
flags, or if saved status exists,
restore saved status and
description, or if status is error,
save current status and set error
flags"]:::main N_18UpdateCargoStatus_Node0 -- Yes --> N_18UpdateCargoStatus_Node0_action N_18UpdateCargoStatus_Node0_action --> E_18UpdateCargoStatus S_18UpdateCargoStatus --> N_18UpdateCargoStatus_Node0 N_18UpdateCargoStatus_Node0 -- No --> E_18UpdateCargoStatus
File: GCX015.cbl
GIVEN:
Cargo processing requires status update
WHEN:
- Status is ack
- Saved status description is spaces
THEN:
- The system should set cargo ack flags, or if saved status exists, restore saved status
- Description, or if status is error, save current status
- Set error flags
β Consolidated Acceptance Criteria
- Train has ACK status and AEI-SEND flag and ENROUTE-NOT-REPORTED flag and train ID position 23 equals 'T' → the system should qualify train for AEI processing and prepare customs transaction data
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_19CheckAEITrainQualification(["Start Step"])
E_19CheckAEITrainQualification(["End Step"])
N_19CheckAEITrainQualification_Node0{"Train has ACK status and AEI-SEND
flag and ENROUTE-NOT-REPORTED flag
and train ID position 23 equals T"}:::decision N_19CheckAEITrainQualification_Node0_action["The system should qualify train for
AEI processing and prepare customs
transaction data"]:::main N_19CheckAEITrainQualification_Node0 -- Yes --> N_19CheckAEITrainQualification_Node0_action N_19CheckAEITrainQualification_Node0_action --> E_19CheckAEITrainQualification S_19CheckAEITrainQualification --> N_19CheckAEITrainQualification_Node0 N_19CheckAEITrainQualification_Node0 -- No --> E_19CheckAEITrainQualification
flag and ENROUTE-NOT-REPORTED flag
and train ID position 23 equals T"}:::decision N_19CheckAEITrainQualification_Node0_action["The system should qualify train for
AEI processing and prepare customs
transaction data"]:::main N_19CheckAEITrainQualification_Node0 -- Yes --> N_19CheckAEITrainQualification_Node0_action N_19CheckAEITrainQualification_Node0_action --> E_19CheckAEITrainQualification S_19CheckAEITrainQualification --> N_19CheckAEITrainQualification_Node0 N_19CheckAEITrainQualification_Node0 -- No --> E_19CheckAEITrainQualification
File: GCX015.cbl
GIVEN:
Train status has been updated
WHEN:
- Train has ack status
- Aei-send flag
- Enroute-not-reported flag
- Train id position 23 equals 't'
THEN:
- The system should qualify train for aei processing
- Prepare customs transaction data
β Consolidated Acceptance Criteria
- Loading car information where container indicator is not 'C' → the system should load car initials, numbers, and equipment types, and determine loaded/empty status based on next car's container indicator
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_20LoadTrainCarInformation(["Start Step"])
E_20LoadTrainCarInformation(["End Step"])
N_20LoadTrainCarInformation_Node0{"Loading car information where
container indicator is not C"}:::decision N_20LoadTrainCarInformation_Node0_action["The system should load car
initials, numbers, and equipment
types, and determine loadedempty
status based on next car s container
indicator"]:::main N_20LoadTrainCarInformation_Node0 -- Yes --> N_20LoadTrainCarInformation_Node0_action N_20LoadTrainCarInformation_Node0_action --> E_20LoadTrainCarInformation S_20LoadTrainCarInformation --> N_20LoadTrainCarInformation_Node0 N_20LoadTrainCarInformation_Node0 -- No --> E_20LoadTrainCarInformation
container indicator is not C"}:::decision N_20LoadTrainCarInformation_Node0_action["The system should load car
initials, numbers, and equipment
types, and determine loadedempty
status based on next car s container
indicator"]:::main N_20LoadTrainCarInformation_Node0 -- Yes --> N_20LoadTrainCarInformation_Node0_action N_20LoadTrainCarInformation_Node0_action --> E_20LoadTrainCarInformation S_20LoadTrainCarInformation --> N_20LoadTrainCarInformation_Node0 N_20LoadTrainCarInformation_Node0 -- No --> E_20LoadTrainCarInformation
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
Train qualifies for AEI processing
WHEN:
Loading car information where container indicator is not 'C'
THEN:
The system should load car initials, numbers, and equipment types, and determine loaded/empty status based on next car's container indicator
β Consolidated Acceptance Criteria
- Sending AEI status messages → the system should retrieve AEI Merlin recipients from database, format train and status information, and send via EMCSEND3
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_21SendAEIStatusMessages(["Start Step"])
E_21SendAEIStatusMessages(["End Step"])
N_21SendAEIStatusMessages_Node0{"Sending AEI status messages"}:::decision
N_21SendAEIStatusMessages_Node0_action["The system should retrieve AEI
Merlin recipients from database,
format train and status information,
and send via EMCSEND3"]:::main N_21SendAEIStatusMessages_Node0 -- Yes --> N_21SendAEIStatusMessages_Node0_action N_21SendAEIStatusMessages_Node0_action --> E_21SendAEIStatusMessages S_21SendAEIStatusMessages --> N_21SendAEIStatusMessages_Node0 N_21SendAEIStatusMessages_Node0 -- No --> E_21SendAEIStatusMessages
Merlin recipients from database,
format train and status information,
and send via EMCSEND3"]:::main N_21SendAEIStatusMessages_Node0 -- Yes --> N_21SendAEIStatusMessages_Node0_action N_21SendAEIStatusMessages_Node0_action --> E_21SendAEIStatusMessages S_21SendAEIStatusMessages --> N_21SendAEIStatusMessages_Node0 N_21SendAEIStatusMessages_Node0 -- No --> E_21SendAEIStatusMessages
File: GCX015.cbl
GIVEN:
Train has AEI-SEND flag set
WHEN:
Sending AEI status messages
THEN:
- The system should retrieve aei merlin recipients from database, format train
- Status information, and send via emcsend3
β Consolidated Acceptance Criteria
- Train has ACK status and AEI-SEND flag and ENROUTE-REPORTED flag → the system should send enroute message to AEI Merlin recipients
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_22SendTerminalStatusMessages(["Start Step"])
E_22SendTerminalStatusMessages(["End Step"])
N_22SendTerminalStatusMessages_Node0{"Train has ACK status and AEI-SEND
flag and ENROUTE-REPORTED flag"}:::decision N_22SendTerminalStatusMessages_Node0_action["The system should send enroute
message to AEI Merlin recipients"]:::main N_22SendTerminalStatusMessages_Node0 -- Yes --> N_22SendTerminalStatusMessages_Node0_action N_22SendTerminalStatusMessages_Node0_action --> E_22SendTerminalStatusMessages S_22SendTerminalStatusMessages --> N_22SendTerminalStatusMessages_Node0 N_22SendTerminalStatusMessages_Node0 -- No --> E_22SendTerminalStatusMessages
flag and ENROUTE-REPORTED flag"}:::decision N_22SendTerminalStatusMessages_Node0_action["The system should send enroute
message to AEI Merlin recipients"]:::main N_22SendTerminalStatusMessages_Node0 -- Yes --> N_22SendTerminalStatusMessages_Node0_action N_22SendTerminalStatusMessages_Node0_action --> E_22SendTerminalStatusMessages S_22SendTerminalStatusMessages --> N_22SendTerminalStatusMessages_Node0 N_22SendTerminalStatusMessages_Node0 -- No --> E_22SendTerminalStatusMessages
File: GCX015.cbl
GIVEN:
Train status processing is complete
WHEN:
- Train has ack status
- Aei-send flag
- Enroute-reported flag
THEN:
The system should send enroute message to AEI Merlin recipients
β Consolidated Acceptance Criteria
- Train has ACK status and ARRIVED-PENDING flag → the system should trigger automatic train arrival processing with current date and time
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_23ProcessAutomaticTrainArrival(["Start Step"])
E_23ProcessAutomaticTrainArrival(["End Step"])
N_23ProcessAutomaticTrainArrival_Node0{"Train has ACK status and
ARRIVED-PENDING flag"}:::decision N_23ProcessAutomaticTrainArrival_Node0_action["The system should trigger automatic
train arrival processing with
current date and time"]:::main N_23ProcessAutomaticTrainArrival_Node0 -- Yes --> N_23ProcessAutomaticTrainArrival_Node0_action N_23ProcessAutomaticTrainArrival_Node0_action --> E_23ProcessAutomaticTrainArrival S_23ProcessAutomaticTrainArrival --> N_23ProcessAutomaticTrainArrival_Node0 N_23ProcessAutomaticTrainArrival_Node0 -- No --> E_23ProcessAutomaticTrainArrival
ARRIVED-PENDING flag"}:::decision N_23ProcessAutomaticTrainArrival_Node0_action["The system should trigger automatic
train arrival processing with
current date and time"]:::main N_23ProcessAutomaticTrainArrival_Node0 -- Yes --> N_23ProcessAutomaticTrainArrival_Node0_action N_23ProcessAutomaticTrainArrival_Node0_action --> E_23ProcessAutomaticTrainArrival S_23ProcessAutomaticTrainArrival --> N_23ProcessAutomaticTrainArrival_Node0 N_23ProcessAutomaticTrainArrival_Node0 -- No --> E_23ProcessAutomaticTrainArrival
File: GCX015.cbl
GIVEN:
Train status has been updated
WHEN:
- Train has ack status
- Arrived-pending flag
THEN:
- The system should trigger automatic train arrival processing with current date
- Time
β Consolidated Acceptance Criteria
- Manifest type is 'P' → the system should update T1-309-ACK timestamp, or if manifest type is 'H', update T1-353-ACK timestamp, or if manifest type is 'S', update T1-358-ACK timestamp
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_25UpdateAdministrativeTables(["Start Step"])
E_25UpdateAdministrativeTables(["End Step"])
N_25UpdateAdministrativeTables_Node0{"Manifest type is P"}:::decision
N_25UpdateAdministrativeTables_Node0_action["The system should update T1-309-ACK
timestamp, or if manifest type is H
, update T1-353-ACK timestamp, or if
manifest type is S , update
T1-358-ACK timestamp"]:::main N_25UpdateAdministrativeTables_Node0 -- Yes --> N_25UpdateAdministrativeTables_Node0_action N_25UpdateAdministrativeTables_Node0_action --> E_25UpdateAdministrativeTables S_25UpdateAdministrativeTables --> N_25UpdateAdministrativeTables_Node0 N_25UpdateAdministrativeTables_Node0 -- No --> E_25UpdateAdministrativeTables
timestamp, or if manifest type is H
, update T1-353-ACK timestamp, or if
manifest type is S , update
T1-358-ACK timestamp"]:::main N_25UpdateAdministrativeTables_Node0 -- Yes --> N_25UpdateAdministrativeTables_Node0_action N_25UpdateAdministrativeTables_Node0_action --> E_25UpdateAdministrativeTables S_25UpdateAdministrativeTables --> N_25UpdateAdministrativeTables_Node0 N_25UpdateAdministrativeTables_Node0 -- No --> E_25UpdateAdministrativeTables
File: GCX015.cbl
GIVEN:
Special test message is being processed
WHEN:
Manifest type is 'P'
THEN:
The system should update T1-309-ACK timestamp, or if manifest type is 'H', update T1-353-ACK timestamp, or if manifest type is 'S', update T1-358-ACK timestamp
β Consolidated Acceptance Criteria
- Sending Merlin reports → the system should send reports to primary recipients and copy to administrative recipients with appropriate error handling
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_26SendMerlinReports(["Start Step"])
E_26SendMerlinReports(["End Step"])
N_26SendMerlinReports_Node0{"Sending Merlin reports"}:::decision
N_26SendMerlinReports_Node0_action["The system should send reports to
primary recipients and copy to
administrative recipients with
appropriate error handling"]:::main N_26SendMerlinReports_Node0 -- Yes --> N_26SendMerlinReports_Node0_action N_26SendMerlinReports_Node0_action --> E_26SendMerlinReports S_26SendMerlinReports --> N_26SendMerlinReports_Node0 N_26SendMerlinReports_Node0 -- No --> E_26SendMerlinReports
primary recipients and copy to
administrative recipients with
appropriate error handling"]:::main N_26SendMerlinReports_Node0 -- Yes --> N_26SendMerlinReports_Node0_action N_26SendMerlinReports_Node0_action --> E_26SendMerlinReports S_26SendMerlinReports --> N_26SendMerlinReports_Node0 N_26SendMerlinReports_Node0 -- No --> E_26SendMerlinReports
File: GCX015.cbl
GIVEN:
Processing activities require reporting
WHEN:
Sending Merlin reports
THEN:
- The system should send reports to primary recipients
- Copy to administrative recipients with appropriate error handling
β Consolidated Acceptance Criteria
- Closing MQ resources → the system should close queue handle and disconnect from MQ manager with appropriate error handling
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_27CloseMQConnections(["Start Step"])
E_27CloseMQConnections(["End Step"])
N_27CloseMQConnections_Node0{"Closing MQ resources"}:::decision
N_27CloseMQConnections_Node0_action["The system should close queue
handle and disconnect from MQ
manager with appropriate error
handling"]:::main N_27CloseMQConnections_Node0 -- Yes --> N_27CloseMQConnections_Node0_action N_27CloseMQConnections_Node0_action --> E_27CloseMQConnections S_27CloseMQConnections --> N_27CloseMQConnections_Node0 N_27CloseMQConnections_Node0 -- No --> E_27CloseMQConnections
handle and disconnect from MQ
manager with appropriate error
handling"]:::main N_27CloseMQConnections_Node0 -- Yes --> N_27CloseMQConnections_Node0_action N_27CloseMQConnections_Node0_action --> E_27CloseMQConnections S_27CloseMQConnections --> N_27CloseMQConnections_Node0 N_27CloseMQConnections_Node0 -- No --> E_27CloseMQConnections
File: GCX015.cbl
GIVEN:
Message processing is complete or terminated
WHEN:
Closing MQ resources
THEN:
- The system should close queue handle
- Disconnect from mq manager with appropriate error handling
β Consolidated Acceptance Criteria
- The completion code is MQCC-OK and message entries are greater than 1 and backout count equals 0 → the message should be marked as good for processing, otherwise skip or terminate based on specific conditions
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageAvailable(["Start Step"])
E_MessageAvailable(["End Step"])
N_MessageAvailable_Node0{"The completion code is MQCC-OK and
message entries are greater than 1
and backout count equals 0"}:::decision N_MessageAvailable_Node0_action["The message should be marked as
good for processing, otherwise skip
or terminate based on specific
conditions"]:::exclusion N_MessageAvailable_Node0 -- Yes -->|Alternative| N_MessageAvailable_Node0_action N_MessageAvailable_Node0_action --> E_MessageAvailable S_MessageAvailable --> N_MessageAvailable_Node0 N_MessageAvailable_Node0 -- No --> E_MessageAvailable
message entries are greater than 1
and backout count equals 0"}:::decision N_MessageAvailable_Node0_action["The message should be marked as
good for processing, otherwise skip
or terminate based on specific
conditions"]:::exclusion N_MessageAvailable_Node0 -- Yes -->|Alternative| N_MessageAvailable_Node0_action N_MessageAvailable_Node0_action --> E_MessageAvailable S_MessageAvailable --> N_MessageAvailable_Node0 N_MessageAvailable_Node0 -- No --> E_MessageAvailable
File: GCX015.cbl
GIVEN:
A message retrieval attempt has been made
WHEN:
- The completion code is mqcc-ok
- Message entries are greater than 1
- Backout count equals 0
THEN:
The message should be marked as good for processing, otherwise skip or terminate based on specific conditions
β Consolidated Acceptance Criteria
- The table reference number equals 'TRAINCPRSTESTTRAIN0000000000' or 'CARGOCPRS940000000000' → the message should be processed as a special test case with timestamp updates to T1 table segment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TestMessage(["Start Step"])
E_TestMessage(["End Step"])
N_TestMessage_Node0{"The table reference number equals
TRAINCPRSTESTTRAIN0000000000 or
CARGOCPRS940000000000"}:::decision N_TestMessage_Node0_action["The message should be processed as
a special test case with timestamp
updates to T1 table segment"]:::main N_TestMessage_Node0 -- Yes --> N_TestMessage_Node0_action N_TestMessage_Node0_action --> E_TestMessage S_TestMessage --> N_TestMessage_Node0 N_TestMessage_Node0 -- No --> E_TestMessage
TRAINCPRSTESTTRAIN0000000000 or
CARGOCPRS940000000000"}:::decision N_TestMessage_Node0_action["The message should be processed as
a special test case with timestamp
updates to T1 table segment"]:::main N_TestMessage_Node0 -- Yes --> N_TestMessage_Node0_action N_TestMessage_Node0_action --> E_TestMessage S_TestMessage --> N_TestMessage_Node0 N_TestMessage_Node0 -- No --> E_TestMessage
File: GCX015.cbl
GIVEN:
An M10 segment is being processed
WHEN:
The table reference number equals 'TRAINCPRSTESTTRAIN0000000000' or 'CARGOCPRS940000000000'
THEN:
The message should be processed as a special test case with timestamp updates to T1 table segment
β Consolidated Acceptance Criteria
- M10 manifest type code is 'P', 'X', 'Y', 'T', or 'S' → the system should set status update flag to true, and if manifest type code is 'H' for trains, set delete status flag to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainorCargo(["Start Step"])
E_TrainorCargo(["End Step"])
N_TrainorCargo_Node0{"M10 manifest type code is P , X , Y
, T , or S"}:::decision N_TrainorCargo_Node0_action["The system should set status update
flag to true, and if manifest type
code is H for trains, set delete
status flag to true"]:::main N_TrainorCargo_Node0 -- Yes --> N_TrainorCargo_Node0_action N_TrainorCargo_Node0_action --> E_TrainorCargo S_TrainorCargo --> N_TrainorCargo_Node0 N_TrainorCargo_Node0 -- No --> E_TrainorCargo
, T , or S"}:::decision N_TrainorCargo_Node0_action["The system should set status update
flag to true, and if manifest type
code is H for trains, set delete
status flag to true"]:::main N_TrainorCargo_Node0 -- Yes --> N_TrainorCargo_Node0_action N_TrainorCargo_Node0_action --> E_TrainorCargo S_TrainorCargo --> N_TrainorCargo_Node0 N_TrainorCargo_Node0 -- No --> E_TrainorCargo
File: GCX015.cbl
GIVEN:
A message has been classified as Train or Cargo
WHEN:
M10 manifest type code is 'P', 'X', 'Y', 'T', or 'S'
THEN:
The system should set status update flag to true, and if manifest type code is 'H' for trains, set delete status flag to true
β Consolidated Acceptance Criteria
- The initialization process begins → all working storage fields including train/cargo switches, message counters, key tables, and processing flags are cleared to spaces or initial values
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ClearWorkingStorageFields(["Start Step"])
E_ClearWorkingStorageFields(["End Step"])
N_ClearWorkingStorageFields_Node0{"The initialization process begins"}:::decision
N_ClearWorkingStorageFields_Node0_action["All working storage fields
including traincargo switches,
message counters, key tables, and
processing flags are cleared to
spaces or initial values"]:::main N_ClearWorkingStorageFields_Node0 -- Yes --> N_ClearWorkingStorageFields_Node0_action N_ClearWorkingStorageFields_Node0_action --> E_ClearWorkingStorageFields S_ClearWorkingStorageFields --> N_ClearWorkingStorageFields_Node0 N_ClearWorkingStorageFields_Node0 -- No --> E_ClearWorkingStorageFields
including traincargo switches,
message counters, key tables, and
processing flags are cleared to
spaces or initial values"]:::main N_ClearWorkingStorageFields_Node0 -- Yes --> N_ClearWorkingStorageFields_Node0_action N_ClearWorkingStorageFields_Node0_action --> E_ClearWorkingStorageFields S_ClearWorkingStorageFields --> N_ClearWorkingStorageFields_Node0 N_ClearWorkingStorageFields_Node0 -- No --> E_ClearWorkingStorageFields
File: GCX015.cbl
GIVEN:
The system is starting message processing initialization
WHEN:
The initialization process begins
THEN:
All working storage fields including train/cargo switches, message counters, key tables, and processing flags are cleared to spaces or initial values
β Consolidated Acceptance Criteria
- Counter and table initialization is performed → k1 counter is set to 1, K1 table is initialized, message line counter is set to 1, and all segment found flags are set to not found status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeMessageCountersandTables(["Start Step"])
E_InitializeMessageCountersandTables(["End Step"])
N_InitializeMessageCountersandTables_Node0{"Counter and table initialization is
performed"}:::decision N_InitializeMessageCountersandTables_Node0_action["K1 counter is set to 1, K1 table is
initialized, message line counter is
set to 1, and all segment found
flags are set to not found status"]:::main N_InitializeMessageCountersandTables_Node0 -- Yes --> N_InitializeMessageCountersandTables_Node0_action N_InitializeMessageCountersandTables_Node0_action --> E_InitializeMessageCountersandTables S_InitializeMessageCountersandTables --> N_InitializeMessageCountersandTables_Node0 N_InitializeMessageCountersandTables_Node0 -- No --> E_InitializeMessageCountersandTables
performed"}:::decision N_InitializeMessageCountersandTables_Node0_action["K1 counter is set to 1, K1 table is
initialized, message line counter is
set to 1, and all segment found
flags are set to not found status"]:::main N_InitializeMessageCountersandTables_Node0 -- Yes --> N_InitializeMessageCountersandTables_Node0_action N_InitializeMessageCountersandTables_Node0_action --> E_InitializeMessageCountersandTables S_InitializeMessageCountersandTables --> N_InitializeMessageCountersandTables_Node0 N_InitializeMessageCountersandTables_Node0 -- No --> E_InitializeMessageCountersandTables
File: GCX015.cbl
GIVEN:
Working storage fields have been cleared
WHEN:
- Counter
- Table initialization is performed
THEN:
K1 counter is set to 1, K1 table is initialized, message line counter is set to 1, and all segment found flags are set to not found status
β Consolidated Acceptance Criteria
- Administrative table parameters are configured → function code is set to 'GU', table ID is set to 'AD', sequence ID is set to 'ADMINID', and accept status is set to 'GE'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetAdministrativeTableParameters(["Start Step"])
E_SetAdministrativeTableParameters(["End Step"])
N_SetAdministrativeTableParameters_Node0{"Administrative table parameters are
configured"}:::decision N_SetAdministrativeTableParameters_Node0_action["Function code is set to GU , table
ID is set to AD , sequence ID is set
to ADMINID , and accept status is
set to GE"]:::main N_SetAdministrativeTableParameters_Node0 -- Yes --> N_SetAdministrativeTableParameters_Node0_action N_SetAdministrativeTableParameters_Node0_action --> E_SetAdministrativeTableParameters S_SetAdministrativeTableParameters --> N_SetAdministrativeTableParameters_Node0 N_SetAdministrativeTableParameters_Node0 -- No --> E_SetAdministrativeTableParameters
configured"}:::decision N_SetAdministrativeTableParameters_Node0_action["Function code is set to GU , table
ID is set to AD , sequence ID is set
to ADMINID , and accept status is
set to GE"]:::main N_SetAdministrativeTableParameters_Node0 -- Yes --> N_SetAdministrativeTableParameters_Node0_action N_SetAdministrativeTableParameters_Node0_action --> E_SetAdministrativeTableParameters S_SetAdministrativeTableParameters --> N_SetAdministrativeTableParameters_Node0 N_SetAdministrativeTableParameters_Node0 -- No --> E_SetAdministrativeTableParameters
File: GCX015.cbl
GIVEN:
Message counters and tables are initialized
WHEN:
Administrative table parameters are configured
THEN:
Function code is set to 'GU', table ID is set to 'AD', sequence ID is set to 'ADMINID', and accept status is set to 'GE'
β Consolidated Acceptance Criteria
- Table segment retrieval is performed → system calls table I/O function to get administrative segment data
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetAdministrativeConfiguration(["Start Step"])
E_GetAdministrativeConfiguration(["End Step"])
N_GetAdministrativeConfiguration_Node0{"Table segment retrieval is
performed"}:::decision N_GetAdministrativeConfiguration_Node0_action["System calls table IO function to
get administrative segment data"]:::main N_GetAdministrativeConfiguration_Node0 -- Yes --> N_GetAdministrativeConfiguration_Node0_action N_GetAdministrativeConfiguration_Node0_action --> E_GetAdministrativeConfiguration S_GetAdministrativeConfiguration --> N_GetAdministrativeConfiguration_Node0 N_GetAdministrativeConfiguration_Node0 -- No --> E_GetAdministrativeConfiguration
performed"}:::decision N_GetAdministrativeConfiguration_Node0_action["System calls table IO function to
get administrative segment data"]:::main N_GetAdministrativeConfiguration_Node0 -- Yes --> N_GetAdministrativeConfiguration_Node0_action N_GetAdministrativeConfiguration_Node0_action --> E_GetAdministrativeConfiguration S_GetAdministrativeConfiguration --> N_GetAdministrativeConfiguration_Node0 N_GetAdministrativeConfiguration_Node0 -- No --> E_GetAdministrativeConfiguration
File: GCX015.cbl
GIVEN:
Administrative table parameters are configured
WHEN:
Table segment retrieval is performed
THEN:
System calls table I/O function to get administrative segment data
β Consolidated Acceptance Criteria
- Return flag indicates successful retrieval (flag equals '0') → administrative segment data is loaded from table segment, otherwise default Merlin ID 'OM01247' is set
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AdminConfigFound(["Start Step"])
E_AdminConfigFound(["End Step"])
N_AdminConfigFound_Node0{"Return flag indicates successful
retrieval flag equals 0"}:::decision N_AdminConfigFound_Node0_action["Administrative segment data is
loaded from table segment, otherwise
default Merlin ID OM01247 is set"]:::main N_AdminConfigFound_Node0 -- Yes --> N_AdminConfigFound_Node0_action N_AdminConfigFound_Node0_action --> E_AdminConfigFound S_AdminConfigFound --> N_AdminConfigFound_Node0 N_AdminConfigFound_Node0 -- No --> E_AdminConfigFound
retrieval flag equals 0"}:::decision N_AdminConfigFound_Node0_action["Administrative segment data is
loaded from table segment, otherwise
default Merlin ID OM01247 is set"]:::main N_AdminConfigFound_Node0 -- Yes --> N_AdminConfigFound_Node0_action N_AdminConfigFound_Node0_action --> E_AdminConfigFound S_AdminConfigFound --> N_AdminConfigFound_Node0 N_AdminConfigFound_Node0 -- No --> E_AdminConfigFound
File: GCX015.cbl
GIVEN:
Administrative configuration retrieval has been attempted
WHEN:
Return flag indicates successful retrieval (flag equals '0')
THEN:
Administrative segment data is loaded from table segment, otherwise default Merlin ID 'OM01247' is set
β Consolidated Acceptance Criteria
- Default configuration is applied → merlin ID is set to 'OM01247' as the default value
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LoadDefaultMerlinID(["Start Step"])
E_LoadDefaultMerlinID(["End Step"])
N_LoadDefaultMerlinID_Node0{"Default configuration is applied"}:::decision
N_LoadDefaultMerlinID_Node0_action["Merlin ID is set to OM01247 as the
default value"]:::main N_LoadDefaultMerlinID_Node0 -- Yes --> N_LoadDefaultMerlinID_Node0_action N_LoadDefaultMerlinID_Node0_action --> E_LoadDefaultMerlinID S_LoadDefaultMerlinID --> N_LoadDefaultMerlinID_Node0 N_LoadDefaultMerlinID_Node0 -- No --> E_LoadDefaultMerlinID
default value"]:::main N_LoadDefaultMerlinID_Node0 -- Yes --> N_LoadDefaultMerlinID_Node0_action N_LoadDefaultMerlinID_Node0_action --> E_LoadDefaultMerlinID S_LoadDefaultMerlinID --> N_LoadDefaultMerlinID_Node0 N_LoadDefaultMerlinID_Node0 -- No --> E_LoadDefaultMerlinID
File: GCX015.cbl
GIVEN:
Administrative configuration retrieval failed
WHEN:
Default configuration is applied
THEN:
Merlin ID is set to 'OM01247' as the default value
β Consolidated Acceptance Criteria
- Message queue parameters are initialized → header length, unused entry length, and single entry length are calculated and stored for message processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeMessageQueueParameters(["Start Step"])
E_InitializeMessageQueueParameters(["End Step"])
N_InitializeMessageQueueParameters_Node0{"Message queue parameters are
initialized"}:::decision N_InitializeMessageQueueParameters_Node0_action["Header length, unused entry length,
and single entry length are
calculated and stored for message
processing"]:::main N_InitializeMessageQueueParameters_Node0 -- Yes --> N_InitializeMessageQueueParameters_Node0_action N_InitializeMessageQueueParameters_Node0_action --> E_InitializeMessageQueueParameters S_InitializeMessageQueueParameters --> N_InitializeMessageQueueParameters_Node0 N_InitializeMessageQueueParameters_Node0 -- No --> E_InitializeMessageQueueParameters
initialized"}:::decision N_InitializeMessageQueueParameters_Node0_action["Header length, unused entry length,
and single entry length are
calculated and stored for message
processing"]:::main N_InitializeMessageQueueParameters_Node0 -- Yes --> N_InitializeMessageQueueParameters_Node0_action N_InitializeMessageQueueParameters_Node0_action --> E_InitializeMessageQueueParameters S_InitializeMessageQueueParameters --> N_InitializeMessageQueueParameters_Node0 N_InitializeMessageQueueParameters_Node0 -- No --> E_InitializeMessageQueueParameters
File: GCX015.cbl
GIVEN:
Administrative configuration is complete
WHEN:
Message queue parameters are initialized
THEN:
- Header length, unused entry length, and single entry length are calculated
- Stored for message processing
β Consolidated Acceptance Criteria
- MQ connection is attempted → system calls MQCONNC to establish connection with MQ manager
- Connection to MQ manager is attempted → if connection fails, system generates error message and terminates processing with MQ connection failure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ConnecttoMQManager(["Start Step"])
E_ConnecttoMQManager(["End Step"])
N_ConnecttoMQManager_Node0{"MQ connection is attempted"}:::decision
N_ConnecttoMQManager_Node0_action["System calls MQCONNC to establish
connection with MQ manager"]:::main N_ConnecttoMQManager_Node0 -- Yes --> N_ConnecttoMQManager_Node0_action N_ConnecttoMQManager_Node0_action --> E_ConnecttoMQManager S_ConnecttoMQManager --> N_ConnecttoMQManager_Node0 N_ConnecttoMQManager_Node1{"Connection to MQ manager is
attempted"}:::decision N_ConnecttoMQManager_Node1_action["If connection fails, system
generates error message and
terminates processing with MQ
connection failure"]:::main N_ConnecttoMQManager_Node1 -- Yes --> N_ConnecttoMQManager_Node1_action N_ConnecttoMQManager_Node1_action --> E_ConnecttoMQManager N_ConnecttoMQManager_Node0 -- No --> N_ConnecttoMQManager_Node1 N_ConnecttoMQManager_Node1 -- No --> E_ConnecttoMQManager
connection with MQ manager"]:::main N_ConnecttoMQManager_Node0 -- Yes --> N_ConnecttoMQManager_Node0_action N_ConnecttoMQManager_Node0_action --> E_ConnecttoMQManager S_ConnecttoMQManager --> N_ConnecttoMQManager_Node0 N_ConnecttoMQManager_Node1{"Connection to MQ manager is
attempted"}:::decision N_ConnecttoMQManager_Node1_action["If connection fails, system
generates error message and
terminates processing with MQ
connection failure"]:::main N_ConnecttoMQManager_Node1 -- Yes --> N_ConnecttoMQManager_Node1_action N_ConnecttoMQManager_Node1_action --> E_ConnecttoMQManager N_ConnecttoMQManager_Node0 -- No --> N_ConnecttoMQManager_Node1 N_ConnecttoMQManager_Node1 -- No --> E_ConnecttoMQManager
File: GCX015.cbl
GIVEN:
Message queue parameters are initialized
WHEN:
MQ connection is attempted
THEN:
System calls MQCONNC to establish connection with MQ manager
File: GCX015.cbl
GIVEN:
System needs to process US Customs messages from message queue
WHEN:
Connection to MQ manager is attempted
THEN:
- If connection fails, system generates error message
- Terminates processing with mq connection failure
β Consolidated Acceptance Criteria
- Connection completion code is evaluated → if completion code equals MQCC-OK then connection is successful, otherwise connection failed and error handling is triggered
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MQConnectionOK(["Start Step"])
E_MQConnectionOK(["End Step"])
N_MQConnectionOK_Node0{"Connection completion code is
evaluated"}:::decision N_MQConnectionOK_Node0_action["If completion code equals MQCC-OK
then connection is successful,
otherwise connection failed and
error handling is triggered"]:::main N_MQConnectionOK_Node0 -- Yes --> N_MQConnectionOK_Node0_action N_MQConnectionOK_Node0_action --> E_MQConnectionOK S_MQConnectionOK --> N_MQConnectionOK_Node0 N_MQConnectionOK_Node0 -- No --> E_MQConnectionOK
evaluated"}:::decision N_MQConnectionOK_Node0_action["If completion code equals MQCC-OK
then connection is successful,
otherwise connection failed and
error handling is triggered"]:::main N_MQConnectionOK_Node0 -- Yes --> N_MQConnectionOK_Node0_action N_MQConnectionOK_Node0_action --> E_MQConnectionOK S_MQConnectionOK --> N_MQConnectionOK_Node0 N_MQConnectionOK_Node0 -- No --> E_MQConnectionOK
File: GCX015.cbl
GIVEN:
MQ connection attempt has been made
WHEN:
Connection completion code is evaluated
THEN:
- If completion code equals mqcc-ok then connection is successful, otherwise connection failed
- Error handling is triggered
β Consolidated Acceptance Criteria
- Queue open operation is performed → system calls MQOPEN with object type set to queue, object name from configuration, and input options
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_OpenMessageQueueforInput(["Start Step"])
E_OpenMessageQueueforInput(["End Step"])
N_OpenMessageQueueforInput_Node0{"Queue open operation is performed"}:::decision
N_OpenMessageQueueforInput_Node0_action["System calls MQOPEN with object
type set to queue, object name from
configuration, and input options"]:::main N_OpenMessageQueueforInput_Node0 -- Yes --> N_OpenMessageQueueforInput_Node0_action N_OpenMessageQueueforInput_Node0_action --> E_OpenMessageQueueforInput S_OpenMessageQueueforInput --> N_OpenMessageQueueforInput_Node0 N_OpenMessageQueueforInput_Node0 -- No --> E_OpenMessageQueueforInput
type set to queue, object name from
configuration, and input options"]:::main N_OpenMessageQueueforInput_Node0 -- Yes --> N_OpenMessageQueueforInput_Node0_action N_OpenMessageQueueforInput_Node0_action --> E_OpenMessageQueueforInput S_OpenMessageQueueforInput --> N_OpenMessageQueueforInput_Node0 N_OpenMessageQueueforInput_Node0 -- No --> E_OpenMessageQueueforInput
File: GCX015.cbl
GIVEN:
MQ manager connection is successful
WHEN:
Queue open operation is performed
THEN:
System calls MQOPEN with object type set to queue, object name from configuration, and input options
β Consolidated Acceptance Criteria
- Queue open completion code is evaluated → if completion code equals MQCC-OK then queue is ready for processing, if reason code is 2085 then program exits, otherwise error handling is triggered
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_QueueOpenOK(["Start Step"])
E_QueueOpenOK(["End Step"])
N_QueueOpenOK_Node0{"Queue open completion code is
evaluated"}:::decision N_QueueOpenOK_Node0_action["If completion code equals MQCC-OK
then queue is ready for processing,
if reason code is 2085 then program
exits, otherwise error handling is
triggered"]:::main N_QueueOpenOK_Node0 -- Yes --> N_QueueOpenOK_Node0_action N_QueueOpenOK_Node0_action --> E_QueueOpenOK S_QueueOpenOK --> N_QueueOpenOK_Node0 N_QueueOpenOK_Node0 -- No --> E_QueueOpenOK
evaluated"}:::decision N_QueueOpenOK_Node0_action["If completion code equals MQCC-OK
then queue is ready for processing,
if reason code is 2085 then program
exits, otherwise error handling is
triggered"]:::main N_QueueOpenOK_Node0 -- Yes --> N_QueueOpenOK_Node0_action N_QueueOpenOK_Node0_action --> E_QueueOpenOK S_QueueOpenOK --> N_QueueOpenOK_Node0 N_QueueOpenOK_Node0 -- No --> E_QueueOpenOK
File: GCX015.cbl
GIVEN:
Message queue open attempt has been made
WHEN:
Queue open completion code is evaluated
THEN:
If completion code equals MQCC-OK then queue is ready for processing, if reason code is 2085 then program exits, otherwise error handling is triggered
β Consolidated Acceptance Criteria
- All initialization steps are validated → system is ready to begin processing messages from the queue
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SystemReadyforProcessing(["Start Step"])
E_SystemReadyforProcessing(["End Step"])
N_SystemReadyforProcessing_Node0{"All initialization steps are
validated"}:::decision N_SystemReadyforProcessing_Node0_action["System is ready to begin processing
messages from the queue"]:::main N_SystemReadyforProcessing_Node0 -- Yes --> N_SystemReadyforProcessing_Node0_action N_SystemReadyforProcessing_Node0_action --> E_SystemReadyforProcessing S_SystemReadyforProcessing --> N_SystemReadyforProcessing_Node0 N_SystemReadyforProcessing_Node0 -- No --> E_SystemReadyforProcessing
validated"}:::decision N_SystemReadyforProcessing_Node0_action["System is ready to begin processing
messages from the queue"]:::main N_SystemReadyforProcessing_Node0 -- Yes --> N_SystemReadyforProcessing_Node0_action N_SystemReadyforProcessing_Node0_action --> E_SystemReadyforProcessing S_SystemReadyforProcessing --> N_SystemReadyforProcessing_Node0 N_SystemReadyforProcessing_Node0 -- No --> E_SystemReadyforProcessing
File: GCX015.cbl
GIVEN:
Message queue is successfully opened
WHEN:
All initialization steps are validated
THEN:
System is ready to begin processing messages from the queue
β Consolidated Acceptance Criteria
- System attempts to open the message queue → if queue opening fails, system generates error message and terminates processing with MQ open failure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_OpenMessageQueue(["Start Step"])
E_OpenMessageQueue(["End Step"])
N_OpenMessageQueue_Node0{"System attempts to open the message
queue"}:::decision N_OpenMessageQueue_Node0_action["If queue opening fails, system
generates error message and
terminates processing with MQ open
failure"]:::main N_OpenMessageQueue_Node0 -- Yes --> N_OpenMessageQueue_Node0_action N_OpenMessageQueue_Node0_action --> E_OpenMessageQueue S_OpenMessageQueue --> N_OpenMessageQueue_Node0 N_OpenMessageQueue_Node0 -- No --> E_OpenMessageQueue
queue"}:::decision N_OpenMessageQueue_Node0_action["If queue opening fails, system
generates error message and
terminates processing with MQ open
failure"]:::main N_OpenMessageQueue_Node0 -- Yes --> N_OpenMessageQueue_Node0_action N_OpenMessageQueue_Node0_action --> E_OpenMessageQueue S_OpenMessageQueue --> N_OpenMessageQueue_Node0 N_OpenMessageQueue_Node0 -- No --> E_OpenMessageQueue
File: GCX015.cbl
GIVEN:
MQ manager connection is established
WHEN:
System attempts to open the message queue
THEN:
- If queue opening fails, system generates error message
- Terminates processing with mq open failure
β Consolidated Acceptance Criteria
- Queue open operation returns reason code 2085 → system exits processing normally without error
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_QueueAvailable(["Start Step"])
E_QueueAvailable(["End Step"])
N_QueueAvailable_Node0{"Queue open operation returns reason
code 2085"}:::decision N_QueueAvailable_Node0_action["System exits processing normally
without error"]:::main N_QueueAvailable_Node0 -- Yes --> N_QueueAvailable_Node0_action N_QueueAvailable_Node0_action --> E_QueueAvailable S_QueueAvailable --> N_QueueAvailable_Node0 N_QueueAvailable_Node0 -- No --> E_QueueAvailable
code 2085"}:::decision N_QueueAvailable_Node0_action["System exits processing normally
without error"]:::main N_QueueAvailable_Node0 -- Yes --> N_QueueAvailable_Node0_action N_QueueAvailable_Node0_action --> E_QueueAvailable S_QueueAvailable --> N_QueueAvailable_Node0 N_QueueAvailable_Node0 -- No --> E_QueueAvailable
File: GCX015.cbl
GIVEN:
System attempts to open message queue
WHEN:
Queue open operation returns reason code 2085
THEN:
System exits processing normally without error
β Consolidated Acceptance Criteria
- System attempts to get message from queue → message is retrieved and completion code is set based on operation result
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetMessagefromQueue(["Start Step"])
E_GetMessagefromQueue(["End Step"])
N_GetMessagefromQueue_Node0{"System attempts to get message from
queue"}:::decision N_GetMessagefromQueue_Node0_action["Message is retrieved and completion
code is set based on operation
result"]:::main N_GetMessagefromQueue_Node0 -- Yes --> N_GetMessagefromQueue_Node0_action N_GetMessagefromQueue_Node0_action --> E_GetMessagefromQueue S_GetMessagefromQueue --> N_GetMessagefromQueue_Node0 N_GetMessagefromQueue_Node0 -- No --> E_GetMessagefromQueue
queue"}:::decision N_GetMessagefromQueue_Node0_action["Message is retrieved and completion
code is set based on operation
result"]:::main N_GetMessagefromQueue_Node0 -- Yes --> N_GetMessagefromQueue_Node0_action N_GetMessagefromQueue_Node0_action --> E_GetMessagefromQueue S_GetMessagefromQueue --> N_GetMessagefromQueue_Node0 N_GetMessagefromQueue_Node0 -- No --> E_GetMessagefromQueue
File: GCX015.cbl
GIVEN:
Message queue is open and available
WHEN:
System attempts to get message from queue
THEN:
- Message is retrieved
- Completion code is set based on operation result
β Consolidated Acceptance Criteria
- Completion code equals MQCC-OK → message is considered successfully retrieved for further processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageRetrievedSuccessfully(["Start Step"])
E_MessageRetrievedSuccessfully(["End Step"])
N_MessageRetrievedSuccessfully_Node0{"Completion code equals MQCC-OK"}:::decision
N_MessageRetrievedSuccessfully_Node0_action["Message is considered successfully
retrieved for further processing"]:::main N_MessageRetrievedSuccessfully_Node0 -- Yes --> N_MessageRetrievedSuccessfully_Node0_action N_MessageRetrievedSuccessfully_Node0_action --> E_MessageRetrievedSuccessfully S_MessageRetrievedSuccessfully --> N_MessageRetrievedSuccessfully_Node0 N_MessageRetrievedSuccessfully_Node0 -- No --> E_MessageRetrievedSuccessfully
retrieved for further processing"]:::main N_MessageRetrievedSuccessfully_Node0 -- Yes --> N_MessageRetrievedSuccessfully_Node0_action N_MessageRetrievedSuccessfully_Node0_action --> E_MessageRetrievedSuccessfully S_MessageRetrievedSuccessfully --> N_MessageRetrievedSuccessfully_Node0 N_MessageRetrievedSuccessfully_Node0 -- No --> E_MessageRetrievedSuccessfully
File: GCX015.cbl
GIVEN:
Message retrieval operation is completed
WHEN:
Completion code equals MQCC-OK
THEN:
Message is considered successfully retrieved for further processing
β Consolidated Acceptance Criteria
- Completion code is MQCC-OK and calculated message entries count is less than 1 → system terminates processing with user error 355 indicating message is too short
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageTooShort(["Start Step"])
E_MessageTooShort(["End Step"])
N_MessageTooShort_Node0{"Completion code is MQCC-OK and
calculated message entries count is
less than 1"}:::decision N_MessageTooShort_Node0_action["System terminates processing with
user error 355 indicating message is
too short"]:::main N_MessageTooShort_Node0 -- Yes --> N_MessageTooShort_Node0_action N_MessageTooShort_Node0_action --> E_MessageTooShort S_MessageTooShort --> N_MessageTooShort_Node0 N_MessageTooShort_Node0 -- No --> E_MessageTooShort
calculated message entries count is
less than 1"}:::decision N_MessageTooShort_Node0_action["System terminates processing with
user error 355 indicating message is
too short"]:::main N_MessageTooShort_Node0 -- Yes --> N_MessageTooShort_Node0_action N_MessageTooShort_Node0_action --> E_MessageTooShort S_MessageTooShort --> N_MessageTooShort_Node0 N_MessageTooShort_Node0 -- No --> E_MessageTooShort
File: GCX015.cbl
GIVEN:
Message is successfully retrieved from queue
WHEN:
- Completion code is mqcc-ok
- Calculated message entries count is less than 1
THEN:
System terminates processing with user error 355 indicating message is too short
β Consolidated Acceptance Criteria
- Message backout count is evaluated → message processing eligibility is determined based on backout count value
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CheckMessageBackoutCount(["Start Step"])
E_CheckMessageBackoutCount(["End Step"])
N_CheckMessageBackoutCount_Node0{"Message backout count is evaluated"}:::decision
N_CheckMessageBackoutCount_Node0_action["Message processing eligibility is
determined based on backout count
value"]:::main N_CheckMessageBackoutCount_Node0 -- Yes --> N_CheckMessageBackoutCount_Node0_action N_CheckMessageBackoutCount_Node0_action --> E_CheckMessageBackoutCount S_CheckMessageBackoutCount --> N_CheckMessageBackoutCount_Node0 N_CheckMessageBackoutCount_Node0 -- No --> E_CheckMessageBackoutCount
determined based on backout count
value"]:::main N_CheckMessageBackoutCount_Node0 -- Yes --> N_CheckMessageBackoutCount_Node0_action N_CheckMessageBackoutCount_Node0_action --> E_CheckMessageBackoutCount S_CheckMessageBackoutCount --> N_CheckMessageBackoutCount_Node0 N_CheckMessageBackoutCount_Node0 -- No --> E_CheckMessageBackoutCount
File: GCX015.cbl
GIVEN:
Message is successfully retrieved and has valid length
WHEN:
Message backout count is evaluated
THEN:
Message processing eligibility is determined based on backout count value
β Consolidated Acceptance Criteria
- Completion code is MQCC-OK and message backout count equals 0 → message is marked as good message for processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MarkasGoodMessage(["Start Step"])
E_MarkasGoodMessage(["End Step"])
N_MarkasGoodMessage_Node0{"Completion code is MQCC-OK and
message backout count equals 0"}:::decision N_MarkasGoodMessage_Node0_action["Message is marked as good message
for processing"]:::main N_MarkasGoodMessage_Node0 -- Yes --> N_MarkasGoodMessage_Node0_action N_MarkasGoodMessage_Node0_action --> E_MarkasGoodMessage S_MarkasGoodMessage --> N_MarkasGoodMessage_Node0 N_MarkasGoodMessage_Node0 -- No --> E_MarkasGoodMessage
message backout count equals 0"}:::decision N_MarkasGoodMessage_Node0_action["Message is marked as good message
for processing"]:::main N_MarkasGoodMessage_Node0 -- Yes --> N_MarkasGoodMessage_Node0_action N_MarkasGoodMessage_Node0_action --> E_MarkasGoodMessage S_MarkasGoodMessage --> N_MarkasGoodMessage_Node0 N_MarkasGoodMessage_Node0 -- No --> E_MarkasGoodMessage
File: GCX015.cbl
GIVEN:
Message is successfully retrieved with valid length
WHEN:
- Completion code is mqcc-ok
- Message backout count equals 0
THEN:
Message is marked as good message for processing
β Consolidated Acceptance Criteria
- Completion code is MQCC-OK and message backout count is not equal to 0 → message is marked as skip message and not processed further
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MarkasSkipMessage(["Start Step"])
E_MarkasSkipMessage(["End Step"])
N_MarkasSkipMessage_Node0{"Completion code is MQCC-OK and
message backout count is not equal
to 0"}:::decision N_MarkasSkipMessage_Node0_action["Message is marked as skip message
and not processed further"]:::main N_MarkasSkipMessage_Node0 -- Yes --> N_MarkasSkipMessage_Node0_action N_MarkasSkipMessage_Node0_action --> E_MarkasSkipMessage S_MarkasSkipMessage --> N_MarkasSkipMessage_Node0 N_MarkasSkipMessage_Node0 -- No --> E_MarkasSkipMessage
message backout count is not equal
to 0"}:::decision N_MarkasSkipMessage_Node0_action["Message is marked as skip message
and not processed further"]:::main N_MarkasSkipMessage_Node0 -- Yes --> N_MarkasSkipMessage_Node0_action N_MarkasSkipMessage_Node0_action --> E_MarkasSkipMessage S_MarkasSkipMessage --> N_MarkasSkipMessage_Node0 N_MarkasSkipMessage_Node0 -- No --> E_MarkasSkipMessage
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
Message is successfully retrieved with valid length
WHEN:
- Completion code is mqcc-ok
- Message backout count is not equal to 0
THEN:
- Message is marked as skip message
- Not processed further
β Consolidated Acceptance Criteria
- Completion code is MQCC-FAILED and reason code is MQRC-NO-MSG-AVAILABLE → system generates MQ error message and terminates processing with error code 355
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_NoMessagesAvailable(["Start Step"])
E_NoMessagesAvailable(["End Step"])
N_NoMessagesAvailable_Node0{"Completion code is MQCC-FAILED and
reason code is MQRC-NO-MSG-AVAILABLE"}:::decision N_NoMessagesAvailable_Node0_action["System generates MQ error message
and terminates processing with error
code 355"]:::exclusion N_NoMessagesAvailable_Node0 -- Yes -->|Alternative| N_NoMessagesAvailable_Node0_action N_NoMessagesAvailable_Node0_action --> E_NoMessagesAvailable S_NoMessagesAvailable --> N_NoMessagesAvailable_Node0 N_NoMessagesAvailable_Node0 -- No --> E_NoMessagesAvailable
reason code is MQRC-NO-MSG-AVAILABLE"}:::decision N_NoMessagesAvailable_Node0_action["System generates MQ error message
and terminates processing with error
code 355"]:::exclusion N_NoMessagesAvailable_Node0 -- Yes -->|Alternative| N_NoMessagesAvailable_Node0_action N_NoMessagesAvailable_Node0_action --> E_NoMessagesAvailable S_NoMessagesAvailable --> N_NoMessagesAvailable_Node0 N_NoMessagesAvailable_Node0 -- No --> E_NoMessagesAvailable
File: GCX015.cbl
GIVEN:
Message retrieval operation fails
WHEN:
- Completion code is mqcc-failed
- Reason code is mqrc-no-msg-available
THEN:
- System generates mq error message
- Terminates processing with error code 355
β Consolidated Acceptance Criteria
- Completion code and reason code indicate other MQ failure conditions → system sets end of message queue flag and generates error message before terminating with error code 355
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetEndofQueueFlag(["Start Step"])
E_SetEndofQueueFlag(["End Step"])
N_SetEndofQueueFlag_Node0{"Completion code and reason code
indicate other MQ failure conditions"}:::decision N_SetEndofQueueFlag_Node0_action["System sets end of message queue
flag and generates error message
before terminating with error code
355"]:::main N_SetEndofQueueFlag_Node0 -- Yes --> N_SetEndofQueueFlag_Node0_action N_SetEndofQueueFlag_Node0_action --> E_SetEndofQueueFlag S_SetEndofQueueFlag --> N_SetEndofQueueFlag_Node0 N_SetEndofQueueFlag_Node0 -- No --> E_SetEndofQueueFlag
indicate other MQ failure conditions"}:::decision N_SetEndofQueueFlag_Node0_action["System sets end of message queue
flag and generates error message
before terminating with error code
355"]:::main N_SetEndofQueueFlag_Node0 -- Yes --> N_SetEndofQueueFlag_Node0_action N_SetEndofQueueFlag_Node0_action --> E_SetEndofQueueFlag S_SetEndofQueueFlag --> N_SetEndofQueueFlag_Node0 N_SetEndofQueueFlag_Node0 -- No --> E_SetEndofQueueFlag
File: GCX015.cbl
GIVEN:
Message retrieval operation fails
WHEN:
- Completion code
- Reason code indicate other mq failure conditions
THEN:
- System sets end of message queue flag
- Generates error message before terminating with error code 355
β Consolidated Acceptance Criteria
- Message data length is available → maximum message entries count is calculated by subtracting header and unused data length from total data length and dividing by single entry length
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CalculateMessageEntriesCount(["Start Step"])
E_CalculateMessageEntriesCount(["End Step"])
N_CalculateMessageEntriesCount_Node0{"Message data length is available"}:::decision
N_CalculateMessageEntriesCount_Node0_action["Maximum message entries count is
calculated by subtracting header and
unused data length from total data
length and dividing by single entry
length"]:::main N_CalculateMessageEntriesCount_Node0 -- Yes --> N_CalculateMessageEntriesCount_Node0_action N_CalculateMessageEntriesCount_Node0_action --> E_CalculateMessageEntriesCount S_CalculateMessageEntriesCount --> N_CalculateMessageEntriesCount_Node0 N_CalculateMessageEntriesCount_Node0 -- No --> E_CalculateMessageEntriesCount
calculated by subtracting header and
unused data length from total data
length and dividing by single entry
length"]:::main N_CalculateMessageEntriesCount_Node0 -- Yes --> N_CalculateMessageEntriesCount_Node0_action N_CalculateMessageEntriesCount_Node0_action --> E_CalculateMessageEntriesCount S_CalculateMessageEntriesCount --> N_CalculateMessageEntriesCount_Node0 N_CalculateMessageEntriesCount_Node0 -- No --> E_CalculateMessageEntriesCount
File: GCX015.cbl
GIVEN:
Message is successfully retrieved from queue
WHEN:
Message data length is available
THEN:
- Maximum message entries count is calculated by subtracting header
- Unused data length from total data length
- Dividing by single entry length
β Consolidated Acceptance Criteria
- Error condition is detected → system calls error message routine to generate descriptive error text and formats complete error message with reason code
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GenerateMQErrorMessage(["Start Step"])
E_GenerateMQErrorMessage(["End Step"])
N_GenerateMQErrorMessage_Node0{"Error condition is detected"}:::decision
N_GenerateMQErrorMessage_Node0_action["System calls error message routine
to generate descriptive error text
and formats complete error message
with reason code"]:::exclusion N_GenerateMQErrorMessage_Node0 -- Yes -->|Alternative| N_GenerateMQErrorMessage_Node0_action N_GenerateMQErrorMessage_Node0_action --> E_GenerateMQErrorMessage S_GenerateMQErrorMessage --> N_GenerateMQErrorMessage_Node0 N_GenerateMQErrorMessage_Node0 -- No --> E_GenerateMQErrorMessage
to generate descriptive error text
and formats complete error message
with reason code"]:::exclusion N_GenerateMQErrorMessage_Node0 -- Yes -->|Alternative| N_GenerateMQErrorMessage_Node0_action N_GenerateMQErrorMessage_Node0_action --> E_GenerateMQErrorMessage S_GenerateMQErrorMessage --> N_GenerateMQErrorMessage_Node0 N_GenerateMQErrorMessage_Node0 -- No --> E_GenerateMQErrorMessage
File: GCX015.cbl
GIVEN:
MQ operation fails with specific reason code
WHEN:
Error condition is detected
THEN:
- System calls error message routine to generate descriptive error text
- Formats complete error message with reason code
β Consolidated Acceptance Criteria
- Error message is generated and transaction code 355 is set → system calls error handling routine to terminate processing abnormally
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AbendwithErrorCode355(["Start Step"])
E_AbendwithErrorCode355(["End Step"])
N_AbendwithErrorCode355_Node0{"Error message is generated and
transaction code 355 is set"}:::decision N_AbendwithErrorCode355_Node0_action["System calls error handling routine
to terminate processing abnormally"]:::exclusion N_AbendwithErrorCode355_Node0 -- Yes -->|Alternative| N_AbendwithErrorCode355_Node0_action N_AbendwithErrorCode355_Node0_action --> E_AbendwithErrorCode355 S_AbendwithErrorCode355 --> N_AbendwithErrorCode355_Node0 N_AbendwithErrorCode355_Node0 -- No --> E_AbendwithErrorCode355
transaction code 355 is set"}:::decision N_AbendwithErrorCode355_Node0_action["System calls error handling routine
to terminate processing abnormally"]:::exclusion N_AbendwithErrorCode355_Node0 -- Yes -->|Alternative| N_AbendwithErrorCode355_Node0_action N_AbendwithErrorCode355_Node0_action --> E_AbendwithErrorCode355 S_AbendwithErrorCode355 --> N_AbendwithErrorCode355_Node0 N_AbendwithErrorCode355_Node0 -- No --> E_AbendwithErrorCode355
File: GCX015.cbl
GIVEN:
Critical MQ error condition is detected
WHEN:
- Error message is generated
- Transaction code 355 is set
THEN:
System calls error handling routine to terminate processing abnormally
β Consolidated Acceptance Criteria
- An M10 segment is found in the message → the system extracts the M10 segment data and marks M10 segment as found
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractM10SegmentData(["Start Step"])
E_ExtractM10SegmentData(["End Step"])
N_ExtractM10SegmentData_Node0{"An M10 segment is found in the
message"}:::decision N_ExtractM10SegmentData_Node0_action["The system extracts the M10 segment
data and marks M10 segment as found"]:::main N_ExtractM10SegmentData_Node0 -- Yes --> N_ExtractM10SegmentData_Node0_action N_ExtractM10SegmentData_Node0_action --> E_ExtractM10SegmentData S_ExtractM10SegmentData --> N_ExtractM10SegmentData_Node0 N_ExtractM10SegmentData_Node0 -- No --> E_ExtractM10SegmentData
message"}:::decision N_ExtractM10SegmentData_Node0_action["The system extracts the M10 segment
data and marks M10 segment as found"]:::main N_ExtractM10SegmentData_Node0 -- Yes --> N_ExtractM10SegmentData_Node0_action N_ExtractM10SegmentData_Node0_action --> E_ExtractM10SegmentData S_ExtractM10SegmentData --> N_ExtractM10SegmentData_Node0 N_ExtractM10SegmentData_Node0 -- No --> E_ExtractM10SegmentData
File: GCX015.cbl
GIVEN:
A message is being processed and contains message segments
WHEN:
An M10 segment is found in the message
THEN:
- The system extracts the m10 segment data
- Marks m10 segment as found
β Consolidated Acceptance Criteria
- The reference number (M10-12-REF-NUM) starts with 'TRAIN' → the system sets the message type as TRAIN for processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ReferenceNumberPrefixTRAIN(["Start Step"])
E_ReferenceNumberPrefixTRAIN(["End Step"])
N_ReferenceNumberPrefixTRAIN_Node0{"The reference number M10-12-REF-NUM
starts with TRAIN"}:::decision N_ReferenceNumberPrefixTRAIN_Node0_action["The system sets the message type as
TRAIN for processing"]:::main N_ReferenceNumberPrefixTRAIN_Node0 -- Yes --> N_ReferenceNumberPrefixTRAIN_Node0_action N_ReferenceNumberPrefixTRAIN_Node0_action --> E_ReferenceNumberPrefixTRAIN S_ReferenceNumberPrefixTRAIN --> N_ReferenceNumberPrefixTRAIN_Node0 N_ReferenceNumberPrefixTRAIN_Node0 -- No --> E_ReferenceNumberPrefixTRAIN
starts with TRAIN"}:::decision N_ReferenceNumberPrefixTRAIN_Node0_action["The system sets the message type as
TRAIN for processing"]:::main N_ReferenceNumberPrefixTRAIN_Node0 -- Yes --> N_ReferenceNumberPrefixTRAIN_Node0_action N_ReferenceNumberPrefixTRAIN_Node0_action --> E_ReferenceNumberPrefixTRAIN S_ReferenceNumberPrefixTRAIN --> N_ReferenceNumberPrefixTRAIN_Node0 N_ReferenceNumberPrefixTRAIN_Node0 -- No --> E_ReferenceNumberPrefixTRAIN
File: GCX015.cbl
GIVEN:
An M10 segment has been extracted from the message
WHEN:
The reference number (M10-12-REF-NUM) starts with 'TRAIN'
THEN:
The system sets the message type as TRAIN for processing
β Consolidated Acceptance Criteria
- The reference number (M10-12-REF-NUM) starts with 'CARGO' → the system sets the message type as CARGO for processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ReferenceNumberPrefixCARGO(["Start Step"])
E_ReferenceNumberPrefixCARGO(["End Step"])
N_ReferenceNumberPrefixCARGO_Node0{"The reference number M10-12-REF-NUM
starts with CARGO"}:::decision N_ReferenceNumberPrefixCARGO_Node0_action["The system sets the message type as
CARGO for processing"]:::main N_ReferenceNumberPrefixCARGO_Node0 -- Yes --> N_ReferenceNumberPrefixCARGO_Node0_action N_ReferenceNumberPrefixCARGO_Node0_action --> E_ReferenceNumberPrefixCARGO S_ReferenceNumberPrefixCARGO --> N_ReferenceNumberPrefixCARGO_Node0 N_ReferenceNumberPrefixCARGO_Node0 -- No --> E_ReferenceNumberPrefixCARGO
starts with CARGO"}:::decision N_ReferenceNumberPrefixCARGO_Node0_action["The system sets the message type as
CARGO for processing"]:::main N_ReferenceNumberPrefixCARGO_Node0 -- Yes --> N_ReferenceNumberPrefixCARGO_Node0_action N_ReferenceNumberPrefixCARGO_Node0_action --> E_ReferenceNumberPrefixCARGO S_ReferenceNumberPrefixCARGO --> N_ReferenceNumberPrefixCARGO_Node0 N_ReferenceNumberPrefixCARGO_Node0 -- No --> E_ReferenceNumberPrefixCARGO
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
An M10 segment has been extracted and the reference number does not start with 'TRAIN'
WHEN:
The reference number (M10-12-REF-NUM) starts with 'CARGO'
THEN:
The system sets the message type as CARGO for processing
β Consolidated Acceptance Criteria
- The system processes the M11 segment → the system extracts SCAC code and bill number from M11 segment to build cargo identification key
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractSCACandBillNumberfromM11(["Start Step"])
E_ExtractSCACandBillNumberfromM11(["End Step"])
N_ExtractSCACandBillNumberfromM11_Node0{"The system processes the M11
segment"}:::decision N_ExtractSCACandBillNumberfromM11_Node0_action["The system extracts SCAC code and
bill number from M11 segment to
build cargo identification key"]:::main N_ExtractSCACandBillNumberfromM11_Node0 -- Yes --> N_ExtractSCACandBillNumberfromM11_Node0_action N_ExtractSCACandBillNumberfromM11_Node0_action --> E_ExtractSCACandBillNumberfromM11 S_ExtractSCACandBillNumberfromM11 --> N_ExtractSCACandBillNumberfromM11_Node0 N_ExtractSCACandBillNumberfromM11_Node0 -- No --> E_ExtractSCACandBillNumberfromM11
segment"}:::decision N_ExtractSCACandBillNumberfromM11_Node0_action["The system extracts SCAC code and
bill number from M11 segment to
build cargo identification key"]:::main N_ExtractSCACandBillNumberfromM11_Node0 -- Yes --> N_ExtractSCACandBillNumberfromM11_Node0_action N_ExtractSCACandBillNumberfromM11_Node0_action --> E_ExtractSCACandBillNumberfromM11 S_ExtractSCACandBillNumberfromM11 --> N_ExtractSCACandBillNumberfromM11_Node0 N_ExtractSCACandBillNumberfromM11_Node0 -- No --> E_ExtractSCACandBillNumberfromM11
File: GCX015.cbl
GIVEN:
The message type is unknown after checking M10 segment and an M11 segment is available
WHEN:
The system processes the M11 segment
THEN:
- The system extracts scac code
- Bill number from m11 segment to build cargo identification key
β Consolidated Acceptance Criteria
- The system needs to create a cargo identification key → the system combines the SCAC code and bill number into a work cargo key and sets message type as CARGO
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildCargoKeyfromM11Data(["Start Step"])
E_BuildCargoKeyfromM11Data(["End Step"])
N_BuildCargoKeyfromM11Data_Node0{"The system needs to create a cargo
identification key"}:::decision N_BuildCargoKeyfromM11Data_Node0_action["The system combines the SCAC code
and bill number into a work cargo
key and sets message type as CARGO"]:::main N_BuildCargoKeyfromM11Data_Node0 -- Yes --> N_BuildCargoKeyfromM11Data_Node0_action N_BuildCargoKeyfromM11Data_Node0_action --> E_BuildCargoKeyfromM11Data S_BuildCargoKeyfromM11Data --> N_BuildCargoKeyfromM11Data_Node0 N_BuildCargoKeyfromM11Data_Node0 -- No --> E_BuildCargoKeyfromM11Data
identification key"}:::decision N_BuildCargoKeyfromM11Data_Node0_action["The system combines the SCAC code
and bill number into a work cargo
key and sets message type as CARGO"]:::main N_BuildCargoKeyfromM11Data_Node0 -- Yes --> N_BuildCargoKeyfromM11Data_Node0_action N_BuildCargoKeyfromM11Data_Node0_action --> E_BuildCargoKeyfromM11Data S_BuildCargoKeyfromM11Data --> N_BuildCargoKeyfromM11Data_Node0 N_BuildCargoKeyfromM11Data_Node0 -- No --> E_BuildCargoKeyfromM11Data
File: GCX015.cbl
GIVEN:
SCAC code and bill number have been extracted from M11 segment
WHEN:
The system needs to create a cargo identification key
THEN:
- The system combines the scac code
- Bill number into a work cargo key
- Sets message type as cargo
β Consolidated Acceptance Criteria
- The manifest type code (M10-09-MANIFEST-TYP-CDE) is 'P', 'X', 'Y', 'T', or 'S' → the system sets the flag to update status during processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ManifestTypePXYTS(["Start Step"])
E_ManifestTypePXYTS(["End Step"])
N_ManifestTypePXYTS_Node0{"The manifest type code
M10-09-MANIFEST-TYP-CDE is P , X , Y
, T , or S"}:::decision N_ManifestTypePXYTS_Node0_action["The system sets the flag to update
status during processing"]:::main N_ManifestTypePXYTS_Node0 -- Yes --> N_ManifestTypePXYTS_Node0_action N_ManifestTypePXYTS_Node0_action --> E_ManifestTypePXYTS S_ManifestTypePXYTS --> N_ManifestTypePXYTS_Node0 N_ManifestTypePXYTS_Node0 -- No --> E_ManifestTypePXYTS
M10-09-MANIFEST-TYP-CDE is P , X , Y
, T , or S"}:::decision N_ManifestTypePXYTS_Node0_action["The system sets the flag to update
status during processing"]:::main N_ManifestTypePXYTS_Node0 -- Yes --> N_ManifestTypePXYTS_Node0_action N_ManifestTypePXYTS_Node0_action --> E_ManifestTypePXYTS S_ManifestTypePXYTS --> N_ManifestTypePXYTS_Node0 N_ManifestTypePXYTS_Node0 -- No --> E_ManifestTypePXYTS
File: GCX015.cbl
GIVEN:
A message type has been determined (TRAIN or CARGO)
WHEN:
The manifest type code (M10-09-MANIFEST-TYP-CDE) is 'P', 'X', 'Y', 'T', or 'S'
THEN:
The system sets the flag to update status during processing
β Consolidated Acceptance Criteria
- The manifest type code (M10-09-MANIFEST-TYP-CDE) is 'H' → the system sets the flag to delete status during processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ManifestTypeHandTRAIN(["Start Step"])
E_ManifestTypeHandTRAIN(["End Step"])
N_ManifestTypeHandTRAIN_Node0{"The manifest type code
M10-09-MANIFEST-TYP-CDE is H"}:::decision N_ManifestTypeHandTRAIN_Node0_action["The system sets the flag to delete
status during processing"]:::main N_ManifestTypeHandTRAIN_Node0 -- Yes --> N_ManifestTypeHandTRAIN_Node0_action N_ManifestTypeHandTRAIN_Node0_action --> E_ManifestTypeHandTRAIN S_ManifestTypeHandTRAIN --> N_ManifestTypeHandTRAIN_Node0 N_ManifestTypeHandTRAIN_Node0 -- No --> E_ManifestTypeHandTRAIN
M10-09-MANIFEST-TYP-CDE is H"}:::decision N_ManifestTypeHandTRAIN_Node0_action["The system sets the flag to delete
status during processing"]:::main N_ManifestTypeHandTRAIN_Node0 -- Yes --> N_ManifestTypeHandTRAIN_Node0_action N_ManifestTypeHandTRAIN_Node0_action --> E_ManifestTypeHandTRAIN S_ManifestTypeHandTRAIN --> N_ManifestTypeHandTRAIN_Node0 N_ManifestTypeHandTRAIN_Node0 -- No --> E_ManifestTypeHandTRAIN
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The message type is TRAIN and manifest type is not 'P', 'X', 'Y', 'T', or 'S'
WHEN:
The manifest type code (M10-09-MANIFEST-TYP-CDE) is 'H'
THEN:
The system sets the flag to delete status during processing
β Consolidated Acceptance Criteria
- The manifest type code is not 'P', 'X', 'Y', 'T', 'S' and is not 'H' for TRAIN messages → the system sets the flag to not update status during processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetShouldNotUpdateStatus(["Start Step"])
E_SetShouldNotUpdateStatus(["End Step"])
N_SetShouldNotUpdateStatus_Node0{"The manifest type code is not P , X
, Y , T , S and is not H for TRAIN
messages"}:::decision N_SetShouldNotUpdateStatus_Node0_action["The system sets the flag to not
update status during processing"]:::main N_SetShouldNotUpdateStatus_Node0 -- Yes --> N_SetShouldNotUpdateStatus_Node0_action N_SetShouldNotUpdateStatus_Node0_action --> E_SetShouldNotUpdateStatus S_SetShouldNotUpdateStatus --> N_SetShouldNotUpdateStatus_Node0 N_SetShouldNotUpdateStatus_Node0 -- No --> E_SetShouldNotUpdateStatus
, Y , T , S and is not H for TRAIN
messages"}:::decision N_SetShouldNotUpdateStatus_Node0_action["The system sets the flag to not
update status during processing"]:::main N_SetShouldNotUpdateStatus_Node0 -- Yes --> N_SetShouldNotUpdateStatus_Node0_action N_SetShouldNotUpdateStatus_Node0_action --> E_SetShouldNotUpdateStatus S_SetShouldNotUpdateStatus --> N_SetShouldNotUpdateStatus_Node0 N_SetShouldNotUpdateStatus_Node0 -- No --> E_SetShouldNotUpdateStatus
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A message type has been determined
WHEN:
The manifest type code is not 'P', 'X', 'Y', 'T', 'S' and is not 'H' for TRAIN messages
THEN:
The system sets the flag to not update status during processing
β Consolidated Acceptance Criteria
- The system processes the M10 segment → the reference number is extracted from M10-12-REF-NUM field and stored in WORK-M10-12 for further processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractReferenceNumberfromM1012(["Start Step"])
E_ExtractReferenceNumberfromM1012(["End Step"])
N_ExtractReferenceNumberfromM1012_Node0{"The system processes the M10
segment"}:::decision N_ExtractReferenceNumberfromM1012_Node0_action["The reference number is extracted
from M10-12-REF-NUM field and stored
in WORK-M10-12 for further
processing"]:::main N_ExtractReferenceNumberfromM1012_Node0 -- Yes --> N_ExtractReferenceNumberfromM1012_Node0_action N_ExtractReferenceNumberfromM1012_Node0_action --> E_ExtractReferenceNumberfromM1012 S_ExtractReferenceNumberfromM1012 --> N_ExtractReferenceNumberfromM1012_Node0 N_ExtractReferenceNumberfromM1012_Node0 -- No --> E_ExtractReferenceNumberfromM1012
segment"}:::decision N_ExtractReferenceNumberfromM1012_Node0_action["The reference number is extracted
from M10-12-REF-NUM field and stored
in WORK-M10-12 for further
processing"]:::main N_ExtractReferenceNumberfromM1012_Node0 -- Yes --> N_ExtractReferenceNumberfromM1012_Node0_action N_ExtractReferenceNumberfromM1012_Node0_action --> E_ExtractReferenceNumberfromM1012 S_ExtractReferenceNumberfromM1012 --> N_ExtractReferenceNumberfromM1012_Node0 N_ExtractReferenceNumberfromM1012_Node0 -- No --> E_ExtractReferenceNumberfromM1012
File: GCX015.cbl
GIVEN:
An M10 segment is received for processing
WHEN:
The system processes the M10 segment
THEN:
- The reference number is extracted from m10-12-ref-num field
- Stored in work-m10-12 for further processing
β Consolidated Acceptance Criteria
- The system processes the M10 segment → the manifest type code is extracted from M10-09-MANIFEST-TYP-CDE field for action determination
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractManifestTypeCodefromM1009(["Start Step"])
E_ExtractManifestTypeCodefromM1009(["End Step"])
N_ExtractManifestTypeCodefromM1009_Node0{"The system processes the M10
segment"}:::decision N_ExtractManifestTypeCodefromM1009_Node0_action["The manifest type code is extracted
from M10-09-MANIFEST-TYP-CDE field
for action determination"]:::main N_ExtractManifestTypeCodefromM1009_Node0 -- Yes --> N_ExtractManifestTypeCodefromM1009_Node0_action N_ExtractManifestTypeCodefromM1009_Node0_action --> E_ExtractManifestTypeCodefromM1009 S_ExtractManifestTypeCodefromM1009 --> N_ExtractManifestTypeCodefromM1009_Node0 N_ExtractManifestTypeCodefromM1009_Node0 -- No --> E_ExtractManifestTypeCodefromM1009
segment"}:::decision N_ExtractManifestTypeCodefromM1009_Node0_action["The manifest type code is extracted
from M10-09-MANIFEST-TYP-CDE field
for action determination"]:::main N_ExtractManifestTypeCodefromM1009_Node0 -- Yes --> N_ExtractManifestTypeCodefromM1009_Node0_action N_ExtractManifestTypeCodefromM1009_Node0_action --> E_ExtractManifestTypeCodefromM1009 S_ExtractManifestTypeCodefromM1009 --> N_ExtractManifestTypeCodefromM1009_Node0 N_ExtractManifestTypeCodefromM1009_Node0 -- No --> E_ExtractManifestTypeCodefromM1009
File: GCX015.cbl
GIVEN:
An M10 segment is received for processing
WHEN:
The system processes the M10 segment
THEN:
The manifest type code is extracted from M10-09-MANIFEST-TYP-CDE field for action determination
β Consolidated Acceptance Criteria
- The manifest type code is P, X, Y, T, or S → the system sets SHOULD-UPDATE-STATUS flag to true indicating status should be updated
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUpdateStatusActionTypesPXYTS(["Start Step"])
E_SetUpdateStatusActionTypesPXYTS(["End Step"])
N_SetUpdateStatusActionTypesPXYTS_Node0{"The manifest type code is P, X, Y,
T, or S"}:::decision N_SetUpdateStatusActionTypesPXYTS_Node0_action["The system sets
SHOULD-UPDATE-STATUS flag to true
indicating status should be updated"]:::main N_SetUpdateStatusActionTypesPXYTS_Node0 -- Yes --> N_SetUpdateStatusActionTypesPXYTS_Node0_action N_SetUpdateStatusActionTypesPXYTS_Node0_action --> E_SetUpdateStatusActionTypesPXYTS S_SetUpdateStatusActionTypesPXYTS --> N_SetUpdateStatusActionTypesPXYTS_Node0 N_SetUpdateStatusActionTypesPXYTS_Node0 -- No --> E_SetUpdateStatusActionTypesPXYTS
T, or S"}:::decision N_SetUpdateStatusActionTypesPXYTS_Node0_action["The system sets
SHOULD-UPDATE-STATUS flag to true
indicating status should be updated"]:::main N_SetUpdateStatusActionTypesPXYTS_Node0 -- Yes --> N_SetUpdateStatusActionTypesPXYTS_Node0_action N_SetUpdateStatusActionTypesPXYTS_Node0_action --> E_SetUpdateStatusActionTypesPXYTS S_SetUpdateStatusActionTypesPXYTS --> N_SetUpdateStatusActionTypesPXYTS_Node0 N_SetUpdateStatusActionTypesPXYTS_Node0 -- No --> E_SetUpdateStatusActionTypesPXYTS
File: GCX015.cbl
GIVEN:
An M10 segment with manifest type code is processed
WHEN:
The manifest type code is P, X, Y, T, or S
THEN:
The system sets SHOULD-UPDATE-STATUS flag to true indicating status should be updated
β Consolidated Acceptance Criteria
- The manifest type code is H → the system sets SHOULD-DELETE-STATUS flag to true indicating the train status should be deleted
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetDeleteStatusActionTypeHforTrains(["Start Step"])
E_SetDeleteStatusActionTypeHforTrains(["End Step"])
N_SetDeleteStatusActionTypeHforTrains_Node0{"The manifest type code is H"}:::decision
N_SetDeleteStatusActionTypeHforTrains_Node0_action["The system sets
SHOULD-DELETE-STATUS flag to true
indicating the train status should
be deleted"]:::main N_SetDeleteStatusActionTypeHforTrains_Node0 -- Yes --> N_SetDeleteStatusActionTypeHforTrains_Node0_action N_SetDeleteStatusActionTypeHforTrains_Node0_action --> E_SetDeleteStatusActionTypeHforTrains S_SetDeleteStatusActionTypeHforTrains --> N_SetDeleteStatusActionTypeHforTrains_Node0 N_SetDeleteStatusActionTypeHforTrains_Node0 -- No --> E_SetDeleteStatusActionTypeHforTrains
SHOULD-DELETE-STATUS flag to true
indicating the train status should
be deleted"]:::main N_SetDeleteStatusActionTypeHforTrains_Node0 -- Yes --> N_SetDeleteStatusActionTypeHforTrains_Node0_action N_SetDeleteStatusActionTypeHforTrains_Node0_action --> E_SetDeleteStatusActionTypeHforTrains S_SetDeleteStatusActionTypeHforTrains --> N_SetDeleteStatusActionTypeHforTrains_Node0 N_SetDeleteStatusActionTypeHforTrains_Node0 -- No --> E_SetDeleteStatusActionTypeHforTrains
File: GCX015.cbl
GIVEN:
An M10 segment with manifest type code H is processed and the transaction is identified as TRAIN
WHEN:
The manifest type code is H
THEN:
The system sets SHOULD-DELETE-STATUS flag to true indicating the train status should be deleted
β Consolidated Acceptance Criteria
- The manifest type code is not P, X, Y, T, S, or H → the system sets SHOULD-NOT-UPDATE-STATUS flag to true indicating no status update should occur
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetNoUpdateActionOtherTypes(["Start Step"])
E_SetNoUpdateActionOtherTypes(["End Step"])
N_SetNoUpdateActionOtherTypes_Node0{"The manifest type code is not P, X,
Y, T, S, or H"}:::decision N_SetNoUpdateActionOtherTypes_Node0_action["The system sets
SHOULD-NOT-UPDATE-STATUS flag to
true indicating no status update
should occur"]:::main N_SetNoUpdateActionOtherTypes_Node0 -- Yes --> N_SetNoUpdateActionOtherTypes_Node0_action N_SetNoUpdateActionOtherTypes_Node0_action --> E_SetNoUpdateActionOtherTypes S_SetNoUpdateActionOtherTypes --> N_SetNoUpdateActionOtherTypes_Node0 N_SetNoUpdateActionOtherTypes_Node0 -- No --> E_SetNoUpdateActionOtherTypes
Y, T, S, or H"}:::decision N_SetNoUpdateActionOtherTypes_Node0_action["The system sets
SHOULD-NOT-UPDATE-STATUS flag to
true indicating no status update
should occur"]:::main N_SetNoUpdateActionOtherTypes_Node0 -- Yes --> N_SetNoUpdateActionOtherTypes_Node0_action N_SetNoUpdateActionOtherTypes_Node0_action --> E_SetNoUpdateActionOtherTypes S_SetNoUpdateActionOtherTypes --> N_SetNoUpdateActionOtherTypes_Node0 N_SetNoUpdateActionOtherTypes_Node0 -- No --> E_SetNoUpdateActionOtherTypes
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
An M10 segment with manifest type code is processed
WHEN:
The manifest type code is not P, X, Y, T, S, or H
THEN:
The system sets SHOULD-NOT-UPDATE-STATUS flag to true indicating no status update should occur
β Consolidated Acceptance Criteria
- The reference number prefix equals 'TRAIN' → the system sets WS-TRAIN flag to true and identifies the transaction for train processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IdentifyasTRAINProcessingPrefixTRAIN(["Start Step"])
E_IdentifyasTRAINProcessingPrefixTRAIN(["End Step"])
N_IdentifyasTRAINProcessingPrefixTRAIN_Node0{"The reference number prefix equals
TRAIN"}:::decision N_IdentifyasTRAINProcessingPrefixTRAIN_Node0_action["The system sets WS-TRAIN flag to
true and identifies the transaction
for train processing"]:::main N_IdentifyasTRAINProcessingPrefixTRAIN_Node0 -- Yes --> N_IdentifyasTRAINProcessingPrefixTRAIN_Node0_action N_IdentifyasTRAINProcessingPrefixTRAIN_Node0_action --> E_IdentifyasTRAINProcessingPrefixTRAIN S_IdentifyasTRAINProcessingPrefixTRAIN --> N_IdentifyasTRAINProcessingPrefixTRAIN_Node0 N_IdentifyasTRAINProcessingPrefixTRAIN_Node0 -- No --> E_IdentifyasTRAINProcessingPrefixTRAIN
TRAIN"}:::decision N_IdentifyasTRAINProcessingPrefixTRAIN_Node0_action["The system sets WS-TRAIN flag to
true and identifies the transaction
for train processing"]:::main N_IdentifyasTRAINProcessingPrefixTRAIN_Node0 -- Yes --> N_IdentifyasTRAINProcessingPrefixTRAIN_Node0_action N_IdentifyasTRAINProcessingPrefixTRAIN_Node0_action --> E_IdentifyasTRAINProcessingPrefixTRAIN S_IdentifyasTRAINProcessingPrefixTRAIN --> N_IdentifyasTRAINProcessingPrefixTRAIN_Node0 N_IdentifyasTRAINProcessingPrefixTRAIN_Node0 -- No --> E_IdentifyasTRAINProcessingPrefixTRAIN
File: GCX015.cbl
GIVEN:
An M10 segment reference number is extracted
WHEN:
The reference number prefix equals 'TRAIN'
THEN:
- The system sets ws-train flag to true
- Identifies the transaction for train processing
β Consolidated Acceptance Criteria
- The reference number prefix equals 'CARGO' → the system sets WS-CARGO flag to true and identifies the transaction for cargo processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IdentifyasCARGOProcessingPrefixCARGO(["Start Step"])
E_IdentifyasCARGOProcessingPrefixCARGO(["End Step"])
N_IdentifyasCARGOProcessingPrefixCARGO_Node0{"The reference number prefix equals
CARGO"}:::decision N_IdentifyasCARGOProcessingPrefixCARGO_Node0_action["The system sets WS-CARGO flag to
true and identifies the transaction
for cargo processing"]:::main N_IdentifyasCARGOProcessingPrefixCARGO_Node0 -- Yes --> N_IdentifyasCARGOProcessingPrefixCARGO_Node0_action N_IdentifyasCARGOProcessingPrefixCARGO_Node0_action --> E_IdentifyasCARGOProcessingPrefixCARGO S_IdentifyasCARGOProcessingPrefixCARGO --> N_IdentifyasCARGOProcessingPrefixCARGO_Node0 N_IdentifyasCARGOProcessingPrefixCARGO_Node0 -- No --> E_IdentifyasCARGOProcessingPrefixCARGO
CARGO"}:::decision N_IdentifyasCARGOProcessingPrefixCARGO_Node0_action["The system sets WS-CARGO flag to
true and identifies the transaction
for cargo processing"]:::main N_IdentifyasCARGOProcessingPrefixCARGO_Node0 -- Yes --> N_IdentifyasCARGOProcessingPrefixCARGO_Node0_action N_IdentifyasCARGOProcessingPrefixCARGO_Node0_action --> E_IdentifyasCARGOProcessingPrefixCARGO S_IdentifyasCARGOProcessingPrefixCARGO --> N_IdentifyasCARGOProcessingPrefixCARGO_Node0 N_IdentifyasCARGOProcessingPrefixCARGO_Node0 -- No --> E_IdentifyasCARGOProcessingPrefixCARGO
File: GCX015.cbl
GIVEN:
An M10 segment reference number is extracted
WHEN:
The reference number prefix equals 'CARGO'
THEN:
- The system sets ws-cargo flag to true
- Identifies the transaction for cargo processing
β Consolidated Acceptance Criteria
- The reference number prefix is neither 'TRAIN' nor 'CARGO' → the system maintains WS-UNKNOWN flag as true indicating unknown transaction type
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MarkasUnknownTypeOtherPrefixes(["Start Step"])
E_MarkasUnknownTypeOtherPrefixes(["End Step"])
N_MarkasUnknownTypeOtherPrefixes_Node0{"The reference number prefix is
neither TRAIN nor CARGO"}:::decision N_MarkasUnknownTypeOtherPrefixes_Node0_action["The system maintains WS-UNKNOWN
flag as true indicating unknown
transaction type"]:::main N_MarkasUnknownTypeOtherPrefixes_Node0 -- Yes --> N_MarkasUnknownTypeOtherPrefixes_Node0_action N_MarkasUnknownTypeOtherPrefixes_Node0_action --> E_MarkasUnknownTypeOtherPrefixes S_MarkasUnknownTypeOtherPrefixes --> N_MarkasUnknownTypeOtherPrefixes_Node0 N_MarkasUnknownTypeOtherPrefixes_Node0 -- No --> E_MarkasUnknownTypeOtherPrefixes
neither TRAIN nor CARGO"}:::decision N_MarkasUnknownTypeOtherPrefixes_Node0_action["The system maintains WS-UNKNOWN
flag as true indicating unknown
transaction type"]:::main N_MarkasUnknownTypeOtherPrefixes_Node0 -- Yes --> N_MarkasUnknownTypeOtherPrefixes_Node0_action N_MarkasUnknownTypeOtherPrefixes_Node0_action --> E_MarkasUnknownTypeOtherPrefixes S_MarkasUnknownTypeOtherPrefixes --> N_MarkasUnknownTypeOtherPrefixes_Node0 N_MarkasUnknownTypeOtherPrefixes_Node0 -- No --> E_MarkasUnknownTypeOtherPrefixes
File: GCX015.cbl
GIVEN:
An M10 segment reference number is extracted
WHEN:
The reference number prefix is neither 'TRAIN' nor 'CARGO'
THEN:
The system maintains WS-UNKNOWN flag as true indicating unknown transaction type
β Consolidated Acceptance Criteria
- The system completes M10 segment analysis → the reference number data is moved to WORK-M10-12-DATA field for use in database operations and logging
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_StoreM10DataforProcessing(["Start Step"])
E_StoreM10DataforProcessing(["End Step"])
N_StoreM10DataforProcessing_Node0{"The system completes M10 segment
analysis"}:::decision N_StoreM10DataforProcessing_Node0_action["The reference number data is moved
to WORK-M10-12-DATA field for use in
database operations and logging"]:::main N_StoreM10DataforProcessing_Node0 -- Yes --> N_StoreM10DataforProcessing_Node0_action N_StoreM10DataforProcessing_Node0_action --> E_StoreM10DataforProcessing S_StoreM10DataforProcessing --> N_StoreM10DataforProcessing_Node0 N_StoreM10DataforProcessing_Node0 -- No --> E_StoreM10DataforProcessing
analysis"}:::decision N_StoreM10DataforProcessing_Node0_action["The reference number data is moved
to WORK-M10-12-DATA field for use in
database operations and logging"]:::main N_StoreM10DataforProcessing_Node0 -- Yes --> N_StoreM10DataforProcessing_Node0_action N_StoreM10DataforProcessing_Node0_action --> E_StoreM10DataforProcessing S_StoreM10DataforProcessing --> N_StoreM10DataforProcessing_Node0 N_StoreM10DataforProcessing_Node0 -- No --> E_StoreM10DataforProcessing
File: GCX015.cbl
GIVEN:
M10 segment data has been extracted and transaction type identified
WHEN:
The system completes M10 segment analysis
THEN:
- The reference number data is moved to work-m10-12-data field for use in database operations
- Logging
β Consolidated Acceptance Criteria
- The message type has not been determined as TRAIN or CARGO → the system should proceed to check for M11 segment to identify cargo information
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageTypeUnknown(["Start Step"])
E_MessageTypeUnknown(["End Step"])
N_MessageTypeUnknown_Node0{"The message type has not been
determined as TRAIN or CARGO"}:::decision N_MessageTypeUnknown_Node0_action["The system should proceed to check
for M11 segment to identify cargo
information"]:::main N_MessageTypeUnknown_Node0 -- Yes --> N_MessageTypeUnknown_Node0_action N_MessageTypeUnknown_Node0_action --> E_MessageTypeUnknown S_MessageTypeUnknown --> N_MessageTypeUnknown_Node0 N_MessageTypeUnknown_Node0 -- No --> E_MessageTypeUnknown
determined as TRAIN or CARGO"}:::decision N_MessageTypeUnknown_Node0_action["The system should proceed to check
for M11 segment to identify cargo
information"]:::main N_MessageTypeUnknown_Node0 -- Yes --> N_MessageTypeUnknown_Node0_action N_MessageTypeUnknown_Node0_action --> E_MessageTypeUnknown S_MessageTypeUnknown --> N_MessageTypeUnknown_Node0 N_MessageTypeUnknown_Node0 -- No --> E_MessageTypeUnknown
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A message is being processed for type identification
WHEN:
The message type has not been determined as TRAIN or CARGO
THEN:
The system should proceed to check for M11 segment to identify cargo information
β Consolidated Acceptance Criteria
- The current message segment has table ID equal to 'M11' → the system should process the M11 segment to extract cargo information
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_M11SegmentFound(["Start Step"])
E_M11SegmentFound(["End Step"])
N_M11SegmentFound_Node0{"The current message segment has
table ID equal to M11"}:::decision N_M11SegmentFound_Node0_action["The system should process the M11
segment to extract cargo information"]:::main N_M11SegmentFound_Node0 -- Yes --> N_M11SegmentFound_Node0_action N_M11SegmentFound_Node0_action --> E_M11SegmentFound S_M11SegmentFound --> N_M11SegmentFound_Node0 N_M11SegmentFound_Node0 -- No --> E_M11SegmentFound
table ID equal to M11"}:::decision N_M11SegmentFound_Node0_action["The system should process the M11
segment to extract cargo information"]:::main N_M11SegmentFound_Node0 -- Yes --> N_M11SegmentFound_Node0_action N_M11SegmentFound_Node0_action --> E_M11SegmentFound S_M11SegmentFound --> N_M11SegmentFound_Node0 N_M11SegmentFound_Node0 -- No --> E_M11SegmentFound
File: GCX015.cbl
GIVEN:
A message with unknown type is being processed
WHEN:
The current message segment has table ID equal to 'M11'
THEN:
The system should process the M11 segment to extract cargo information
β Consolidated Acceptance Criteria
- The M11 segment contains SCAC information in field M11-12-SCAC → the system should extract the SCAC code and store it in the work SCAC field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractSCACCodefromM1112SCAC(["Start Step"])
E_ExtractSCACCodefromM1112SCAC(["End Step"])
N_ExtractSCACCodefromM1112SCAC_Node0{"The M11 segment contains SCAC
information in field M11-12-SCAC"}:::decision N_ExtractSCACCodefromM1112SCAC_Node0_action["The system should extract the SCAC
code and store it in the work SCAC
field"]:::main N_ExtractSCACCodefromM1112SCAC_Node0 -- Yes --> N_ExtractSCACCodefromM1112SCAC_Node0_action N_ExtractSCACCodefromM1112SCAC_Node0_action --> E_ExtractSCACCodefromM1112SCAC S_ExtractSCACCodefromM1112SCAC --> N_ExtractSCACCodefromM1112SCAC_Node0 N_ExtractSCACCodefromM1112SCAC_Node0 -- No --> E_ExtractSCACCodefromM1112SCAC
information in field M11-12-SCAC"}:::decision N_ExtractSCACCodefromM1112SCAC_Node0_action["The system should extract the SCAC
code and store it in the work SCAC
field"]:::main N_ExtractSCACCodefromM1112SCAC_Node0 -- Yes --> N_ExtractSCACCodefromM1112SCAC_Node0_action N_ExtractSCACCodefromM1112SCAC_Node0_action --> E_ExtractSCACCodefromM1112SCAC S_ExtractSCACCodefromM1112SCAC --> N_ExtractSCACCodefromM1112SCAC_Node0 N_ExtractSCACCodefromM1112SCAC_Node0 -- No --> E_ExtractSCACCodefromM1112SCAC
File: GCX015.cbl
GIVEN:
An M11 segment is being processed for cargo identification
WHEN:
The M11 segment contains SCAC information in field M11-12-SCAC
THEN:
- The system should extract the scac code
- Store it in the work scac field
β Consolidated Acceptance Criteria
- The M11 segment contains bill information in field M11-01-BOL-WB-NUM → the system should extract the bill number and store it in the work bill number field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractBillNumberfromM1101BOLWBNUM(["Start Step"])
E_ExtractBillNumberfromM1101BOLWBNUM(["End Step"])
N_ExtractBillNumberfromM1101BOLWBNUM_Node0{"The M11 segment contains bill
information in field
M11-01-BOL-WB-NUM"}:::decision N_ExtractBillNumberfromM1101BOLWBNUM_Node0_action["The system should extract the bill
number and store it in the work bill
number field"]:::main N_ExtractBillNumberfromM1101BOLWBNUM_Node0 -- Yes --> N_ExtractBillNumberfromM1101BOLWBNUM_Node0_action N_ExtractBillNumberfromM1101BOLWBNUM_Node0_action --> E_ExtractBillNumberfromM1101BOLWBNUM S_ExtractBillNumberfromM1101BOLWBNUM --> N_ExtractBillNumberfromM1101BOLWBNUM_Node0 N_ExtractBillNumberfromM1101BOLWBNUM_Node0 -- No --> E_ExtractBillNumberfromM1101BOLWBNUM
information in field
M11-01-BOL-WB-NUM"}:::decision N_ExtractBillNumberfromM1101BOLWBNUM_Node0_action["The system should extract the bill
number and store it in the work bill
number field"]:::main N_ExtractBillNumberfromM1101BOLWBNUM_Node0 -- Yes --> N_ExtractBillNumberfromM1101BOLWBNUM_Node0_action N_ExtractBillNumberfromM1101BOLWBNUM_Node0_action --> E_ExtractBillNumberfromM1101BOLWBNUM S_ExtractBillNumberfromM1101BOLWBNUM --> N_ExtractBillNumberfromM1101BOLWBNUM_Node0 N_ExtractBillNumberfromM1101BOLWBNUM_Node0 -- No --> E_ExtractBillNumberfromM1101BOLWBNUM
File: GCX015.cbl
GIVEN:
An M11 segment is being processed for cargo identification
WHEN:
The M11 segment contains bill information in field M11-01-BOL-WB-NUM
THEN:
- The system should extract the bill number
- Store it in the work bill number field
β Consolidated Acceptance Criteria
- Both SCAC and bill number values are available → the system should combine the SCAC and bill number into a work cargo key and store it as the M10-12 data for processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildCargoKeyfromSCACandBillNumber(["Start Step"])
E_BuildCargoKeyfromSCACandBillNumber(["End Step"])
N_BuildCargoKeyfromSCACandBillNumber_Node0{"Both SCAC and bill number values
are available"}:::decision N_BuildCargoKeyfromSCACandBillNumber_Node0_action["The system should combine the SCAC
and bill number into a work cargo
key and store it as the M10-12 data
for processing"]:::main N_BuildCargoKeyfromSCACandBillNumber_Node0 -- Yes --> N_BuildCargoKeyfromSCACandBillNumber_Node0_action N_BuildCargoKeyfromSCACandBillNumber_Node0_action --> E_BuildCargoKeyfromSCACandBillNumber S_BuildCargoKeyfromSCACandBillNumber --> N_BuildCargoKeyfromSCACandBillNumber_Node0 N_BuildCargoKeyfromSCACandBillNumber_Node0 -- No --> E_BuildCargoKeyfromSCACandBillNumber
are available"}:::decision N_BuildCargoKeyfromSCACandBillNumber_Node0_action["The system should combine the SCAC
and bill number into a work cargo
key and store it as the M10-12 data
for processing"]:::main N_BuildCargoKeyfromSCACandBillNumber_Node0 -- Yes --> N_BuildCargoKeyfromSCACandBillNumber_Node0_action N_BuildCargoKeyfromSCACandBillNumber_Node0_action --> E_BuildCargoKeyfromSCACandBillNumber S_BuildCargoKeyfromSCACandBillNumber --> N_BuildCargoKeyfromSCACandBillNumber_Node0 N_BuildCargoKeyfromSCACandBillNumber_Node0 -- No --> E_BuildCargoKeyfromSCACandBillNumber
File: GCX015.cbl
GIVEN:
SCAC code and bill number have been extracted from M11 segment
WHEN:
- Both scac
- Bill number values are available
THEN:
- The system should combine the scac
- Bill number into a work cargo key
- Store it as the m10-12 data for processing
β Consolidated Acceptance Criteria
- The cargo identification process is complete → the system should set the message type indicator to CARGO for subsequent processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetMessageTypeasCargo(["Start Step"])
E_SetMessageTypeasCargo(["End Step"])
N_SetMessageTypeasCargo_Node0{"The cargo identification process is
complete"}:::decision N_SetMessageTypeasCargo_Node0_action["The system should set the message
type indicator to CARGO for
subsequent processing"]:::main N_SetMessageTypeasCargo_Node0 -- Yes --> N_SetMessageTypeasCargo_Node0_action N_SetMessageTypeasCargo_Node0_action --> E_SetMessageTypeasCargo S_SetMessageTypeasCargo --> N_SetMessageTypeasCargo_Node0 N_SetMessageTypeasCargo_Node0 -- No --> E_SetMessageTypeasCargo
complete"}:::decision N_SetMessageTypeasCargo_Node0_action["The system should set the message
type indicator to CARGO for
subsequent processing"]:::main N_SetMessageTypeasCargo_Node0 -- Yes --> N_SetMessageTypeasCargo_Node0_action N_SetMessageTypeasCargo_Node0_action --> E_SetMessageTypeasCargo S_SetMessageTypeasCargo --> N_SetMessageTypeasCargo_Node0 N_SetMessageTypeasCargo_Node0 -- No --> E_SetMessageTypeasCargo
File: GCX015.cbl
GIVEN:
Cargo key has been successfully built from M11 segment information
WHEN:
The cargo identification process is complete
THEN:
The system should set the message type indicator to CARGO for subsequent processing
β Consolidated Acceptance Criteria
- The manifest type code is P, X, Y, T, or S → the system should set the status update action to allow status updates
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUPDATEStatusActionTypesPXYTS(["Start Step"])
E_SetUPDATEStatusActionTypesPXYTS(["End Step"])
N_SetUPDATEStatusActionTypesPXYTS_Node0{"The manifest type code is P, X, Y,
T, or S"}:::decision N_SetUPDATEStatusActionTypesPXYTS_Node0_action["The system should set the status
update action to allow status
updates"]:::main N_SetUPDATEStatusActionTypesPXYTS_Node0 -- Yes --> N_SetUPDATEStatusActionTypesPXYTS_Node0_action N_SetUPDATEStatusActionTypesPXYTS_Node0_action --> E_SetUPDATEStatusActionTypesPXYTS S_SetUPDATEStatusActionTypesPXYTS --> N_SetUPDATEStatusActionTypesPXYTS_Node0 N_SetUPDATEStatusActionTypesPXYTS_Node0 -- No --> E_SetUPDATEStatusActionTypesPXYTS
T, or S"}:::decision N_SetUPDATEStatusActionTypesPXYTS_Node0_action["The system should set the status
update action to allow status
updates"]:::main N_SetUPDATEStatusActionTypesPXYTS_Node0 -- Yes --> N_SetUPDATEStatusActionTypesPXYTS_Node0_action N_SetUPDATEStatusActionTypesPXYTS_Node0_action --> E_SetUPDATEStatusActionTypesPXYTS S_SetUPDATEStatusActionTypesPXYTS --> N_SetUPDATEStatusActionTypesPXYTS_Node0 N_SetUPDATEStatusActionTypesPXYTS_Node0 -- No --> E_SetUPDATEStatusActionTypesPXYTS
File: GCX015.cbl
GIVEN:
An M10 segment is being processed with a manifest type code
WHEN:
The manifest type code is P, X, Y, T, or S
THEN:
The system should set the status update action to allow status updates
β Consolidated Acceptance Criteria
- The manifest type code is not P, X, Y, T, or S → the system should set the status update action to prevent status updates
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetNOUPDATEStatusActionOtherTypes(["Start Step"])
E_SetNOUPDATEStatusActionOtherTypes(["End Step"])
N_SetNOUPDATEStatusActionOtherTypes_Node0{"The manifest type code is not P, X,
Y, T, or S"}:::decision N_SetNOUPDATEStatusActionOtherTypes_Node0_action["The system should set the status
update action to prevent status
updates"]:::main N_SetNOUPDATEStatusActionOtherTypes_Node0 -- Yes --> N_SetNOUPDATEStatusActionOtherTypes_Node0_action N_SetNOUPDATEStatusActionOtherTypes_Node0_action --> E_SetNOUPDATEStatusActionOtherTypes S_SetNOUPDATEStatusActionOtherTypes --> N_SetNOUPDATEStatusActionOtherTypes_Node0 N_SetNOUPDATEStatusActionOtherTypes_Node0 -- No --> E_SetNOUPDATEStatusActionOtherTypes
Y, T, or S"}:::decision N_SetNOUPDATEStatusActionOtherTypes_Node0_action["The system should set the status
update action to prevent status
updates"]:::main N_SetNOUPDATEStatusActionOtherTypes_Node0 -- Yes --> N_SetNOUPDATEStatusActionOtherTypes_Node0_action N_SetNOUPDATEStatusActionOtherTypes_Node0_action --> E_SetNOUPDATEStatusActionOtherTypes S_SetNOUPDATEStatusActionOtherTypes --> N_SetNOUPDATEStatusActionOtherTypes_Node0 N_SetNOUPDATEStatusActionOtherTypes_Node0 -- No --> E_SetNOUPDATEStatusActionOtherTypes
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
An M10 segment is being processed with a manifest type code
WHEN:
The manifest type code is not P, X, Y, T, or S
THEN:
The system should set the status update action to prevent status updates
β Consolidated Acceptance Criteria
- The manifest type code is H → the system should set the delete status action to allow status deletion
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetDELETEStatusActionTypeHforTrains(["Start Step"])
E_SetDELETEStatusActionTypeHforTrains(["End Step"])
N_SetDELETEStatusActionTypeHforTrains_Node0{"The manifest type code is H"}:::decision
N_SetDELETEStatusActionTypeHforTrains_Node0_action["The system should set the delete
status action to allow status
deletion"]:::main N_SetDELETEStatusActionTypeHforTrains_Node0 -- Yes --> N_SetDELETEStatusActionTypeHforTrains_Node0_action N_SetDELETEStatusActionTypeHforTrains_Node0_action --> E_SetDELETEStatusActionTypeHforTrains S_SetDELETEStatusActionTypeHforTrains --> N_SetDELETEStatusActionTypeHforTrains_Node0 N_SetDELETEStatusActionTypeHforTrains_Node0 -- No --> E_SetDELETEStatusActionTypeHforTrains
status action to allow status
deletion"]:::main N_SetDELETEStatusActionTypeHforTrains_Node0 -- Yes --> N_SetDELETEStatusActionTypeHforTrains_Node0_action N_SetDELETEStatusActionTypeHforTrains_Node0_action --> E_SetDELETEStatusActionTypeHforTrains S_SetDELETEStatusActionTypeHforTrains --> N_SetDELETEStatusActionTypeHforTrains_Node0 N_SetDELETEStatusActionTypeHforTrains_Node0 -- No --> E_SetDELETEStatusActionTypeHforTrains
File: GCX015.cbl
GIVEN:
A train is being processed with an M10 segment containing manifest type code
WHEN:
The manifest type code is H
THEN:
The system should set the delete status action to allow status deletion
β Consolidated Acceptance Criteria
- The manifest type code is not H → the system should set the delete status action to prevent status deletion
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetNODELETEStatusActionOtherTypesforTrains(["Start Step"])
E_SetNODELETEStatusActionOtherTypesforTrains(["End Step"])
N_SetNODELETEStatusActionOtherTypesforTrains_Node0{"The manifest type code is not H"}:::decision
N_SetNODELETEStatusActionOtherTypesforTrains_Node0_action["The system should set the delete
status action to prevent status
deletion"]:::main N_SetNODELETEStatusActionOtherTypesforTrains_Node0 -- Yes --> N_SetNODELETEStatusActionOtherTypesforTrains_Node0_action N_SetNODELETEStatusActionOtherTypesforTrains_Node0_action --> E_SetNODELETEStatusActionOtherTypesforTrains S_SetNODELETEStatusActionOtherTypesforTrains --> N_SetNODELETEStatusActionOtherTypesforTrains_Node0 N_SetNODELETEStatusActionOtherTypesforTrains_Node0 -- No --> E_SetNODELETEStatusActionOtherTypesforTrains
status action to prevent status
deletion"]:::main N_SetNODELETEStatusActionOtherTypesforTrains_Node0 -- Yes --> N_SetNODELETEStatusActionOtherTypesforTrains_Node0_action N_SetNODELETEStatusActionOtherTypesforTrains_Node0_action --> E_SetNODELETEStatusActionOtherTypesforTrains S_SetNODELETEStatusActionOtherTypesforTrains --> N_SetNODELETEStatusActionOtherTypesforTrains_Node0 N_SetNODELETEStatusActionOtherTypesforTrains_Node0 -- No --> E_SetNODELETEStatusActionOtherTypesforTrains
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train is being processed with an M10 segment containing manifest type code
WHEN:
The manifest type code is not H
THEN:
The system should set the delete status action to prevent status deletion
β Consolidated Acceptance Criteria
- The system processes the M10 segment → the M10 segment data is stored and the M10 segment found flag is set to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessM10Segment(["Start Step"])
E_ProcessM10Segment(["End Step"])
N_ProcessM10Segment_Node0{"The system processes the M10
segment"}:::decision N_ProcessM10Segment_Node0_action["The M10 segment data is stored and
the M10 segment found flag is set to
true"]:::main N_ProcessM10Segment_Node0 -- Yes --> N_ProcessM10Segment_Node0_action N_ProcessM10Segment_Node0_action --> E_ProcessM10Segment S_ProcessM10Segment --> N_ProcessM10Segment_Node0 N_ProcessM10Segment_Node0 -- No --> E_ProcessM10Segment
segment"}:::decision N_ProcessM10Segment_Node0_action["The M10 segment data is stored and
the M10 segment found flag is set to
true"]:::main N_ProcessM10Segment_Node0 -- Yes --> N_ProcessM10Segment_Node0_action N_ProcessM10Segment_Node0_action --> E_ProcessM10Segment S_ProcessM10Segment --> N_ProcessM10Segment_Node0 N_ProcessM10Segment_Node0 -- No --> E_ProcessM10Segment
File: GCX015.cbl
GIVEN:
A message segment with table ID 'M10' is encountered during message processing
WHEN:
The system processes the M10 segment
THEN:
- The m10 segment data is stored
- The m10 segment found flag is set to true
β Consolidated Acceptance Criteria
- The system processes the P4 segment → the P4 segment data is stored and the P4 segment found flag is set to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessP4Segment(["Start Step"])
E_ProcessP4Segment(["End Step"])
N_ProcessP4Segment_Node0{"The system processes the P4 segment"}:::decision
N_ProcessP4Segment_Node0_action["The P4 segment data is stored and
the P4 segment found flag is set to
true"]:::main N_ProcessP4Segment_Node0 -- Yes --> N_ProcessP4Segment_Node0_action N_ProcessP4Segment_Node0_action --> E_ProcessP4Segment S_ProcessP4Segment --> N_ProcessP4Segment_Node0 N_ProcessP4Segment_Node0 -- No --> E_ProcessP4Segment
the P4 segment found flag is set to
true"]:::main N_ProcessP4Segment_Node0 -- Yes --> N_ProcessP4Segment_Node0_action N_ProcessP4Segment_Node0_action --> E_ProcessP4Segment S_ProcessP4Segment --> N_ProcessP4Segment_Node0 N_ProcessP4Segment_Node0 -- No --> E_ProcessP4Segment
File: GCX015.cbl
GIVEN:
A message segment with table ID 'P4 ' is encountered during message processing
WHEN:
The system processes the P4 segment
THEN:
- The p4 segment data is stored
- The p4 segment found flag is set to true
β Consolidated Acceptance Criteria
- The system processes the N10 segment → the line release number from position 09 is extracted and stored in the hold area
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessN10Segment(["Start Step"])
E_ProcessN10Segment(["End Step"])
N_ProcessN10Segment_Node0{"The system processes the N10
segment"}:::decision N_ProcessN10Segment_Node0_action["The line release number from
position 09 is extracted and stored
in the hold area"]:::main N_ProcessN10Segment_Node0 -- Yes --> N_ProcessN10Segment_Node0_action N_ProcessN10Segment_Node0_action --> E_ProcessN10Segment S_ProcessN10Segment --> N_ProcessN10Segment_Node0 N_ProcessN10Segment_Node0 -- No --> E_ProcessN10Segment
segment"}:::decision N_ProcessN10Segment_Node0_action["The line release number from
position 09 is extracted and stored
in the hold area"]:::main N_ProcessN10Segment_Node0 -- Yes --> N_ProcessN10Segment_Node0_action N_ProcessN10Segment_Node0_action --> E_ProcessN10Segment S_ProcessN10Segment --> N_ProcessN10Segment_Node0 N_ProcessN10Segment_Node0 -- No --> E_ProcessN10Segment
File: GCX015.cbl
GIVEN:
A message segment with table ID 'N10' is encountered during message processing
WHEN:
The system processes the N10 segment
THEN:
- The line release number from position 09 is extracted
- Stored in the hold area
β Consolidated Acceptance Criteria
- The system looks up the message number in the MS table with prefix 'A' → if found, the English text from the table is used; if not found, the free-form message from K1 segment is used
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LookUpErrorMessageText(["Start Step"])
E_LookUpErrorMessageText(["End Step"])
N_LookUpErrorMessageText_Node0{"The system looks up the message
number in the MS table with prefix A"}:::decision N_LookUpErrorMessageText_Node0_action["If found, the English text from the
table is used if not found, the
free-form message from K1 segment is
used"]:::main N_LookUpErrorMessageText_Node0 -- Yes --> N_LookUpErrorMessageText_Node0_action N_LookUpErrorMessageText_Node0_action --> E_LookUpErrorMessageText S_LookUpErrorMessageText --> N_LookUpErrorMessageText_Node0 N_LookUpErrorMessageText_Node0 -- No --> E_LookUpErrorMessageText
number in the MS table with prefix A"}:::decision N_LookUpErrorMessageText_Node0_action["If found, the English text from the
table is used if not found, the
free-form message from K1 segment is
used"]:::main N_LookUpErrorMessageText_Node0 -- Yes --> N_LookUpErrorMessageText_Node0_action N_LookUpErrorMessageText_Node0_action --> E_LookUpErrorMessageText S_LookUpErrorMessageText --> N_LookUpErrorMessageText_Node0 N_LookUpErrorMessageText_Node0 -- No --> E_LookUpErrorMessageText
File: GCX015.cbl
GIVEN:
A K1 segment is being processed with a message number
WHEN:
The system looks up the message number in the MS table with prefix 'A'
THEN:
If found, the English text from the table is used; if not found, the free-form message from K1 segment is used
β Consolidated Acceptance Criteria
- The system builds the error description → an additional message line with 'C4 CODE=' followed by the line release number is added to the processing log
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildErrorDescription(["Start Step"])
E_BuildErrorDescription(["End Step"])
N_BuildErrorDescription_Node0{"The system builds the error
description"}:::decision N_BuildErrorDescription_Node0_action["An additional message line with C4
CODE followed by the line release
number is added to the processing
log"]:::exclusion N_BuildErrorDescription_Node0 -- Yes -->|Alternative| N_BuildErrorDescription_Node0_action N_BuildErrorDescription_Node0_action --> E_BuildErrorDescription S_BuildErrorDescription --> N_BuildErrorDescription_Node0 N_BuildErrorDescription_Node0 -- No --> E_BuildErrorDescription
description"}:::decision N_BuildErrorDescription_Node0_action["An additional message line with C4
CODE followed by the line release
number is added to the processing
log"]:::exclusion N_BuildErrorDescription_Node0 -- Yes -->|Alternative| N_BuildErrorDescription_Node0_action N_BuildErrorDescription_Node0_action --> E_BuildErrorDescription S_BuildErrorDescription --> N_BuildErrorDescription_Node0 N_BuildErrorDescription_Node0 -- No --> E_BuildErrorDescription
File: GCX015.cbl
GIVEN:
A K1 segment with message number '242' is processed and N10 line release number data exists
WHEN:
The system builds the error description
THEN:
An additional message line with 'C4 CODE=' followed by the line release number is added to the processing log
β Consolidated Acceptance Criteria
- The system processes the K3 segment → the K3 segment data is stored and the K3 segment found flag is set to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessK3Segment(["Start Step"])
E_ProcessK3Segment(["End Step"])
N_ProcessK3Segment_Node0{"The system processes the K3 segment"}:::decision
N_ProcessK3Segment_Node0_action["The K3 segment data is stored and
the K3 segment found flag is set to
true"]:::main N_ProcessK3Segment_Node0 -- Yes --> N_ProcessK3Segment_Node0_action N_ProcessK3Segment_Node0_action --> E_ProcessK3Segment S_ProcessK3Segment --> N_ProcessK3Segment_Node0 N_ProcessK3Segment_Node0 -- No --> E_ProcessK3Segment
the K3 segment found flag is set to
true"]:::main N_ProcessK3Segment_Node0 -- Yes --> N_ProcessK3Segment_Node0_action N_ProcessK3Segment_Node0_action --> E_ProcessK3Segment S_ProcessK3Segment --> N_ProcessK3Segment_Node0 N_ProcessK3Segment_Node0 -- No --> E_ProcessK3Segment
File: GCX015.cbl
GIVEN:
A message segment with table ID 'K3 ' is encountered during message processing
WHEN:
The system processes the K3 segment
THEN:
- The k3 segment data is stored
- The k3 segment found flag is set to true
β Consolidated Acceptance Criteria
- A segment with table ID containing only spaces or low-values is encountered → the end found flag is set to true and segment processing terminates
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_EndofMessage(["Start Step"])
E_EndofMessage(["End Step"])
N_EndofMessage_Node0{"A segment with table ID containing
only spaces or low-values is
encountered"}:::decision N_EndofMessage_Node0_action["The end found flag is set to true
and segment processing terminates"]:::main N_EndofMessage_Node0 -- Yes --> N_EndofMessage_Node0_action N_EndofMessage_Node0_action --> E_EndofMessage S_EndofMessage --> N_EndofMessage_Node0 N_EndofMessage_Node0 -- No --> E_EndofMessage
only spaces or low-values is
encountered"}:::decision N_EndofMessage_Node0_action["The end found flag is set to true
and segment processing terminates"]:::main N_EndofMessage_Node0 -- Yes --> N_EndofMessage_Node0_action N_EndofMessage_Node0_action --> E_EndofMessage S_EndofMessage --> N_EndofMessage_Node0 N_EndofMessage_Node0 -- No --> E_EndofMessage
File: GCX015.cbl
GIVEN:
Message segments are being processed sequentially
WHEN:
A segment with table ID containing only spaces or low-values is encountered
THEN:
- The end found flag is set to true
- Segment processing terminates
β Consolidated Acceptance Criteria
- The segment processing is complete → the segment data from positions 1-69 is added to the processing log and the line counter is incremented
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddSegmenttoProcessingLog(["Start Step"])
E_AddSegmenttoProcessingLog(["End Step"])
N_AddSegmenttoProcessingLog_Node0{"The segment processing is complete"}:::decision
N_AddSegmenttoProcessingLog_Node0_action["The segment data from positions
1-69 is added to the processing log
and the line counter is incremented"]:::main N_AddSegmenttoProcessingLog_Node0 -- Yes --> N_AddSegmenttoProcessingLog_Node0_action N_AddSegmenttoProcessingLog_Node0_action --> E_AddSegmenttoProcessingLog S_AddSegmenttoProcessingLog --> N_AddSegmenttoProcessingLog_Node0 N_AddSegmenttoProcessingLog_Node0 -- No --> E_AddSegmenttoProcessingLog
1-69 is added to the processing log
and the line counter is incremented"]:::main N_AddSegmenttoProcessingLog_Node0 -- Yes --> N_AddSegmenttoProcessingLog_Node0_action N_AddSegmenttoProcessingLog_Node0_action --> E_AddSegmenttoProcessingLog S_AddSegmenttoProcessingLog --> N_AddSegmenttoProcessingLog_Node0 N_AddSegmenttoProcessingLog_Node0 -- No --> E_AddSegmenttoProcessingLog
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A message segment has been processed (except K1 segments which handle their own logging)
WHEN:
The segment processing is complete
THEN:
- The segment data from positions 1-69 is added to the processing log
- The line counter is incremented
β Consolidated Acceptance Criteria
- The system processes the K1 segment → the message number is extracted from the K1 segment and stored for further processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_StartK1SegmentProcessing(["Start Step"])
E_StartK1SegmentProcessing(["End Step"])
N_StartK1SegmentProcessing_Node0{"The system processes the K1 segment"}:::decision
N_StartK1SegmentProcessing_Node0_action["The message number is extracted
from the K1 segment and stored for
further processing"]:::main N_StartK1SegmentProcessing_Node0 -- Yes --> N_StartK1SegmentProcessing_Node0_action N_StartK1SegmentProcessing_Node0_action --> E_StartK1SegmentProcessing S_StartK1SegmentProcessing --> N_StartK1SegmentProcessing_Node0 N_StartK1SegmentProcessing_Node0 -- No --> E_StartK1SegmentProcessing
from the K1 segment and stored for
further processing"]:::main N_StartK1SegmentProcessing_Node0 -- Yes --> N_StartK1SegmentProcessing_Node0_action N_StartK1SegmentProcessing_Node0_action --> E_StartK1SegmentProcessing S_StartK1SegmentProcessing --> N_StartK1SegmentProcessing_Node0 N_StartK1SegmentProcessing_Node0 -- No --> E_StartK1SegmentProcessing
File: GCX015.cbl
GIVEN:
A K1 segment is being processed
WHEN:
The system processes the K1 segment
THEN:
- The message number is extracted from the k1 segment
- Stored for further processing
β Consolidated Acceptance Criteria
- The system builds the MS table lookup key → the key is constructed with table ID 'MS', prefix 'A', and the K1 message number
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildMSTableKeywithMessageNumber(["Start Step"])
E_BuildMSTableKeywithMessageNumber(["End Step"])
N_BuildMSTableKeywithMessageNumber_Node0{"The system builds the MS table
lookup key"}:::decision N_BuildMSTableKeywithMessageNumber_Node0_action["The key is constructed with table
ID MS , prefix A , and the K1
message number"]:::main N_BuildMSTableKeywithMessageNumber_Node0 -- Yes --> N_BuildMSTableKeywithMessageNumber_Node0_action N_BuildMSTableKeywithMessageNumber_Node0_action --> E_BuildMSTableKeywithMessageNumber S_BuildMSTableKeywithMessageNumber --> N_BuildMSTableKeywithMessageNumber_Node0 N_BuildMSTableKeywithMessageNumber_Node0 -- No --> E_BuildMSTableKeywithMessageNumber
lookup key"}:::decision N_BuildMSTableKeywithMessageNumber_Node0_action["The key is constructed with table
ID MS , prefix A , and the K1
message number"]:::main N_BuildMSTableKeywithMessageNumber_Node0 -- Yes --> N_BuildMSTableKeywithMessageNumber_Node0_action N_BuildMSTableKeywithMessageNumber_Node0_action --> E_BuildMSTableKeywithMessageNumber S_BuildMSTableKeywithMessageNumber --> N_BuildMSTableKeywithMessageNumber_Node0 N_BuildMSTableKeywithMessageNumber_Node0 -- No --> E_BuildMSTableKeywithMessageNumber
File: GCX015.cbl
GIVEN:
A K1 message number has been extracted
WHEN:
The system builds the MS table lookup key
THEN:
The key is constructed with table ID 'MS', prefix 'A', and the K1 message number
β Consolidated Acceptance Criteria
- The system performs a table lookup → the system retrieves the corresponding English error message text from the MS table
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LookUpErrorMessageTextinMSTable(["Start Step"])
E_LookUpErrorMessageTextinMSTable(["End Step"])
N_LookUpErrorMessageTextinMSTable_Node0{"The system performs a table lookup"}:::decision
N_LookUpErrorMessageTextinMSTable_Node0_action["The system retrieves the
corresponding English error message
text from the MS table"]:::main N_LookUpErrorMessageTextinMSTable_Node0 -- Yes --> N_LookUpErrorMessageTextinMSTable_Node0_action N_LookUpErrorMessageTextinMSTable_Node0_action --> E_LookUpErrorMessageTextinMSTable S_LookUpErrorMessageTextinMSTable --> N_LookUpErrorMessageTextinMSTable_Node0 N_LookUpErrorMessageTextinMSTable_Node0 -- No --> E_LookUpErrorMessageTextinMSTable
corresponding English error message
text from the MS table"]:::main N_LookUpErrorMessageTextinMSTable_Node0 -- Yes --> N_LookUpErrorMessageTextinMSTable_Node0_action N_LookUpErrorMessageTextinMSTable_Node0_action --> E_LookUpErrorMessageTextinMSTable S_LookUpErrorMessageTextinMSTable --> N_LookUpErrorMessageTextinMSTable_Node0 N_LookUpErrorMessageTextinMSTable_Node0 -- No --> E_LookUpErrorMessageTextinMSTable
File: GCX015.cbl
GIVEN:
An MS table key has been constructed with message number
WHEN:
The system performs a table lookup
THEN:
The system retrieves the corresponding English error message text from the MS table
β Consolidated Acceptance Criteria
- The lookup return flag equals '0' → use the MS table English text as the error message
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageTextFound(["Start Step"])
E_MessageTextFound(["End Step"])
N_MessageTextFound_Node0{"The lookup return flag equals 0"}:::decision
N_MessageTextFound_Node0_action["Use the MS table English text as
the error message"]:::main N_MessageTextFound_Node0 -- Yes --> N_MessageTextFound_Node0_action N_MessageTextFound_Node0_action --> E_MessageTextFound S_MessageTextFound --> N_MessageTextFound_Node0 N_MessageTextFound_Node0 -- No --> E_MessageTextFound
the error message"]:::main N_MessageTextFound_Node0 -- Yes --> N_MessageTextFound_Node0_action N_MessageTextFound_Node0_action --> E_MessageTextFound S_MessageTextFound --> N_MessageTextFound_Node0 N_MessageTextFound_Node0 -- No --> E_MessageTextFound
File: GCX015.cbl
GIVEN:
An MS table lookup has been performed for error message text
WHEN:
The lookup return flag equals '0'
THEN:
Use the MS table English text as the error message
β Consolidated Acceptance Criteria
- The lookup return flag does not equal '0' → use the K1 free form message as the error message text
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseK1FreeFormMessage(["Start Step"])
E_UseK1FreeFormMessage(["End Step"])
N_UseK1FreeFormMessage_Node0{"The lookup return flag does not
equal 0"}:::decision N_UseK1FreeFormMessage_Node0_action["Use the K1 free form message as the
error message text"]:::main N_UseK1FreeFormMessage_Node0 -- Yes --> N_UseK1FreeFormMessage_Node0_action N_UseK1FreeFormMessage_Node0_action --> E_UseK1FreeFormMessage S_UseK1FreeFormMessage --> N_UseK1FreeFormMessage_Node0 N_UseK1FreeFormMessage_Node0 -- No --> E_UseK1FreeFormMessage
equal 0"}:::decision N_UseK1FreeFormMessage_Node0_action["Use the K1 free form message as the
error message text"]:::main N_UseK1FreeFormMessage_Node0 -- Yes --> N_UseK1FreeFormMessage_Node0_action N_UseK1FreeFormMessage_Node0_action --> E_UseK1FreeFormMessage S_UseK1FreeFormMessage --> N_UseK1FreeFormMessage_Node0 N_UseK1FreeFormMessage_Node0 -- No --> E_UseK1FreeFormMessage
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
An MS table lookup has been performed for error message text
WHEN:
The lookup return flag does not equal '0'
THEN:
Use the K1 free form message as the error message text
β Consolidated Acceptance Criteria
- The system adds the message to the report → the error message is added to the report lines and the line counter is incremented
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddErrorMessagetoReportLines(["Start Step"])
E_AddErrorMessagetoReportLines(["End Step"])
N_AddErrorMessagetoReportLines_Node0{"The system adds the message to the
report"}:::decision N_AddErrorMessagetoReportLines_Node0_action["The error message is added to the
report lines and the line counter is
incremented"]:::main N_AddErrorMessagetoReportLines_Node0 -- Yes --> N_AddErrorMessagetoReportLines_Node0_action N_AddErrorMessagetoReportLines_Node0_action --> E_AddErrorMessagetoReportLines S_AddErrorMessagetoReportLines --> N_AddErrorMessagetoReportLines_Node0 N_AddErrorMessagetoReportLines_Node0 -- No --> E_AddErrorMessagetoReportLines
report"}:::decision N_AddErrorMessagetoReportLines_Node0_action["The error message is added to the
report lines and the line counter is
incremented"]:::main N_AddErrorMessagetoReportLines_Node0 -- Yes --> N_AddErrorMessagetoReportLines_Node0_action N_AddErrorMessagetoReportLines_Node0_action --> E_AddErrorMessagetoReportLines S_AddErrorMessagetoReportLines --> N_AddErrorMessagetoReportLines_Node0 N_AddErrorMessagetoReportLines_Node0 -- No --> E_AddErrorMessagetoReportLines
File: GCX015.cbl
GIVEN:
An error message text has been selected (either from MS table or K1 free form)
WHEN:
The system adds the message to the report
THEN:
- The error message is added to the report lines
- The line counter is incremented
β Consolidated Acceptance Criteria
- The system stores the message for logging → the formatted log message is stored in the K1 message array and the counter is incremented
- The system stores the message for logging → the work log message should be moved to HOLD-K1-MESSAGE array at the current K1-CNT position
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_StoreMessageinK1MessageArray(["Start Step"])
E_StoreMessageinK1MessageArray(["End Step"])
N_StoreMessageinK1MessageArray_Node0{"The system stores the message for
logging"}:::decision N_StoreMessageinK1MessageArray_Node0_action["The formatted log message is stored
in the K1 message array and the
counter is incremented"]:::main N_StoreMessageinK1MessageArray_Node0 -- Yes --> N_StoreMessageinK1MessageArray_Node0_action N_StoreMessageinK1MessageArray_Node0_action --> E_StoreMessageinK1MessageArray S_StoreMessageinK1MessageArray --> N_StoreMessageinK1MessageArray_Node0 N_StoreMessageinK1MessageArray_Node1{"The system stores the message for
logging"}:::decision N_StoreMessageinK1MessageArray_Node1_action["The work log message should be
moved to HOLD-K1-MESSAGE array at
the current K1-CNT position"]:::main N_StoreMessageinK1MessageArray_Node1 -- Yes --> N_StoreMessageinK1MessageArray_Node1_action N_StoreMessageinK1MessageArray_Node1_action --> E_StoreMessageinK1MessageArray N_StoreMessageinK1MessageArray_Node0 -- No --> N_StoreMessageinK1MessageArray_Node1 N_StoreMessageinK1MessageArray_Node1 -- No --> E_StoreMessageinK1MessageArray
logging"}:::decision N_StoreMessageinK1MessageArray_Node0_action["The formatted log message is stored
in the K1 message array and the
counter is incremented"]:::main N_StoreMessageinK1MessageArray_Node0 -- Yes --> N_StoreMessageinK1MessageArray_Node0_action N_StoreMessageinK1MessageArray_Node0_action --> E_StoreMessageinK1MessageArray S_StoreMessageinK1MessageArray --> N_StoreMessageinK1MessageArray_Node0 N_StoreMessageinK1MessageArray_Node1{"The system stores the message for
logging"}:::decision N_StoreMessageinK1MessageArray_Node1_action["The work log message should be
moved to HOLD-K1-MESSAGE array at
the current K1-CNT position"]:::main N_StoreMessageinK1MessageArray_Node1 -- Yes --> N_StoreMessageinK1MessageArray_Node1_action N_StoreMessageinK1MessageArray_Node1_action --> E_StoreMessageinK1MessageArray N_StoreMessageinK1MessageArray_Node0 -- No --> N_StoreMessageinK1MessageArray_Node1 N_StoreMessageinK1MessageArray_Node1 -- No --> E_StoreMessageinK1MessageArray
File: GCX015.cbl
GIVEN:
An error message has been formatted for display
WHEN:
The system stores the message for logging
THEN:
- The formatted log message is stored in the k1 message array
- The counter is incremented
File: GCX015.cbl
GIVEN:
A work log message has been formatted from the processed message text
WHEN:
The system stores the message for logging
THEN:
The work log message should be moved to HOLD-K1-MESSAGE array at the current K1-CNT position
β Consolidated Acceptance Criteria
- The K1 message number equals '242' → the system initiates special C4 code processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageNumber242(["Start Step"])
E_MessageNumber242(["End Step"])
N_MessageNumber242_Node0{"The K1 message number equals 242"}:::decision
N_MessageNumber242_Node0_action["The system initiates special C4
code processing"]:::main N_MessageNumber242_Node0 -- Yes --> N_MessageNumber242_Node0_action N_MessageNumber242_Node0_action --> E_MessageNumber242 S_MessageNumber242 --> N_MessageNumber242_Node0 N_MessageNumber242_Node0 -- No --> E_MessageNumber242
code processing"]:::main N_MessageNumber242_Node0 -- Yes --> N_MessageNumber242_Node0_action N_MessageNumber242_Node0_action --> E_MessageNumber242 S_MessageNumber242 --> N_MessageNumber242_Node0 N_MessageNumber242_Node0 -- No --> E_MessageNumber242
File: GCX015.cbl
GIVEN:
A K1 message has been processed
WHEN:
The K1 message number equals '242'
THEN:
The system initiates special C4 code processing
β Consolidated Acceptance Criteria
- The C4 code holder is not spaces and not low-values → the system proceeds with C4 code message construction
- The system checks for C4 code availability → if WS-HOLD-N1009 is not spaces and not low-values then proceed with C4 code message building, otherwise skip C4 processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_C4CodeAvailable(["Start Step"])
E_C4CodeAvailable(["End Step"])
N_C4CodeAvailable_Node0{"The C4 code holder is not spaces
and not low-values"}:::decision N_C4CodeAvailable_Node0_action["The system proceeds with C4 code
message construction"]:::main N_C4CodeAvailable_Node0 -- Yes --> N_C4CodeAvailable_Node0_action N_C4CodeAvailable_Node0_action --> E_C4CodeAvailable S_C4CodeAvailable --> N_C4CodeAvailable_Node0 N_C4CodeAvailable_Node1{"The system checks for C4 code
availability"}:::decision N_C4CodeAvailable_Node1_action["If WS-HOLD-N1009 is not spaces and
not low-values then proceed with C4
code message building, otherwise
skip C4 processing"]:::main N_C4CodeAvailable_Node1 -- Yes --> N_C4CodeAvailable_Node1_action N_C4CodeAvailable_Node1_action --> E_C4CodeAvailable N_C4CodeAvailable_Node0 -- No --> N_C4CodeAvailable_Node1 N_C4CodeAvailable_Node1 -- No --> E_C4CodeAvailable
and not low-values"}:::decision N_C4CodeAvailable_Node0_action["The system proceeds with C4 code
message construction"]:::main N_C4CodeAvailable_Node0 -- Yes --> N_C4CodeAvailable_Node0_action N_C4CodeAvailable_Node0_action --> E_C4CodeAvailable S_C4CodeAvailable --> N_C4CodeAvailable_Node0 N_C4CodeAvailable_Node1{"The system checks for C4 code
availability"}:::decision N_C4CodeAvailable_Node1_action["If WS-HOLD-N1009 is not spaces and
not low-values then proceed with C4
code message building, otherwise
skip C4 processing"]:::main N_C4CodeAvailable_Node1 -- Yes --> N_C4CodeAvailable_Node1_action N_C4CodeAvailable_Node1_action --> E_C4CodeAvailable N_C4CodeAvailable_Node0 -- No --> N_C4CodeAvailable_Node1 N_C4CodeAvailable_Node1 -- No --> E_C4CodeAvailable
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
Message number 242 requires C4 code processing
WHEN:
- The c4 code holder is not spaces
- Not low-values
THEN:
The system proceeds with C4 code message construction
File: GCX015.cbl
GIVEN:
Message number '242' has been detected
WHEN:
The system checks for C4 code availability
THEN:
- If ws-hold-n1009 is not spaces
- Not low-values then proceed with c4 code message building, otherwise skip c4 processing
β Consolidated Acceptance Criteria
- The system builds the C4 code message → a message is constructed with format 'C4 CODE=' followed by the C4 code value
- The system builds the C4 code message → the message should be constructed by concatenating 'C4 CODE=' with WS-HOLD-N1009 value and stored in WORK-MESSAGE
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildC4CodeMessage(["Start Step"])
E_BuildC4CodeMessage(["End Step"])
N_BuildC4CodeMessage_Node0{"The system builds the C4 code
message"}:::decision N_BuildC4CodeMessage_Node0_action["A message is constructed with
format C4 CODE followed by the C4
code value"]:::main N_BuildC4CodeMessage_Node0 -- Yes --> N_BuildC4CodeMessage_Node0_action N_BuildC4CodeMessage_Node0_action --> E_BuildC4CodeMessage S_BuildC4CodeMessage --> N_BuildC4CodeMessage_Node0 N_BuildC4CodeMessage_Node1{"The system builds the C4 code
message"}:::decision N_BuildC4CodeMessage_Node1_action["The message should be constructed
by concatenating C4 CODE with
WS-HOLD-N1009 value and stored in
WORK-MESSAGE"]:::main N_BuildC4CodeMessage_Node1 -- Yes --> N_BuildC4CodeMessage_Node1_action N_BuildC4CodeMessage_Node1_action --> E_BuildC4CodeMessage N_BuildC4CodeMessage_Node0 -- No --> N_BuildC4CodeMessage_Node1 N_BuildC4CodeMessage_Node1 -- No --> E_BuildC4CodeMessage
message"}:::decision N_BuildC4CodeMessage_Node0_action["A message is constructed with
format C4 CODE followed by the C4
code value"]:::main N_BuildC4CodeMessage_Node0 -- Yes --> N_BuildC4CodeMessage_Node0_action N_BuildC4CodeMessage_Node0_action --> E_BuildC4CodeMessage S_BuildC4CodeMessage --> N_BuildC4CodeMessage_Node0 N_BuildC4CodeMessage_Node1{"The system builds the C4 code
message"}:::decision N_BuildC4CodeMessage_Node1_action["The message should be constructed
by concatenating C4 CODE with
WS-HOLD-N1009 value and stored in
WORK-MESSAGE"]:::main N_BuildC4CodeMessage_Node1 -- Yes --> N_BuildC4CodeMessage_Node1_action N_BuildC4CodeMessage_Node1_action --> E_BuildC4CodeMessage N_BuildC4CodeMessage_Node0 -- No --> N_BuildC4CodeMessage_Node1 N_BuildC4CodeMessage_Node1 -- No --> E_BuildC4CodeMessage
File: GCX015.cbl
GIVEN:
C4 code data is available for message 242
WHEN:
The system builds the C4 code message
THEN:
A message is constructed with format 'C4 CODE=' followed by the C4 code value
File: GCX015.cbl
GIVEN:
C4 code is available in WS-HOLD-N1009 for message 242
WHEN:
The system builds the C4 code message
THEN:
- The message should be constructed by concatenating 'c4 code=' with ws-hold-n1009 value
- Stored in work-message
β Consolidated Acceptance Criteria
- The system adds the C4 message to the report → the C4 code message is added to the report lines and the line counter is incremented
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddC4CodetoReportLines(["Start Step"])
E_AddC4CodetoReportLines(["End Step"])
N_AddC4CodetoReportLines_Node0{"The system adds the C4 message to
the report"}:::decision N_AddC4CodetoReportLines_Node0_action["The C4 code message is added to the
report lines and the line counter is
incremented"]:::main N_AddC4CodetoReportLines_Node0 -- Yes --> N_AddC4CodetoReportLines_Node0_action N_AddC4CodetoReportLines_Node0_action --> E_AddC4CodetoReportLines S_AddC4CodetoReportLines --> N_AddC4CodetoReportLines_Node0 N_AddC4CodetoReportLines_Node0 -- No --> E_AddC4CodetoReportLines
the report"}:::decision N_AddC4CodetoReportLines_Node0_action["The C4 code message is added to the
report lines and the line counter is
incremented"]:::main N_AddC4CodetoReportLines_Node0 -- Yes --> N_AddC4CodetoReportLines_Node0_action N_AddC4CodetoReportLines_Node0_action --> E_AddC4CodetoReportLines S_AddC4CodetoReportLines --> N_AddC4CodetoReportLines_Node0 N_AddC4CodetoReportLines_Node0 -- No --> E_AddC4CodetoReportLines
File: GCX015.cbl
GIVEN:
A C4 code message has been constructed
WHEN:
The system adds the C4 message to the report
THEN:
- The c4 code message is added to the report lines
- The line counter is incremented
β Consolidated Acceptance Criteria
- The system stores the C4 message for logging → the C4 code log message is stored in the K1 message array and the counter is incremented
- The system stores the C4 message for logging → the work log message should be moved to HOLD-K1-MESSAGE array at the current K1-CNT position, K1-CNT should be incremented, and WS-HOLD-N1009 should be cleared to spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_StoreC4MessageinArray(["Start Step"])
E_StoreC4MessageinArray(["End Step"])
N_StoreC4MessageinArray_Node0{"The system stores the C4 message
for logging"}:::decision N_StoreC4MessageinArray_Node0_action["The C4 code log message is stored
in the K1 message array and the
counter is incremented"]:::main N_StoreC4MessageinArray_Node0 -- Yes --> N_StoreC4MessageinArray_Node0_action N_StoreC4MessageinArray_Node0_action --> E_StoreC4MessageinArray S_StoreC4MessageinArray --> N_StoreC4MessageinArray_Node0 N_StoreC4MessageinArray_Node1{"The system stores the C4 message
for logging"}:::decision N_StoreC4MessageinArray_Node1_action["The work log message should be
moved to HOLD-K1-MESSAGE array at
the current K1-CNT position, K1-CNT
should be incremented, and
WS-HOLD-N1009 should be cleared to
spaces"]:::main N_StoreC4MessageinArray_Node1 -- Yes --> N_StoreC4MessageinArray_Node1_action N_StoreC4MessageinArray_Node1_action --> E_StoreC4MessageinArray N_StoreC4MessageinArray_Node0 -- No --> N_StoreC4MessageinArray_Node1 N_StoreC4MessageinArray_Node1 -- No --> E_StoreC4MessageinArray
for logging"}:::decision N_StoreC4MessageinArray_Node0_action["The C4 code log message is stored
in the K1 message array and the
counter is incremented"]:::main N_StoreC4MessageinArray_Node0 -- Yes --> N_StoreC4MessageinArray_Node0_action N_StoreC4MessageinArray_Node0_action --> E_StoreC4MessageinArray S_StoreC4MessageinArray --> N_StoreC4MessageinArray_Node0 N_StoreC4MessageinArray_Node1{"The system stores the C4 message
for logging"}:::decision N_StoreC4MessageinArray_Node1_action["The work log message should be
moved to HOLD-K1-MESSAGE array at
the current K1-CNT position, K1-CNT
should be incremented, and
WS-HOLD-N1009 should be cleared to
spaces"]:::main N_StoreC4MessageinArray_Node1 -- Yes --> N_StoreC4MessageinArray_Node1_action N_StoreC4MessageinArray_Node1_action --> E_StoreC4MessageinArray N_StoreC4MessageinArray_Node0 -- No --> N_StoreC4MessageinArray_Node1 N_StoreC4MessageinArray_Node1 -- No --> E_StoreC4MessageinArray
File: GCX015.cbl
GIVEN:
A C4 code message has been added to the report
WHEN:
The system stores the C4 message for logging
THEN:
- The c4 code log message is stored in the k1 message array
- The counter is incremented
File: GCX015.cbl
GIVEN:
A C4 code message has been added to the report
WHEN:
The system stores the C4 message for logging
THEN:
The work log message should be moved to HOLD-K1-MESSAGE array at the current K1-CNT position, K1-CNT should be incremented, and WS-HOLD-N1009 should be cleared to spaces
β Consolidated Acceptance Criteria
- The system clears the C4 code holder → the C4 code holder is set to spaces to prevent reuse in subsequent processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ClearC4CodeHolder(["Start Step"])
E_ClearC4CodeHolder(["End Step"])
N_ClearC4CodeHolder_Node0{"The system clears the C4 code
holder"}:::decision N_ClearC4CodeHolder_Node0_action["The C4 code holder is set to spaces
to prevent reuse in subsequent
processing"]:::main N_ClearC4CodeHolder_Node0 -- Yes --> N_ClearC4CodeHolder_Node0_action N_ClearC4CodeHolder_Node0_action --> E_ClearC4CodeHolder S_ClearC4CodeHolder --> N_ClearC4CodeHolder_Node0 N_ClearC4CodeHolder_Node0 -- No --> E_ClearC4CodeHolder
holder"}:::decision N_ClearC4CodeHolder_Node0_action["The C4 code holder is set to spaces
to prevent reuse in subsequent
processing"]:::main N_ClearC4CodeHolder_Node0 -- Yes --> N_ClearC4CodeHolder_Node0_action N_ClearC4CodeHolder_Node0_action --> E_ClearC4CodeHolder S_ClearC4CodeHolder --> N_ClearC4CodeHolder_Node0 N_ClearC4CodeHolder_Node0 -- No --> E_ClearC4CodeHolder
File: GCX015.cbl
GIVEN:
C4 code processing has been completed for message 242
WHEN:
The system clears the C4 code holder
THEN:
The C4 code holder is set to spaces to prevent reuse in subsequent processing
β Consolidated Acceptance Criteria
- The M10 table reference number equals 'TRAINCPRSTESTTRAIN0000000000' → the system performs special check processing, clears the message array, sets end processing flag, and terminates current message processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TestTrainMessageTRAINCPRSTESTTRAIN0000000000(["Start Step"])
E_TestTrainMessageTRAINCPRSTESTTRAIN0000000000(["End Step"])
N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0{"The M10 table reference number
equals TRAINCPRSTESTTRAIN0000000000"}:::decision N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0_action["The system performs special check
processing, clears the message
array, sets end processing flag, and
terminates current message
processing"]:::main N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0 -- Yes --> N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0_action N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0_action --> E_TestTrainMessageTRAINCPRSTESTTRAIN0000000000 S_TestTrainMessageTRAINCPRSTESTTRAIN0000000000 --> N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0 N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0 -- No --> E_TestTrainMessageTRAINCPRSTESTTRAIN0000000000
equals TRAINCPRSTESTTRAIN0000000000"}:::decision N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0_action["The system performs special check
processing, clears the message
array, sets end processing flag, and
terminates current message
processing"]:::main N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0 -- Yes --> N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0_action N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0_action --> E_TestTrainMessageTRAINCPRSTESTTRAIN0000000000 S_TestTrainMessageTRAINCPRSTESTTRAIN0000000000 --> N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0 N_TestTrainMessageTRAINCPRSTESTTRAIN0000000000_Node0 -- No --> E_TestTrainMessageTRAINCPRSTESTTRAIN0000000000
File: GCX015.cbl
GIVEN:
A message queue entry contains an M10 segment with table ID 'M10'
WHEN:
The M10 table reference number equals 'TRAINCPRSTESTTRAIN0000000000'
THEN:
The system performs special check processing, clears the message array, sets end processing flag, and terminates current message processing
β Consolidated Acceptance Criteria
- The M10 table reference number equals 'CARGOCPRS940000000000' → the system performs special check processing, clears the message array, sets end processing flag, and terminates current message processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TestCargoMessageCARGOCPRS940000000000(["Start Step"])
E_TestCargoMessageCARGOCPRS940000000000(["End Step"])
N_TestCargoMessageCARGOCPRS940000000000_Node0{"The M10 table reference number
equals CARGOCPRS940000000000"}:::decision N_TestCargoMessageCARGOCPRS940000000000_Node0_action["The system performs special check
processing, clears the message
array, sets end processing flag, and
terminates current message
processing"]:::main N_TestCargoMessageCARGOCPRS940000000000_Node0 -- Yes --> N_TestCargoMessageCARGOCPRS940000000000_Node0_action N_TestCargoMessageCARGOCPRS940000000000_Node0_action --> E_TestCargoMessageCARGOCPRS940000000000 S_TestCargoMessageCARGOCPRS940000000000 --> N_TestCargoMessageCARGOCPRS940000000000_Node0 N_TestCargoMessageCARGOCPRS940000000000_Node0 -- No --> E_TestCargoMessageCARGOCPRS940000000000
equals CARGOCPRS940000000000"}:::decision N_TestCargoMessageCARGOCPRS940000000000_Node0_action["The system performs special check
processing, clears the message
array, sets end processing flag, and
terminates current message
processing"]:::main N_TestCargoMessageCARGOCPRS940000000000_Node0 -- Yes --> N_TestCargoMessageCARGOCPRS940000000000_Node0_action N_TestCargoMessageCARGOCPRS940000000000_Node0_action --> E_TestCargoMessageCARGOCPRS940000000000 S_TestCargoMessageCARGOCPRS940000000000 --> N_TestCargoMessageCARGOCPRS940000000000_Node0 N_TestCargoMessageCARGOCPRS940000000000_Node0 -- No --> E_TestCargoMessageCARGOCPRS940000000000
File: GCX015.cbl
GIVEN:
A message queue entry contains an M10 segment with table ID 'M10'
WHEN:
The M10 table reference number equals 'CARGOCPRS940000000000'
THEN:
The system performs special check processing, clears the message array, sets end processing flag, and terminates current message processing
β Consolidated Acceptance Criteria
- The manifest type code is 'P', 'H', or 'S' → the system updates the corresponding acknowledgment timestamp field in the T1 administrative table with current machine date, century, and time
- The manifest type code in the M10 segment is 'P', 'H', or 'S' → the system should update the corresponding administrative table timestamp field (T1-309-ACK for 'P', T1-353-ACK for 'H', T1-358-ACK for 'S') with current machine date, century, and time
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdateAdministrativeTimestamps(["Start Step"])
E_UpdateAdministrativeTimestamps(["End Step"])
N_UpdateAdministrativeTimestamps_Node0{"The manifest type code is P , H ,
or S"}:::decision N_UpdateAdministrativeTimestamps_Node0_action["The system updates the
corresponding acknowledgment
timestamp field in the T1
administrative table with current
machine date, century, and time"]:::main N_UpdateAdministrativeTimestamps_Node0 -- Yes --> N_UpdateAdministrativeTimestamps_Node0_action N_UpdateAdministrativeTimestamps_Node0_action --> E_UpdateAdministrativeTimestamps S_UpdateAdministrativeTimestamps --> N_UpdateAdministrativeTimestamps_Node0 N_UpdateAdministrativeTimestamps_Node1{"The manifest type code in the M10
segment is P , H , or S"}:::decision N_UpdateAdministrativeTimestamps_Node1_action["The system should update the
corresponding administrative table
timestamp field T1-309-ACK for P ,
T1-353-ACK for H , T1-358-ACK for S
with current machine date, century,
and time"]:::main N_UpdateAdministrativeTimestamps_Node1 -- Yes --> N_UpdateAdministrativeTimestamps_Node1_action N_UpdateAdministrativeTimestamps_Node1_action --> E_UpdateAdministrativeTimestamps N_UpdateAdministrativeTimestamps_Node0 -- No --> N_UpdateAdministrativeTimestamps_Node1 N_UpdateAdministrativeTimestamps_Node1 -- No --> E_UpdateAdministrativeTimestamps
or S"}:::decision N_UpdateAdministrativeTimestamps_Node0_action["The system updates the
corresponding acknowledgment
timestamp field in the T1
administrative table with current
machine date, century, and time"]:::main N_UpdateAdministrativeTimestamps_Node0 -- Yes --> N_UpdateAdministrativeTimestamps_Node0_action N_UpdateAdministrativeTimestamps_Node0_action --> E_UpdateAdministrativeTimestamps S_UpdateAdministrativeTimestamps --> N_UpdateAdministrativeTimestamps_Node0 N_UpdateAdministrativeTimestamps_Node1{"The manifest type code in the M10
segment is P , H , or S"}:::decision N_UpdateAdministrativeTimestamps_Node1_action["The system should update the
corresponding administrative table
timestamp field T1-309-ACK for P ,
T1-353-ACK for H , T1-358-ACK for S
with current machine date, century,
and time"]:::main N_UpdateAdministrativeTimestamps_Node1 -- Yes --> N_UpdateAdministrativeTimestamps_Node1_action N_UpdateAdministrativeTimestamps_Node1_action --> E_UpdateAdministrativeTimestamps N_UpdateAdministrativeTimestamps_Node0 -- No --> N_UpdateAdministrativeTimestamps_Node1 N_UpdateAdministrativeTimestamps_Node1 -- No --> E_UpdateAdministrativeTimestamps
File: GCX015.cbl
GIVEN:
A test message has been identified with manifest type code
WHEN:
The manifest type code is 'P', 'H', or 'S'
THEN:
The system updates the corresponding acknowledgment timestamp field in the T1 administrative table with current machine date, century, and time
File: GCX015.cbl
GIVEN:
A special test message has been identified with reference number 'TRAINCPRSTESTTRAIN0000000000' or 'CARGOCPRS940000000000'
WHEN:
The manifest type code in the M10 segment is 'P', 'H', or 'S'
THEN:
The system should update the corresponding administrative table timestamp field (T1-309-ACK for 'P', T1-353-ACK for 'H', T1-358-ACK for 'S') with current machine date, century, and time
β Consolidated Acceptance Criteria
- The special check processing is completed → the system moves spaces to the message array and sets the end found flag to true
- The special check processing is executed → the system should move spaces to the MQS-MSG-ARRAY to clear all message data
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ClearMessageArray(["Start Step"])
E_ClearMessageArray(["End Step"])
N_ClearMessageArray_Node0{"The special check processing is
completed"}:::decision N_ClearMessageArray_Node0_action["The system moves spaces to the
message array and sets the end found
flag to true"]:::main N_ClearMessageArray_Node0 -- Yes --> N_ClearMessageArray_Node0_action N_ClearMessageArray_Node0_action --> E_ClearMessageArray S_ClearMessageArray --> N_ClearMessageArray_Node0 N_ClearMessageArray_Node1{"The special check processing is
executed"}:::decision N_ClearMessageArray_Node1_action["The system should move spaces to
the MQS-MSG-ARRAY to clear all
message data"]:::main N_ClearMessageArray_Node1 -- Yes --> N_ClearMessageArray_Node1_action N_ClearMessageArray_Node1_action --> E_ClearMessageArray N_ClearMessageArray_Node0 -- No --> N_ClearMessageArray_Node1 N_ClearMessageArray_Node1 -- No --> E_ClearMessageArray
completed"}:::decision N_ClearMessageArray_Node0_action["The system moves spaces to the
message array and sets the end found
flag to true"]:::main N_ClearMessageArray_Node0 -- Yes --> N_ClearMessageArray_Node0_action N_ClearMessageArray_Node0_action --> E_ClearMessageArray S_ClearMessageArray --> N_ClearMessageArray_Node0 N_ClearMessageArray_Node1{"The special check processing is
executed"}:::decision N_ClearMessageArray_Node1_action["The system should move spaces to
the MQS-MSG-ARRAY to clear all
message data"]:::main N_ClearMessageArray_Node1 -- Yes --> N_ClearMessageArray_Node1_action N_ClearMessageArray_Node1_action --> E_ClearMessageArray N_ClearMessageArray_Node0 -- No --> N_ClearMessageArray_Node1 N_ClearMessageArray_Node1 -- No --> E_ClearMessageArray
File: GCX015.cbl
GIVEN:
A test message has been processed and administrative timestamps updated
WHEN:
The special check processing is completed
THEN:
- The system moves spaces to the message array
- Sets the end found flag to true
File: GCX015.cbl
GIVEN:
A special test message has been detected and administrative timestamps have been updated
WHEN:
The special check processing is executed
THEN:
The system should move spaces to the MQS-MSG-ARRAY to clear all message data
β Consolidated Acceptance Criteria
- The M10 table reference number is not 'TRAINCPRSTESTTRAIN0000000000' and not 'CARGOCPRS940000000000' → the system proceeds with normal M10 segment processing workflow
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ContinueNormalProcessing(["Start Step"])
E_ContinueNormalProcessing(["End Step"])
N_ContinueNormalProcessing_Node0{"The M10 table reference number is
not TRAINCPRSTESTTRAIN0000000000 and
not CARGOCPRS940000000000"}:::decision N_ContinueNormalProcessing_Node0_action["The system proceeds with normal M10
segment processing workflow"]:::main N_ContinueNormalProcessing_Node0 -- Yes --> N_ContinueNormalProcessing_Node0_action N_ContinueNormalProcessing_Node0_action --> E_ContinueNormalProcessing S_ContinueNormalProcessing --> N_ContinueNormalProcessing_Node0 N_ContinueNormalProcessing_Node0 -- No --> E_ContinueNormalProcessing
not TRAINCPRSTESTTRAIN0000000000 and
not CARGOCPRS940000000000"}:::decision N_ContinueNormalProcessing_Node0_action["The system proceeds with normal M10
segment processing workflow"]:::main N_ContinueNormalProcessing_Node0 -- Yes --> N_ContinueNormalProcessing_Node0_action N_ContinueNormalProcessing_Node0_action --> E_ContinueNormalProcessing S_ContinueNormalProcessing --> N_ContinueNormalProcessing_Node0 N_ContinueNormalProcessing_Node0 -- No --> E_ContinueNormalProcessing
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A message queue entry contains an M10 segment with table ID 'M10'
WHEN:
The M10 table reference number is not 'TRAINCPRSTESTTRAIN0000000000' and not 'CARGOCPRS940000000000'
THEN:
The system proceeds with normal M10 segment processing workflow
β Consolidated Acceptance Criteria
- The system checks for M10 segment presence using the M10 segment found flag → if M10 segment is not found, generate error message 'M10 SEGMENT NOT FOUND ON 355 TRANSACTION' and increment line counter
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_M10SegmentFound(["Start Step"])
E_M10SegmentFound(["End Step"])
N_M10SegmentFound_Node0{"The system checks for M10 segment
presence using the M10 segment found
flag"}:::decision N_M10SegmentFound_Node0_action["If M10 segment is not found,
generate error message M10 SEGMENT
NOT FOUND ON 355 TRANSACTION and
increment line counter"]:::main N_M10SegmentFound_Node0 -- Yes --> N_M10SegmentFound_Node0_action N_M10SegmentFound_Node0_action --> E_M10SegmentFound S_M10SegmentFound --> N_M10SegmentFound_Node0 N_M10SegmentFound_Node0 -- No --> E_M10SegmentFound
presence using the M10 segment found
flag"}:::decision N_M10SegmentFound_Node0_action["If M10 segment is not found,
generate error message M10 SEGMENT
NOT FOUND ON 355 TRANSACTION and
increment line counter"]:::main N_M10SegmentFound_Node0 -- Yes --> N_M10SegmentFound_Node0_action N_M10SegmentFound_Node0_action --> E_M10SegmentFound S_M10SegmentFound --> N_M10SegmentFound_Node0 N_M10SegmentFound_Node0 -- No --> E_M10SegmentFound
File: GCX015.cbl
GIVEN:
A message is being processed for segment validation
WHEN:
The system checks for M10 segment presence using the M10 segment found flag
THEN:
If M10 segment is not found, generate error message 'M10 SEGMENT NOT FOUND ON 355 TRANSACTION' and increment line counter
β Consolidated Acceptance Criteria
- The system checks for P4 segment presence using the P4 segment found flag → if P4 segment is not found, generate error message 'P4 SEGMENT NOT FOUND ON 355 TRANSACTION' and increment line counter
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_P4SegmentFound(["Start Step"])
E_P4SegmentFound(["End Step"])
N_P4SegmentFound_Node0{"The system checks for P4 segment
presence using the P4 segment found
flag"}:::decision N_P4SegmentFound_Node0_action["If P4 segment is not found,
generate error message P4 SEGMENT
NOT FOUND ON 355 TRANSACTION and
increment line counter"]:::main N_P4SegmentFound_Node0 -- Yes --> N_P4SegmentFound_Node0_action N_P4SegmentFound_Node0_action --> E_P4SegmentFound S_P4SegmentFound --> N_P4SegmentFound_Node0 N_P4SegmentFound_Node0 -- No --> E_P4SegmentFound
presence using the P4 segment found
flag"}:::decision N_P4SegmentFound_Node0_action["If P4 segment is not found,
generate error message P4 SEGMENT
NOT FOUND ON 355 TRANSACTION and
increment line counter"]:::main N_P4SegmentFound_Node0 -- Yes --> N_P4SegmentFound_Node0_action N_P4SegmentFound_Node0_action --> E_P4SegmentFound S_P4SegmentFound --> N_P4SegmentFound_Node0 N_P4SegmentFound_Node0 -- No --> E_P4SegmentFound
File: GCX015.cbl
GIVEN:
A message is being processed for segment validation and M10 validation is complete
WHEN:
The system checks for P4 segment presence using the P4 segment found flag
THEN:
If P4 segment is not found, generate error message 'P4 SEGMENT NOT FOUND ON 355 TRANSACTION' and increment line counter
β Consolidated Acceptance Criteria
- The system checks for K3 segment presence using the K3 segment found flag → if K3 segment is not found, generate error message 'K3 SEGMENT NOT FOUND ON 355 TRANSACTION' and increment line counter
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_K3SegmentFound(["Start Step"])
E_K3SegmentFound(["End Step"])
N_K3SegmentFound_Node0{"The system checks for K3 segment
presence using the K3 segment found
flag"}:::decision N_K3SegmentFound_Node0_action["If K3 segment is not found,
generate error message K3 SEGMENT
NOT FOUND ON 355 TRANSACTION and
increment line counter"]:::main N_K3SegmentFound_Node0 -- Yes --> N_K3SegmentFound_Node0_action N_K3SegmentFound_Node0_action --> E_K3SegmentFound S_K3SegmentFound --> N_K3SegmentFound_Node0 N_K3SegmentFound_Node0 -- No --> E_K3SegmentFound
presence using the K3 segment found
flag"}:::decision N_K3SegmentFound_Node0_action["If K3 segment is not found,
generate error message K3 SEGMENT
NOT FOUND ON 355 TRANSACTION and
increment line counter"]:::main N_K3SegmentFound_Node0 -- Yes --> N_K3SegmentFound_Node0_action N_K3SegmentFound_Node0_action --> E_K3SegmentFound S_K3SegmentFound --> N_K3SegmentFound_Node0 N_K3SegmentFound_Node0 -- No --> E_K3SegmentFound
File: GCX015.cbl
GIVEN:
A message is being processed for segment validation and M10 and P4 validations are complete
WHEN:
The system checks for K3 segment presence using the K3 segment found flag
THEN:
If K3 segment is not found, generate error message 'K3 SEGMENT NOT FOUND ON 355 TRANSACTION' and increment line counter
β Consolidated Acceptance Criteria
- The system processes the missing K3 segment condition → create a default K3 segment by setting K3 segment found flag to true, populate K3-03-DATE with current machine date, populate K3-04-TIME with current machine time first 6 positions, and move the constructed K3 data to K3-SEGMENT
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CreateDefaultK3SegmentwithCurrentDateTime(["Start Step"])
E_CreateDefaultK3SegmentwithCurrentDateTime(["End Step"])
N_CreateDefaultK3SegmentwithCurrentDateTime_Node0{"The system processes the missing K3
segment condition"}:::decision N_CreateDefaultK3SegmentwithCurrentDateTime_Node0_action["Create a default K3 segment by
setting K3 segment found flag to
true, populate K3-03-DATE with
current machine date, populate
K3-04-TIME with current machine time
first 6 positions, and move the
constructed K3 data to K3-SEGMENT"]:::main N_CreateDefaultK3SegmentwithCurrentDateTime_Node0 -- Yes --> N_CreateDefaultK3SegmentwithCurrentDateTime_Node0_action N_CreateDefaultK3SegmentwithCurrentDateTime_Node0_action --> E_CreateDefaultK3SegmentwithCurrentDateTime S_CreateDefaultK3SegmentwithCurrentDateTime --> N_CreateDefaultK3SegmentwithCurrentDateTime_Node0 N_CreateDefaultK3SegmentwithCurrentDateTime_Node0 -- No --> E_CreateDefaultK3SegmentwithCurrentDateTime
segment condition"}:::decision N_CreateDefaultK3SegmentwithCurrentDateTime_Node0_action["Create a default K3 segment by
setting K3 segment found flag to
true, populate K3-03-DATE with
current machine date, populate
K3-04-TIME with current machine time
first 6 positions, and move the
constructed K3 data to K3-SEGMENT"]:::main N_CreateDefaultK3SegmentwithCurrentDateTime_Node0 -- Yes --> N_CreateDefaultK3SegmentwithCurrentDateTime_Node0_action N_CreateDefaultK3SegmentwithCurrentDateTime_Node0_action --> E_CreateDefaultK3SegmentwithCurrentDateTime S_CreateDefaultK3SegmentwithCurrentDateTime --> N_CreateDefaultK3SegmentwithCurrentDateTime_Node0 N_CreateDefaultK3SegmentwithCurrentDateTime_Node0 -- No --> E_CreateDefaultK3SegmentwithCurrentDateTime
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
K3 segment is not found in the message
WHEN:
The system processes the missing K3 segment condition
THEN:
Create a default K3 segment by setting K3 segment found flag to true, populate K3-03-DATE with current machine date, populate K3-04-TIME with current machine time first 6 positions, and move the constructed K3 data to K3-SEGMENT
β Consolidated Acceptance Criteria
- The system processes the default K3 segment for status determination → if K3 total reject count equals zero and K3 total accept count is greater than zero, set ACK status, else if both counts are zero, set ACK status and add warning message 'USCS K3 RECORD HAS ZERO COUNTS' to hold messages and increment K1 counter, else set ERROR status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetFinalStatusBasedonDefaultK3(["Start Step"])
E_SetFinalStatusBasedonDefaultK3(["End Step"])
N_SetFinalStatusBasedonDefaultK3_Node0{"The system processes the default K3
segment for status determination"}:::decision N_SetFinalStatusBasedonDefaultK3_Node0_action["If K3 total reject count equals
zero and K3 total accept count is
greater than zero, set ACK status,
else if both counts are zero, set
ACK status and add warning message
USCS K3 RECORD HAS ZERO COUNTS to
hold messages and increment K1
counter, else set ERROR status"]:::exclusion N_SetFinalStatusBasedonDefaultK3_Node0 -- Yes -->|Alternative| N_SetFinalStatusBasedonDefaultK3_Node0_action N_SetFinalStatusBasedonDefaultK3_Node0_action --> E_SetFinalStatusBasedonDefaultK3 S_SetFinalStatusBasedonDefaultK3 --> N_SetFinalStatusBasedonDefaultK3_Node0 N_SetFinalStatusBasedonDefaultK3_Node0 -- No --> E_SetFinalStatusBasedonDefaultK3
segment for status determination"}:::decision N_SetFinalStatusBasedonDefaultK3_Node0_action["If K3 total reject count equals
zero and K3 total accept count is
greater than zero, set ACK status,
else if both counts are zero, set
ACK status and add warning message
USCS K3 RECORD HAS ZERO COUNTS to
hold messages and increment K1
counter, else set ERROR status"]:::exclusion N_SetFinalStatusBasedonDefaultK3_Node0 -- Yes -->|Alternative| N_SetFinalStatusBasedonDefaultK3_Node0_action N_SetFinalStatusBasedonDefaultK3_Node0_action --> E_SetFinalStatusBasedonDefaultK3 S_SetFinalStatusBasedonDefaultK3 --> N_SetFinalStatusBasedonDefaultK3_Node0 N_SetFinalStatusBasedonDefaultK3_Node0 -- No --> E_SetFinalStatusBasedonDefaultK3
File: GCX015.cbl
GIVEN:
A default K3 segment has been created with current date and time
WHEN:
The system processes the default K3 segment for status determination
THEN:
- If k3 total reject count equals zero
- K3 total accept count is greater than zero, set ack status, else if both counts are zero, set ack status
- Add warning message 'uscs k3 record has zero counts' to hold messages
- Increment k1 counter, else set error status
β Consolidated Acceptance Criteria
- The total rejection count (K3-11-TOTAL-REJECT) is greater than zero → set the status to ERROR and generate error processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TotalReject0(["Start Step"])
E_TotalReject0(["End Step"])
N_TotalReject0_Node0{"The total rejection count
K3-11-TOTAL-REJECT is greater than
zero"}:::decision N_TotalReject0_Node0_action["Set the status to ERROR and
generate error processing"]:::main N_TotalReject0_Node0 -- Yes --> N_TotalReject0_Node0_action N_TotalReject0_Node0_action --> E_TotalReject0 S_TotalReject0 --> N_TotalReject0_Node0 N_TotalReject0_Node0 -- No --> E_TotalReject0
K3-11-TOTAL-REJECT is greater than
zero"}:::decision N_TotalReject0_Node0_action["Set the status to ERROR and
generate error processing"]:::main N_TotalReject0_Node0 -- Yes --> N_TotalReject0_Node0_action N_TotalReject0_Node0_action --> E_TotalReject0 S_TotalReject0 --> N_TotalReject0_Node0 N_TotalReject0_Node0 -- No --> E_TotalReject0
File: GCX015.cbl
GIVEN:
A K3 segment has been received with rejection and acceptance counts
WHEN:
The total rejection count (K3-11-TOTAL-REJECT) is greater than zero
THEN:
- Set the status to error
- Generate error processing
β Consolidated Acceptance Criteria
- The total acceptance count (K3-12-TOTAL-ACCEPT) is greater than zero → proceed to evaluate train-specific status conditions for final status determination
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TotalAccept0(["Start Step"])
E_TotalAccept0(["End Step"])
N_TotalAccept0_Node0{"The total acceptance count
K3-12-TOTAL-ACCEPT is greater than
zero"}:::decision N_TotalAccept0_Node0_action["Proceed to evaluate train-specific
status conditions for final status
determination"]:::main N_TotalAccept0_Node0 -- Yes --> N_TotalAccept0_Node0_action N_TotalAccept0_Node0_action --> E_TotalAccept0 S_TotalAccept0 --> N_TotalAccept0_Node0 N_TotalAccept0_Node0 -- No --> E_TotalAccept0
K3-12-TOTAL-ACCEPT is greater than
zero"}:::decision N_TotalAccept0_Node0_action["Proceed to evaluate train-specific
status conditions for final status
determination"]:::main N_TotalAccept0_Node0 -- Yes --> N_TotalAccept0_Node0_action N_TotalAccept0_Node0_action --> E_TotalAccept0 S_TotalAccept0 --> N_TotalAccept0_Node0 N_TotalAccept0_Node0 -- No --> E_TotalAccept0
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejection counts
WHEN:
The total acceptance count (K3-12-TOTAL-ACCEPT) is greater than zero
THEN:
Proceed to evaluate train-specific status conditions for final status determination
β Consolidated Acceptance Criteria
- The total acceptance count (K3-12-TOTAL-ACCEPT) is also zero → log warning message 'USCS K3 RECORD HAS ZERO COUNTS' and set ACK status
- The system processes the transaction → a warning message 'USCS K3 RECORD HAS ZERO COUNTS' is logged and ACK status is still assigned
- The K3 total accept count is also zero → the system logs 'USCS K3 RECORD HAS ZERO COUNTS' message and sets status to ACK
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LogZeroCountsMessage(["Start Step"])
E_LogZeroCountsMessage(["End Step"])
N_LogZeroCountsMessage_Node0{"The total acceptance count
K3-12-TOTAL-ACCEPT is also zero"}:::decision N_LogZeroCountsMessage_Node0_action["Log warning message USCS K3 RECORD
HAS ZERO COUNTS and set ACK status"]:::main N_LogZeroCountsMessage_Node0 -- Yes --> N_LogZeroCountsMessage_Node0_action N_LogZeroCountsMessage_Node0_action --> E_LogZeroCountsMessage S_LogZeroCountsMessage --> N_LogZeroCountsMessage_Node0 N_LogZeroCountsMessage_Node1{"The system processes the
transaction"}:::decision N_LogZeroCountsMessage_Node1_action["A warning message USCS K3 RECORD
HAS ZERO COUNTS is logged and ACK
status is still assigned"]:::main N_LogZeroCountsMessage_Node1 -- Yes --> N_LogZeroCountsMessage_Node1_action N_LogZeroCountsMessage_Node1_action --> E_LogZeroCountsMessage N_LogZeroCountsMessage_Node0 -- No --> N_LogZeroCountsMessage_Node1 N_LogZeroCountsMessage_Node2{"The K3 total accept count is also
zero"}:::decision N_LogZeroCountsMessage_Node2_action["The system logs USCS K3 RECORD HAS
ZERO COUNTS message and sets status
to ACK"]:::main N_LogZeroCountsMessage_Node2 -- Yes --> N_LogZeroCountsMessage_Node2_action N_LogZeroCountsMessage_Node2_action --> E_LogZeroCountsMessage N_LogZeroCountsMessage_Node1 -- No --> N_LogZeroCountsMessage_Node2 N_LogZeroCountsMessage_Node2 -- No --> E_LogZeroCountsMessage
K3-12-TOTAL-ACCEPT is also zero"}:::decision N_LogZeroCountsMessage_Node0_action["Log warning message USCS K3 RECORD
HAS ZERO COUNTS and set ACK status"]:::main N_LogZeroCountsMessage_Node0 -- Yes --> N_LogZeroCountsMessage_Node0_action N_LogZeroCountsMessage_Node0_action --> E_LogZeroCountsMessage S_LogZeroCountsMessage --> N_LogZeroCountsMessage_Node0 N_LogZeroCountsMessage_Node1{"The system processes the
transaction"}:::decision N_LogZeroCountsMessage_Node1_action["A warning message USCS K3 RECORD
HAS ZERO COUNTS is logged and ACK
status is still assigned"]:::main N_LogZeroCountsMessage_Node1 -- Yes --> N_LogZeroCountsMessage_Node1_action N_LogZeroCountsMessage_Node1_action --> E_LogZeroCountsMessage N_LogZeroCountsMessage_Node0 -- No --> N_LogZeroCountsMessage_Node1 N_LogZeroCountsMessage_Node2{"The K3 total accept count is also
zero"}:::decision N_LogZeroCountsMessage_Node2_action["The system logs USCS K3 RECORD HAS
ZERO COUNTS message and sets status
to ACK"]:::main N_LogZeroCountsMessage_Node2 -- Yes --> N_LogZeroCountsMessage_Node2_action N_LogZeroCountsMessage_Node2_action --> E_LogZeroCountsMessage N_LogZeroCountsMessage_Node1 -- No --> N_LogZeroCountsMessage_Node2 N_LogZeroCountsMessage_Node2 -- No --> E_LogZeroCountsMessage
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejection counts
WHEN:
The total acceptance count (K3-12-TOTAL-ACCEPT) is also zero
THEN:
Log warning message 'USCS K3 RECORD HAS ZERO COUNTS' and set ACK status
File: GCX015.cbl
GIVEN:
A K3 segment has zero total rejects and zero total accepts
WHEN:
The system processes the transaction
THEN:
- A warning message 'uscs k3 record has zero counts' is logged
- Ack status is still assigned
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejection records
WHEN:
The K3 total accept count is also zero
THEN:
- The system logs 'uscs k3 record has zero counts' message
- Sets status to ack
β Consolidated Acceptance Criteria
- The train status indicates PRE-ARRIVED condition (GCWTL-PRE-ARRIVED is true) → set the processing status to PRE-ARRIVAL
- The train status indicates PRE-ARRIVED condition → the system should set PRE-ARRIVAL status for the train
- The system sets the final processing status → the status is set to PRE-ARRIVAL to indicate successful pre-clearance processing
- The train current status is PRE-ARRIVED (GCWTL-PRE-ARRIVED is true) → the system sets the working status to PRE-ARRIVAL-STATUS
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetPREARRIVALStatus(["Start Step"])
E_SetPREARRIVALStatus(["End Step"])
N_SetPREARRIVALStatus_Node0{"The train status indicates
PRE-ARRIVED condition
GCWTL-PRE-ARRIVED is true"}:::decision N_SetPREARRIVALStatus_Node0_action["Set the processing status to
PRE-ARRIVAL"]:::main N_SetPREARRIVALStatus_Node0 -- Yes --> N_SetPREARRIVALStatus_Node0_action N_SetPREARRIVALStatus_Node0_action --> E_SetPREARRIVALStatus S_SetPREARRIVALStatus --> N_SetPREARRIVALStatus_Node0 N_SetPREARRIVALStatus_Node1{"The train status indicates
PRE-ARRIVED condition"}:::decision N_SetPREARRIVALStatus_Node1_action["The system should set PRE-ARRIVAL
status for the train"]:::main N_SetPREARRIVALStatus_Node1 -- Yes --> N_SetPREARRIVALStatus_Node1_action N_SetPREARRIVALStatus_Node1_action --> E_SetPREARRIVALStatus N_SetPREARRIVALStatus_Node0 -- No --> N_SetPREARRIVALStatus_Node1 N_SetPREARRIVALStatus_Node2{"The system sets the final
processing status"}:::decision N_SetPREARRIVALStatus_Node2_action["The status is set to PRE-ARRIVAL to
indicate successful pre-clearance
processing"]:::main N_SetPREARRIVALStatus_Node2 -- Yes --> N_SetPREARRIVALStatus_Node2_action N_SetPREARRIVALStatus_Node2_action --> E_SetPREARRIVALStatus N_SetPREARRIVALStatus_Node1 -- No --> N_SetPREARRIVALStatus_Node2 N_SetPREARRIVALStatus_Node3{"The train current status is
PRE-ARRIVED GCWTL-PRE-ARRIVED is
true"}:::decision N_SetPREARRIVALStatus_Node3_action["The system sets the working status
to PRE-ARRIVAL-STATUS"]:::main N_SetPREARRIVALStatus_Node3 -- Yes --> N_SetPREARRIVALStatus_Node3_action N_SetPREARRIVALStatus_Node3_action --> E_SetPREARRIVALStatus N_SetPREARRIVALStatus_Node2 -- No --> N_SetPREARRIVALStatus_Node3 N_SetPREARRIVALStatus_Node3 -- No --> E_SetPREARRIVALStatus
PRE-ARRIVED condition
GCWTL-PRE-ARRIVED is true"}:::decision N_SetPREARRIVALStatus_Node0_action["Set the processing status to
PRE-ARRIVAL"]:::main N_SetPREARRIVALStatus_Node0 -- Yes --> N_SetPREARRIVALStatus_Node0_action N_SetPREARRIVALStatus_Node0_action --> E_SetPREARRIVALStatus S_SetPREARRIVALStatus --> N_SetPREARRIVALStatus_Node0 N_SetPREARRIVALStatus_Node1{"The train status indicates
PRE-ARRIVED condition"}:::decision N_SetPREARRIVALStatus_Node1_action["The system should set PRE-ARRIVAL
status for the train"]:::main N_SetPREARRIVALStatus_Node1 -- Yes --> N_SetPREARRIVALStatus_Node1_action N_SetPREARRIVALStatus_Node1_action --> E_SetPREARRIVALStatus N_SetPREARRIVALStatus_Node0 -- No --> N_SetPREARRIVALStatus_Node1 N_SetPREARRIVALStatus_Node2{"The system sets the final
processing status"}:::decision N_SetPREARRIVALStatus_Node2_action["The status is set to PRE-ARRIVAL to
indicate successful pre-clearance
processing"]:::main N_SetPREARRIVALStatus_Node2 -- Yes --> N_SetPREARRIVALStatus_Node2_action N_SetPREARRIVALStatus_Node2_action --> E_SetPREARRIVALStatus N_SetPREARRIVALStatus_Node1 -- No --> N_SetPREARRIVALStatus_Node2 N_SetPREARRIVALStatus_Node3{"The train current status is
PRE-ARRIVED GCWTL-PRE-ARRIVED is
true"}:::decision N_SetPREARRIVALStatus_Node3_action["The system sets the working status
to PRE-ARRIVAL-STATUS"]:::main N_SetPREARRIVALStatus_Node3 -- Yes --> N_SetPREARRIVALStatus_Node3_action N_SetPREARRIVALStatus_Node3_action --> E_SetPREARRIVALStatus N_SetPREARRIVALStatus_Node2 -- No --> N_SetPREARRIVALStatus_Node3 N_SetPREARRIVALStatus_Node3 -- No --> E_SetPREARRIVALStatus
File: GCX015.cbl
GIVEN:
A train record exists with valid acceptance counts and zero rejections
WHEN:
The train status indicates PRE-ARRIVED condition (GCWTL-PRE-ARRIVED is true)
THEN:
Set the processing status to PRE-ARRIVAL
File: GCX015.cbl
GIVEN:
A K3 segment has valid acceptance counts (zero rejections and positive acceptances) and the entity is a train
WHEN:
The train status indicates PRE-ARRIVED condition
THEN:
The system should set PRE-ARRIVAL status for the train
File: GCX015.cbl
GIVEN:
A train transaction has zero rejects, positive accepts, and train is in PRE-ARRIVED state
WHEN:
The system sets the final processing status
THEN:
The status is set to PRE-ARRIVAL to indicate successful pre-clearance processing
File: GCX015.cbl
GIVEN:
A train has positive acceptance count and zero rejections
WHEN:
The train current status is PRE-ARRIVED (GCWTL-PRE-ARRIVED is true)
THEN:
The system sets the working status to PRE-ARRIVAL-STATUS
β Consolidated Acceptance Criteria
- The train status indicates REVIEW-CMPL condition (GCWTL-REVIEW-CMPL is true) → set the processing status to REVIEW-COMPLETED
- The train status indicates REVIEW-CMPL condition → the system should set REVIEW-COMPLETED status for the train
- The system sets the final processing status → the status is set to REVIEW-COMPLETED to indicate successful completion of review process
- The train current status is REVIEW-CMPL (GCWTL-REVIEW-CMPL is true) → the system sets the working status to REVIEW-COMPLETED-STATUS
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetREVIEWCOMPLETEDStatus(["Start Step"])
E_SetREVIEWCOMPLETEDStatus(["End Step"])
N_SetREVIEWCOMPLETEDStatus_Node0{"The train status indicates
REVIEW-CMPL condition
GCWTL-REVIEW-CMPL is true"}:::decision N_SetREVIEWCOMPLETEDStatus_Node0_action["Set the processing status to
REVIEW-COMPLETED"]:::main N_SetREVIEWCOMPLETEDStatus_Node0 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node0_action N_SetREVIEWCOMPLETEDStatus_Node0_action --> E_SetREVIEWCOMPLETEDStatus S_SetREVIEWCOMPLETEDStatus --> N_SetREVIEWCOMPLETEDStatus_Node0 N_SetREVIEWCOMPLETEDStatus_Node1{"The train status indicates
REVIEW-CMPL condition"}:::decision N_SetREVIEWCOMPLETEDStatus_Node1_action["The system should set
REVIEW-COMPLETED status for the
train"]:::main N_SetREVIEWCOMPLETEDStatus_Node1 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node1_action N_SetREVIEWCOMPLETEDStatus_Node1_action --> E_SetREVIEWCOMPLETEDStatus N_SetREVIEWCOMPLETEDStatus_Node0 -- No --> N_SetREVIEWCOMPLETEDStatus_Node1 N_SetREVIEWCOMPLETEDStatus_Node2{"The system sets the final
processing status"}:::decision N_SetREVIEWCOMPLETEDStatus_Node2_action["The status is set to
REVIEW-COMPLETED to indicate
successful completion of review
process"]:::main N_SetREVIEWCOMPLETEDStatus_Node2 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node2_action N_SetREVIEWCOMPLETEDStatus_Node2_action --> E_SetREVIEWCOMPLETEDStatus N_SetREVIEWCOMPLETEDStatus_Node1 -- No --> N_SetREVIEWCOMPLETEDStatus_Node2 N_SetREVIEWCOMPLETEDStatus_Node3{"The train current status is
REVIEW-CMPL GCWTL-REVIEW-CMPL is
true"}:::decision N_SetREVIEWCOMPLETEDStatus_Node3_action["The system sets the working status
to REVIEW-COMPLETED-STATUS"]:::main N_SetREVIEWCOMPLETEDStatus_Node3 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node3_action N_SetREVIEWCOMPLETEDStatus_Node3_action --> E_SetREVIEWCOMPLETEDStatus N_SetREVIEWCOMPLETEDStatus_Node2 -- No --> N_SetREVIEWCOMPLETEDStatus_Node3 N_SetREVIEWCOMPLETEDStatus_Node3 -- No --> E_SetREVIEWCOMPLETEDStatus
REVIEW-CMPL condition
GCWTL-REVIEW-CMPL is true"}:::decision N_SetREVIEWCOMPLETEDStatus_Node0_action["Set the processing status to
REVIEW-COMPLETED"]:::main N_SetREVIEWCOMPLETEDStatus_Node0 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node0_action N_SetREVIEWCOMPLETEDStatus_Node0_action --> E_SetREVIEWCOMPLETEDStatus S_SetREVIEWCOMPLETEDStatus --> N_SetREVIEWCOMPLETEDStatus_Node0 N_SetREVIEWCOMPLETEDStatus_Node1{"The train status indicates
REVIEW-CMPL condition"}:::decision N_SetREVIEWCOMPLETEDStatus_Node1_action["The system should set
REVIEW-COMPLETED status for the
train"]:::main N_SetREVIEWCOMPLETEDStatus_Node1 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node1_action N_SetREVIEWCOMPLETEDStatus_Node1_action --> E_SetREVIEWCOMPLETEDStatus N_SetREVIEWCOMPLETEDStatus_Node0 -- No --> N_SetREVIEWCOMPLETEDStatus_Node1 N_SetREVIEWCOMPLETEDStatus_Node2{"The system sets the final
processing status"}:::decision N_SetREVIEWCOMPLETEDStatus_Node2_action["The status is set to
REVIEW-COMPLETED to indicate
successful completion of review
process"]:::main N_SetREVIEWCOMPLETEDStatus_Node2 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node2_action N_SetREVIEWCOMPLETEDStatus_Node2_action --> E_SetREVIEWCOMPLETEDStatus N_SetREVIEWCOMPLETEDStatus_Node1 -- No --> N_SetREVIEWCOMPLETEDStatus_Node2 N_SetREVIEWCOMPLETEDStatus_Node3{"The train current status is
REVIEW-CMPL GCWTL-REVIEW-CMPL is
true"}:::decision N_SetREVIEWCOMPLETEDStatus_Node3_action["The system sets the working status
to REVIEW-COMPLETED-STATUS"]:::main N_SetREVIEWCOMPLETEDStatus_Node3 -- Yes --> N_SetREVIEWCOMPLETEDStatus_Node3_action N_SetREVIEWCOMPLETEDStatus_Node3_action --> E_SetREVIEWCOMPLETEDStatus N_SetREVIEWCOMPLETEDStatus_Node2 -- No --> N_SetREVIEWCOMPLETEDStatus_Node3 N_SetREVIEWCOMPLETEDStatus_Node3 -- No --> E_SetREVIEWCOMPLETEDStatus
File: GCX015.cbl
GIVEN:
A train record exists with valid acceptance counts and zero rejections
WHEN:
The train status indicates REVIEW-CMPL condition (GCWTL-REVIEW-CMPL is true)
THEN:
Set the processing status to REVIEW-COMPLETED
File: GCX015.cbl
GIVEN:
A K3 segment has valid acceptance counts (zero rejections and positive acceptances) and the entity is a train
WHEN:
The train status indicates REVIEW-CMPL condition
THEN:
The system should set REVIEW-COMPLETED status for the train
File: GCX015.cbl
GIVEN:
A train transaction has zero rejects, positive accepts, and train is in REVIEW-CMPL state
WHEN:
The system sets the final processing status
THEN:
The status is set to REVIEW-COMPLETED to indicate successful completion of review process
File: GCX015.cbl
GIVEN:
A train has positive acceptance count and zero rejections
WHEN:
The train current status is REVIEW-CMPL (GCWTL-REVIEW-CMPL is true)
THEN:
The system sets the working status to REVIEW-COMPLETED-STATUS
β Consolidated Acceptance Criteria
- The train is neither in PRE-ARRIVED nor REVIEW-CMPL state → set the processing status to ACK (acknowledgment)
- The entity is not in PRE-ARRIVED or REVIEW-CMPL status conditions → the system should set standard ACK status
- The system sets the final processing status → the status is set to ACK to indicate successful transaction acknowledgment
- The train is not in PRE-ARRIVED or REVIEW-CMPL status → the system sets the working status to ACK-STATUS
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetACKStatus(["Start Step"])
E_SetACKStatus(["End Step"])
N_SetACKStatus_Node0{"The train is neither in PRE-ARRIVED
nor REVIEW-CMPL state"}:::decision N_SetACKStatus_Node0_action["Set the processing status to ACK
acknowledgment"]:::main N_SetACKStatus_Node0 -- Yes --> N_SetACKStatus_Node0_action N_SetACKStatus_Node0_action --> E_SetACKStatus S_SetACKStatus --> N_SetACKStatus_Node0 N_SetACKStatus_Node1{"The entity is not in PRE-ARRIVED or
REVIEW-CMPL status conditions"}:::decision N_SetACKStatus_Node1_action["The system should set standard ACK
status"]:::main N_SetACKStatus_Node1 -- Yes --> N_SetACKStatus_Node1_action N_SetACKStatus_Node1_action --> E_SetACKStatus N_SetACKStatus_Node0 -- No --> N_SetACKStatus_Node1 N_SetACKStatus_Node2{"The system sets the final
processing status"}:::decision N_SetACKStatus_Node2_action["The status is set to ACK to
indicate successful transaction
acknowledgment"]:::main N_SetACKStatus_Node2 -- Yes --> N_SetACKStatus_Node2_action N_SetACKStatus_Node2_action --> E_SetACKStatus N_SetACKStatus_Node1 -- No --> N_SetACKStatus_Node2 N_SetACKStatus_Node3{"The train is not in PRE-ARRIVED or
REVIEW-CMPL status"}:::decision N_SetACKStatus_Node3_action["The system sets the working status
to ACK-STATUS"]:::main N_SetACKStatus_Node3 -- Yes --> N_SetACKStatus_Node3_action N_SetACKStatus_Node3_action --> E_SetACKStatus N_SetACKStatus_Node2 -- No --> N_SetACKStatus_Node3 N_SetACKStatus_Node3 -- No --> E_SetACKStatus
nor REVIEW-CMPL state"}:::decision N_SetACKStatus_Node0_action["Set the processing status to ACK
acknowledgment"]:::main N_SetACKStatus_Node0 -- Yes --> N_SetACKStatus_Node0_action N_SetACKStatus_Node0_action --> E_SetACKStatus S_SetACKStatus --> N_SetACKStatus_Node0 N_SetACKStatus_Node1{"The entity is not in PRE-ARRIVED or
REVIEW-CMPL status conditions"}:::decision N_SetACKStatus_Node1_action["The system should set standard ACK
status"]:::main N_SetACKStatus_Node1 -- Yes --> N_SetACKStatus_Node1_action N_SetACKStatus_Node1_action --> E_SetACKStatus N_SetACKStatus_Node0 -- No --> N_SetACKStatus_Node1 N_SetACKStatus_Node2{"The system sets the final
processing status"}:::decision N_SetACKStatus_Node2_action["The status is set to ACK to
indicate successful transaction
acknowledgment"]:::main N_SetACKStatus_Node2 -- Yes --> N_SetACKStatus_Node2_action N_SetACKStatus_Node2_action --> E_SetACKStatus N_SetACKStatus_Node1 -- No --> N_SetACKStatus_Node2 N_SetACKStatus_Node3{"The train is not in PRE-ARRIVED or
REVIEW-CMPL status"}:::decision N_SetACKStatus_Node3_action["The system sets the working status
to ACK-STATUS"]:::main N_SetACKStatus_Node3 -- Yes --> N_SetACKStatus_Node3_action N_SetACKStatus_Node3_action --> E_SetACKStatus N_SetACKStatus_Node2 -- No --> N_SetACKStatus_Node3 N_SetACKStatus_Node3 -- No --> E_SetACKStatus
File: GCX015.cbl
GIVEN:
A train record exists with valid acceptance counts and zero rejections
WHEN:
The train is neither in PRE-ARRIVED nor REVIEW-CMPL state
THEN:
Set the processing status to ACK (acknowledgment)
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A K3 segment has valid acceptance counts (zero rejections and positive acceptances)
WHEN:
The entity is not in PRE-ARRIVED or REVIEW-CMPL status conditions
THEN:
The system should set standard ACK status
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A transaction has zero rejects and positive accepts, and is either cargo or train not in special states
WHEN:
The system sets the final processing status
THEN:
The status is set to ACK to indicate successful transaction acknowledgment
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train has positive acceptance count and zero rejections
WHEN:
The train is not in PRE-ARRIVED or REVIEW-CMPL status
THEN:
The system sets the working status to ACK-STATUS
β Consolidated Acceptance Criteria
- The total rejection count (K3-11-TOTAL-REJECT) is greater than zero → set the processing status to ERROR
- If the transaction results → the status is set to ERROR to indicate transaction processing failures
- The K3 total reject count is greater than zero → the system sets the working status to ERROR-STATUS
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetERRORStatus(["Start Step"])
E_SetERRORStatus(["End Step"])
N_SetERRORStatus_Node0{"The total rejection count
K3-11-TOTAL-REJECT is greater than
zero"}:::decision N_SetERRORStatus_Node0_action["Set the processing status to ERROR"]:::main N_SetERRORStatus_Node0 -- Yes --> N_SetERRORStatus_Node0_action N_SetERRORStatus_Node0_action --> E_SetERRORStatus S_SetERRORStatus --> N_SetERRORStatus_Node0 N_SetERRORStatus_Node1{"The system evaluates the
transaction results"}:::decision N_SetERRORStatus_Node1_action["The status is set to ERROR to
indicate transaction processing
failures"]:::main N_SetERRORStatus_Node1 -- Yes --> N_SetERRORStatus_Node1_action N_SetERRORStatus_Node1_action --> E_SetERRORStatus N_SetERRORStatus_Node0 -- No --> N_SetERRORStatus_Node1 N_SetERRORStatus_Node2{"The K3 total reject count is
greater than zero"}:::decision N_SetERRORStatus_Node2_action["The system sets the working status
to ERROR-STATUS"]:::main N_SetERRORStatus_Node2 -- Yes --> N_SetERRORStatus_Node2_action N_SetERRORStatus_Node2_action --> E_SetERRORStatus N_SetERRORStatus_Node1 -- No --> N_SetERRORStatus_Node2 N_SetERRORStatus_Node2 -- No --> E_SetERRORStatus
K3-11-TOTAL-REJECT is greater than
zero"}:::decision N_SetERRORStatus_Node0_action["Set the processing status to ERROR"]:::main N_SetERRORStatus_Node0 -- Yes --> N_SetERRORStatus_Node0_action N_SetERRORStatus_Node0_action --> E_SetERRORStatus S_SetERRORStatus --> N_SetERRORStatus_Node0 N_SetERRORStatus_Node1{"The system evaluates the
transaction results"}:::decision N_SetERRORStatus_Node1_action["The status is set to ERROR to
indicate transaction processing
failures"]:::main N_SetERRORStatus_Node1 -- Yes --> N_SetERRORStatus_Node1_action N_SetERRORStatus_Node1_action --> E_SetERRORStatus N_SetERRORStatus_Node0 -- No --> N_SetERRORStatus_Node1 N_SetERRORStatus_Node2{"The K3 total reject count is
greater than zero"}:::decision N_SetERRORStatus_Node2_action["The system sets the working status
to ERROR-STATUS"]:::main N_SetERRORStatus_Node2 -- Yes --> N_SetERRORStatus_Node2_action N_SetERRORStatus_Node2_action --> E_SetERRORStatus N_SetERRORStatus_Node1 -- No --> N_SetERRORStatus_Node2 N_SetERRORStatus_Node2 -- No --> E_SetERRORStatus
File: GCX015.cbl
GIVEN:
A K3 segment has been processed
WHEN:
The total rejection count (K3-11-TOTAL-REJECT) is greater than zero
THEN:
Set the processing status to ERROR
File: GCX015.cbl
GIVEN:
A K3 segment has total rejects greater than zero
WHEN:
The system evaluates the transaction results
THEN:
The status is set to ERROR to indicate transaction processing failures
File: GCX015.cbl
GIVEN:
A K3 segment is being processed for status determination
WHEN:
The K3 total reject count is greater than zero
THEN:
The system sets the working status to ERROR-STATUS
β Consolidated Acceptance Criteria
- The total rejection count in the K3 segment is greater than zero → the system should set ERROR status for the transaction
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractTotalRejectCount(["Start Step"])
E_ExtractTotalRejectCount(["End Step"])
N_ExtractTotalRejectCount_Node0{"The total rejection count in the K3
segment is greater than zero"}:::decision N_ExtractTotalRejectCount_Node0_action["The system should set ERROR status
for the transaction"]:::main N_ExtractTotalRejectCount_Node0 -- Yes --> N_ExtractTotalRejectCount_Node0_action N_ExtractTotalRejectCount_Node0_action --> E_ExtractTotalRejectCount S_ExtractTotalRejectCount --> N_ExtractTotalRejectCount_Node0 N_ExtractTotalRejectCount_Node0 -- No --> E_ExtractTotalRejectCount
segment is greater than zero"}:::decision N_ExtractTotalRejectCount_Node0_action["The system should set ERROR status
for the transaction"]:::main N_ExtractTotalRejectCount_Node0 -- Yes --> N_ExtractTotalRejectCount_Node0_action N_ExtractTotalRejectCount_Node0_action --> E_ExtractTotalRejectCount S_ExtractTotalRejectCount --> N_ExtractTotalRejectCount_Node0 N_ExtractTotalRejectCount_Node0 -- No --> E_ExtractTotalRejectCount
File: GCX015.cbl
GIVEN:
A K3 segment is being processed from the message queue
WHEN:
The total rejection count in the K3 segment is greater than zero
THEN:
The system should set ERROR status for the transaction
β Consolidated Acceptance Criteria
- The total acceptance count is greater than zero → the system should proceed to evaluate train status conditions for appropriate status assignment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AcceptCount0(["Start Step"])
E_AcceptCount0(["End Step"])
N_AcceptCount0_Node0{"The total acceptance count is
greater than zero"}:::decision N_AcceptCount0_Node0_action["The system should proceed to
evaluate train status conditions for
appropriate status assignment"]:::main N_AcceptCount0_Node0 -- Yes --> N_AcceptCount0_Node0_action N_AcceptCount0_Node0_action --> E_AcceptCount0 S_AcceptCount0 --> N_AcceptCount0_Node0 N_AcceptCount0_Node0 -- No --> E_AcceptCount0
greater than zero"}:::decision N_AcceptCount0_Node0_action["The system should proceed to
evaluate train status conditions for
appropriate status assignment"]:::main N_AcceptCount0_Node0 -- Yes --> N_AcceptCount0_Node0_action N_AcceptCount0_Node0_action --> E_AcceptCount0 S_AcceptCount0 --> N_AcceptCount0_Node0 N_AcceptCount0_Node0 -- No --> E_AcceptCount0
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejection count
WHEN:
The total acceptance count is greater than zero
THEN:
The system should proceed to evaluate train status conditions for appropriate status assignment
β Consolidated Acceptance Criteria
- The total acceptance count is also zero → the system should record a warning message 'USCS K3 RECORD HAS ZERO COUNTS' and set ACK status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_RecordZeroCountsMessage(["Start Step"])
E_RecordZeroCountsMessage(["End Step"])
N_RecordZeroCountsMessage_Node0{"The total acceptance count is also
zero"}:::decision N_RecordZeroCountsMessage_Node0_action["The system should record a warning
message USCS K3 RECORD HAS ZERO
COUNTS and set ACK status"]:::main N_RecordZeroCountsMessage_Node0 -- Yes --> N_RecordZeroCountsMessage_Node0_action N_RecordZeroCountsMessage_Node0_action --> E_RecordZeroCountsMessage S_RecordZeroCountsMessage --> N_RecordZeroCountsMessage_Node0 N_RecordZeroCountsMessage_Node0 -- No --> E_RecordZeroCountsMessage
zero"}:::decision N_RecordZeroCountsMessage_Node0_action["The system should record a warning
message USCS K3 RECORD HAS ZERO
COUNTS and set ACK status"]:::main N_RecordZeroCountsMessage_Node0 -- Yes --> N_RecordZeroCountsMessage_Node0_action N_RecordZeroCountsMessage_Node0_action --> E_RecordZeroCountsMessage S_RecordZeroCountsMessage --> N_RecordZeroCountsMessage_Node0 N_RecordZeroCountsMessage_Node0 -- No --> E_RecordZeroCountsMessage
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejection count
WHEN:
The total acceptance count is also zero
THEN:
The system should record a warning message 'USCS K3 RECORD HAS ZERO COUNTS' and set ACK status
β Consolidated Acceptance Criteria
- If the total reject count → if total rejects equal zero, proceed to acceptance validation; otherwise set error status
- The K3 total reject count is greater than zero → the system sets the status to ERROR and stops further acceptance processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TotalRejects0(["Start Step"])
E_TotalRejects0(["End Step"])
N_TotalRejects0_Node0{"The system evaluates the total
reject count"}:::decision N_TotalRejects0_Node0_action["If total rejects equal zero,
proceed to acceptance validation
otherwise set error status"]:::main N_TotalRejects0_Node0 -- Yes --> N_TotalRejects0_Node0_action N_TotalRejects0_Node0_action --> E_TotalRejects0 S_TotalRejects0 --> N_TotalRejects0_Node0 N_TotalRejects0_Node1{"The K3 total reject count is
greater than zero"}:::decision N_TotalRejects0_Node1_action["The system sets the status to ERROR
and stops further acceptance
processing"]:::main N_TotalRejects0_Node1 -- Yes --> N_TotalRejects0_Node1_action N_TotalRejects0_Node1_action --> E_TotalRejects0 N_TotalRejects0_Node0 -- No --> N_TotalRejects0_Node1 N_TotalRejects0_Node1 -- No --> E_TotalRejects0
reject count"}:::decision N_TotalRejects0_Node0_action["If total rejects equal zero,
proceed to acceptance validation
otherwise set error status"]:::main N_TotalRejects0_Node0 -- Yes --> N_TotalRejects0_Node0_action N_TotalRejects0_Node0_action --> E_TotalRejects0 S_TotalRejects0 --> N_TotalRejects0_Node0 N_TotalRejects0_Node1{"The K3 total reject count is
greater than zero"}:::decision N_TotalRejects0_Node1_action["The system sets the status to ERROR
and stops further acceptance
processing"]:::main N_TotalRejects0_Node1 -- Yes --> N_TotalRejects0_Node1_action N_TotalRejects0_Node1_action --> E_TotalRejects0 N_TotalRejects0_Node0 -- No --> N_TotalRejects0_Node1 N_TotalRejects0_Node1 -- No --> E_TotalRejects0
File: GCX015.cbl
GIVEN:
A K3 segment has been processed with total reject and accept counts
WHEN:
The system evaluates the total reject count
THEN:
If total rejects equal zero, proceed to acceptance validation; otherwise set error status
File: GCX015.cbl
GIVEN:
A K3 segment is being processed for train or cargo status
WHEN:
The K3 total reject count is greater than zero
THEN:
- The system sets the status to error
- Stops further acceptance processing
β Consolidated Acceptance Criteria
- If the total accept count → if total accepts are greater than zero, proceed to train status evaluation; if total accepts equal zero, log zero counts message and set ACK status
- The K3 total accept count is greater than zero → the system proceeds to evaluate train status conditions for appropriate status assignment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TotalAccepts0(["Start Step"])
E_TotalAccepts0(["End Step"])
N_TotalAccepts0_Node0{"The system evaluates the total
accept count"}:::decision N_TotalAccepts0_Node0_action["If total accepts are greater than
zero, proceed to train status
evaluation if total accepts equal
zero, log zero counts message and
set ACK status"]:::main N_TotalAccepts0_Node0 -- Yes --> N_TotalAccepts0_Node0_action N_TotalAccepts0_Node0_action --> E_TotalAccepts0 S_TotalAccepts0 --> N_TotalAccepts0_Node0 N_TotalAccepts0_Node1{"The K3 total accept count is
greater than zero"}:::decision N_TotalAccepts0_Node1_action["The system proceeds to evaluate
train status conditions for
appropriate status assignment"]:::main N_TotalAccepts0_Node1 -- Yes --> N_TotalAccepts0_Node1_action N_TotalAccepts0_Node1_action --> E_TotalAccepts0 N_TotalAccepts0_Node0 -- No --> N_TotalAccepts0_Node1 N_TotalAccepts0_Node1 -- No --> E_TotalAccepts0
accept count"}:::decision N_TotalAccepts0_Node0_action["If total accepts are greater than
zero, proceed to train status
evaluation if total accepts equal
zero, log zero counts message and
set ACK status"]:::main N_TotalAccepts0_Node0 -- Yes --> N_TotalAccepts0_Node0_action N_TotalAccepts0_Node0_action --> E_TotalAccepts0 S_TotalAccepts0 --> N_TotalAccepts0_Node0 N_TotalAccepts0_Node1{"The K3 total accept count is
greater than zero"}:::decision N_TotalAccepts0_Node1_action["The system proceeds to evaluate
train status conditions for
appropriate status assignment"]:::main N_TotalAccepts0_Node1 -- Yes --> N_TotalAccepts0_Node1_action N_TotalAccepts0_Node1_action --> E_TotalAccepts0 N_TotalAccepts0_Node0 -- No --> N_TotalAccepts0_Node1 N_TotalAccepts0_Node1 -- No --> E_TotalAccepts0
File: GCX015.cbl
GIVEN:
A K3 segment has zero total rejects
WHEN:
The system evaluates the total accept count
THEN:
- If total accepts are greater than zero, proceed to train status evaluation; if total accepts equal zero, log zero counts message
- Set ack status
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejection records
WHEN:
The K3 total accept count is greater than zero
THEN:
The system proceeds to evaluate train status conditions for appropriate status assignment
β Consolidated Acceptance Criteria
- If the current train status flags → if train is in PRE-ARRIVED state, set PRE-ARRIVAL status; if train is in REVIEW-CMPL state, set REVIEW-COMPLETED status; otherwise set standard ACK status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainStatusCheck(["Start Step"])
E_TrainStatusCheck(["End Step"])
N_TrainStatusCheck_Node0{"The system evaluates the current
train status flags"}:::decision N_TrainStatusCheck_Node0_action["If train is in PRE-ARRIVED state,
set PRE-ARRIVAL status if train is
in REVIEW-CMPL state, set
REVIEW-COMPLETED status otherwise
set standard ACK status"]:::main N_TrainStatusCheck_Node0 -- Yes --> N_TrainStatusCheck_Node0_action N_TrainStatusCheck_Node0_action --> E_TrainStatusCheck S_TrainStatusCheck --> N_TrainStatusCheck_Node0 N_TrainStatusCheck_Node0 -- No --> E_TrainStatusCheck
train status flags"}:::decision N_TrainStatusCheck_Node0_action["If train is in PRE-ARRIVED state,
set PRE-ARRIVAL status if train is
in REVIEW-CMPL state, set
REVIEW-COMPLETED status otherwise
set standard ACK status"]:::main N_TrainStatusCheck_Node0 -- Yes --> N_TrainStatusCheck_Node0_action N_TrainStatusCheck_Node0_action --> E_TrainStatusCheck S_TrainStatusCheck --> N_TrainStatusCheck_Node0 N_TrainStatusCheck_Node0 -- No --> E_TrainStatusCheck
File: GCX015.cbl
GIVEN:
A train transaction has zero rejects and positive accepts
WHEN:
The system evaluates the current train status flags
THEN:
If train is in PRE-ARRIVED state, set PRE-ARRIVAL status; if train is in REVIEW-CMPL state, set REVIEW-COMPLETED status; otherwise set standard ACK status
β Consolidated Acceptance Criteria
- If the current train status condition → the system branches to set PRE-ARRIVAL, REVIEW-COMPLETED, or ACK status based on current train state
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainCurrentStatus(["Start Step"])
E_TrainCurrentStatus(["End Step"])
N_TrainCurrentStatus_Node0{"The system evaluates the current
train status condition"}:::decision N_TrainCurrentStatus_Node0_action["The system branches to set
PRE-ARRIVAL, REVIEW-COMPLETED, or
ACK status based on current train
state"]:::main N_TrainCurrentStatus_Node0 -- Yes --> N_TrainCurrentStatus_Node0_action N_TrainCurrentStatus_Node0_action --> E_TrainCurrentStatus S_TrainCurrentStatus --> N_TrainCurrentStatus_Node0 N_TrainCurrentStatus_Node0 -- No --> E_TrainCurrentStatus
train status condition"}:::decision N_TrainCurrentStatus_Node0_action["The system branches to set
PRE-ARRIVAL, REVIEW-COMPLETED, or
ACK status based on current train
state"]:::main N_TrainCurrentStatus_Node0 -- Yes --> N_TrainCurrentStatus_Node0_action N_TrainCurrentStatus_Node0_action --> E_TrainCurrentStatus S_TrainCurrentStatus --> N_TrainCurrentStatus_Node0 N_TrainCurrentStatus_Node0 -- No --> E_TrainCurrentStatus
File: GCX015.cbl
GIVEN:
A K3 segment has zero rejections and positive acceptance count
WHEN:
The system evaluates the current train status condition
THEN:
The system branches to set PRE-ARRIVAL, REVIEW-COMPLETED, or ACK status based on current train state
β Consolidated Acceptance Criteria
- Setting up primary error notification recipients → the system sets OM01247 as both the sender (FROM) and primary recipient (TO) for error messages
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetPrimaryRecipientsOM01247asFROMandTO(["Start Step"])
E_SetPrimaryRecipientsOM01247asFROMandTO(["End Step"])
N_SetPrimaryRecipientsOM01247asFROMandTO_Node0{"Setting up primary error
notification recipients"}:::decision N_SetPrimaryRecipientsOM01247asFROMandTO_Node0_action["The system sets OM01247 as both the
sender FROM and primary recipient TO
for error messages"]:::exclusion N_SetPrimaryRecipientsOM01247asFROMandTO_Node0 -- Yes -->|Alternative| N_SetPrimaryRecipientsOM01247asFROMandTO_Node0_action N_SetPrimaryRecipientsOM01247asFROMandTO_Node0_action --> E_SetPrimaryRecipientsOM01247asFROMandTO S_SetPrimaryRecipientsOM01247asFROMandTO --> N_SetPrimaryRecipientsOM01247asFROMandTO_Node0 N_SetPrimaryRecipientsOM01247asFROMandTO_Node0 -- No --> E_SetPrimaryRecipientsOM01247asFROMandTO
notification recipients"}:::decision N_SetPrimaryRecipientsOM01247asFROMandTO_Node0_action["The system sets OM01247 as both the
sender FROM and primary recipient TO
for error messages"]:::exclusion N_SetPrimaryRecipientsOM01247asFROMandTO_Node0 -- Yes -->|Alternative| N_SetPrimaryRecipientsOM01247asFROMandTO_Node0_action N_SetPrimaryRecipientsOM01247asFROMandTO_Node0_action --> E_SetPrimaryRecipientsOM01247asFROMandTO S_SetPrimaryRecipientsOM01247asFROMandTO --> N_SetPrimaryRecipientsOM01247asFROMandTO_Node0 N_SetPrimaryRecipientsOM01247asFROMandTO_Node0 -- No --> E_SetPrimaryRecipientsOM01247asFROMandTO
File: GCX015.cbl
GIVEN:
An error condition has been detected and requires notification
WHEN:
Setting up primary error notification recipients
THEN:
The system sets OM01247 as both the sender (FROM) and primary recipient (TO) for error messages
β Consolidated Acceptance Criteria
- Configuring secondary error notification recipients → the system retrieves recipient identifiers from administrative table segment AD-DC-P-MERLIN-1 for TO recipient and AD-DC-P-MERLIN-5 for COPY recipient
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetSecondaryRecipientsFromAdminTableConfiguration(["Start Step"])
E_SetSecondaryRecipientsFromAdminTableConfiguration(["End Step"])
N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0{"Configuring secondary error
notification recipients"}:::decision N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0_action["The system retrieves recipient
identifiers from administrative
table segment AD-DC-P-MERLIN-1 for
TO recipient and AD-DC-P-MERLIN-5
for COPY recipient"]:::exclusion N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0 -- Yes -->|Alternative| N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0_action N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0_action --> E_SetSecondaryRecipientsFromAdminTableConfiguration S_SetSecondaryRecipientsFromAdminTableConfiguration --> N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0 N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0 -- No --> E_SetSecondaryRecipientsFromAdminTableConfiguration
notification recipients"}:::decision N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0_action["The system retrieves recipient
identifiers from administrative
table segment AD-DC-P-MERLIN-1 for
TO recipient and AD-DC-P-MERLIN-5
for COPY recipient"]:::exclusion N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0 -- Yes -->|Alternative| N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0_action N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0_action --> E_SetSecondaryRecipientsFromAdminTableConfiguration S_SetSecondaryRecipientsFromAdminTableConfiguration --> N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0 N_SetSecondaryRecipientsFromAdminTableConfiguration_Node0 -- No --> E_SetSecondaryRecipientsFromAdminTableConfiguration
File: GCX015.cbl
GIVEN:
Primary error notification setup is complete
WHEN:
Configuring secondary error notification recipients
THEN:
- The system retrieves recipient identifiers from administrative table segment ad-dc-p-merlin-1 for to recipient
- Ad-dc-p-merlin-5 for copy recipient
β Consolidated Acceptance Criteria
- Preparing error message content for transmission → the system includes the Merlin subject as the message subject and the complete Merlin error report as the message content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IncludeMerlinErrorReportwithMessageDetails(["Start Step"])
E_IncludeMerlinErrorReportwithMessageDetails(["End Step"])
N_IncludeMerlinErrorReportwithMessageDetails_Node0{"Preparing error message content for
transmission"}:::decision N_IncludeMerlinErrorReportwithMessageDetails_Node0_action["The system includes the Merlin
subject as the message subject and
the complete Merlin error report as
the message content"]:::exclusion N_IncludeMerlinErrorReportwithMessageDetails_Node0 -- Yes -->|Alternative| N_IncludeMerlinErrorReportwithMessageDetails_Node0_action N_IncludeMerlinErrorReportwithMessageDetails_Node0_action --> E_IncludeMerlinErrorReportwithMessageDetails S_IncludeMerlinErrorReportwithMessageDetails --> N_IncludeMerlinErrorReportwithMessageDetails_Node0 N_IncludeMerlinErrorReportwithMessageDetails_Node0 -- No --> E_IncludeMerlinErrorReportwithMessageDetails
transmission"}:::decision N_IncludeMerlinErrorReportwithMessageDetails_Node0_action["The system includes the Merlin
subject as the message subject and
the complete Merlin error report as
the message content"]:::exclusion N_IncludeMerlinErrorReportwithMessageDetails_Node0 -- Yes -->|Alternative| N_IncludeMerlinErrorReportwithMessageDetails_Node0_action N_IncludeMerlinErrorReportwithMessageDetails_Node0_action --> E_IncludeMerlinErrorReportwithMessageDetails S_IncludeMerlinErrorReportwithMessageDetails --> N_IncludeMerlinErrorReportwithMessageDetails_Node0 N_IncludeMerlinErrorReportwithMessageDetails_Node0 -- No --> E_IncludeMerlinErrorReportwithMessageDetails
File: GCX015.cbl
GIVEN:
Error notification recipients are configured
WHEN:
Preparing error message content for transmission
THEN:
- The system includes the merlin subject as the message subject
- The complete merlin error report as the message content
β Consolidated Acceptance Criteria
- Transmitting the primary error notification → the system calls EMCSEND2 service with sender, destination filename, recipients, subject, and error report content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallEMCSEND2forPrimaryNotification(["Start Step"])
E_CallEMCSEND2forPrimaryNotification(["End Step"])
N_CallEMCSEND2forPrimaryNotification_Node0{"Transmitting the primary error
notification"}:::decision N_CallEMCSEND2forPrimaryNotification_Node0_action["The system calls EMCSEND2 service
with sender, destination filename,
recipients, subject, and error
report content"]:::exclusion N_CallEMCSEND2forPrimaryNotification_Node0 -- Yes -->|Alternative| N_CallEMCSEND2forPrimaryNotification_Node0_action N_CallEMCSEND2forPrimaryNotification_Node0_action --> E_CallEMCSEND2forPrimaryNotification S_CallEMCSEND2forPrimaryNotification --> N_CallEMCSEND2forPrimaryNotification_Node0 N_CallEMCSEND2forPrimaryNotification_Node0 -- No --> E_CallEMCSEND2forPrimaryNotification
notification"}:::decision N_CallEMCSEND2forPrimaryNotification_Node0_action["The system calls EMCSEND2 service
with sender, destination filename,
recipients, subject, and error
report content"]:::exclusion N_CallEMCSEND2forPrimaryNotification_Node0 -- Yes -->|Alternative| N_CallEMCSEND2forPrimaryNotification_Node0_action N_CallEMCSEND2forPrimaryNotification_Node0_action --> E_CallEMCSEND2forPrimaryNotification S_CallEMCSEND2forPrimaryNotification --> N_CallEMCSEND2forPrimaryNotification_Node0 N_CallEMCSEND2forPrimaryNotification_Node0 -- No --> E_CallEMCSEND2forPrimaryNotification
File: GCX015.cbl
GIVEN:
Error message content is prepared with primary recipients configured
WHEN:
Transmitting the primary error notification
THEN:
The system calls EMCSEND2 service with sender, destination filename, recipients, subject, and error report content
β Consolidated Acceptance Criteria
- Checking the transmission result status → the system evaluates if the notification was successful based on EMI-NO-ERRORS status and proceeds to secondary notification if successful
- Checking transmission result status → if EMI-NO-ERRORS condition is true, the transmission is considered successful
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_PrimarySendSuccessful(["Start Step"])
E_PrimarySendSuccessful(["End Step"])
N_PrimarySendSuccessful_Node0{"Checking the transmission result
status"}:::decision N_PrimarySendSuccessful_Node0_action["The system evaluates if the
notification was successful based on
EMI-NO-ERRORS status and proceeds to
secondary notification if successful"]:::main N_PrimarySendSuccessful_Node0 -- Yes --> N_PrimarySendSuccessful_Node0_action N_PrimarySendSuccessful_Node0_action --> E_PrimarySendSuccessful S_PrimarySendSuccessful --> N_PrimarySendSuccessful_Node0 N_PrimarySendSuccessful_Node1{"Checking transmission result status"}:::decision N_PrimarySendSuccessful_Node1_action["If EMI-NO-ERRORS condition is true,
the transmission is considered
successful"]:::main N_PrimarySendSuccessful_Node1 -- Yes --> N_PrimarySendSuccessful_Node1_action N_PrimarySendSuccessful_Node1_action --> E_PrimarySendSuccessful N_PrimarySendSuccessful_Node0 -- No --> N_PrimarySendSuccessful_Node1 N_PrimarySendSuccessful_Node1 -- No --> E_PrimarySendSuccessful
status"}:::decision N_PrimarySendSuccessful_Node0_action["The system evaluates if the
notification was successful based on
EMI-NO-ERRORS status and proceeds to
secondary notification if successful"]:::main N_PrimarySendSuccessful_Node0 -- Yes --> N_PrimarySendSuccessful_Node0_action N_PrimarySendSuccessful_Node0_action --> E_PrimarySendSuccessful S_PrimarySendSuccessful --> N_PrimarySendSuccessful_Node0 N_PrimarySendSuccessful_Node1{"Checking transmission result status"}:::decision N_PrimarySendSuccessful_Node1_action["If EMI-NO-ERRORS condition is true,
the transmission is considered
successful"]:::main N_PrimarySendSuccessful_Node1 -- Yes --> N_PrimarySendSuccessful_Node1_action N_PrimarySendSuccessful_Node1_action --> E_PrimarySendSuccessful N_PrimarySendSuccessful_Node0 -- No --> N_PrimarySendSuccessful_Node1 N_PrimarySendSuccessful_Node1 -- No --> E_PrimarySendSuccessful
File: GCX015.cbl
GIVEN:
Primary error notification has been transmitted via EMCSEND2
WHEN:
Checking the transmission result status
THEN:
- The system evaluates if the notification was successful based on emi-no-errors status
- Proceeds to secondary notification if successful
File: GCX015.cbl
GIVEN:
Primary error report transmission has been attempted
WHEN:
Checking transmission result status
THEN:
If EMI-NO-ERRORS condition is true, the transmission is considered successful
β Consolidated Acceptance Criteria
- Transmitting the secondary error notification → the system calls EMCSEND2 service with administrative table recipients and the same error message content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallEMCSEND2forSecondaryNotification(["Start Step"])
E_CallEMCSEND2forSecondaryNotification(["End Step"])
N_CallEMCSEND2forSecondaryNotification_Node0{"Transmitting the secondary error
notification"}:::decision N_CallEMCSEND2forSecondaryNotification_Node0_action["The system calls EMCSEND2 service
with administrative table recipients
and the same error message content"]:::exclusion N_CallEMCSEND2forSecondaryNotification_Node0 -- Yes -->|Alternative| N_CallEMCSEND2forSecondaryNotification_Node0_action N_CallEMCSEND2forSecondaryNotification_Node0_action --> E_CallEMCSEND2forSecondaryNotification S_CallEMCSEND2forSecondaryNotification --> N_CallEMCSEND2forSecondaryNotification_Node0 N_CallEMCSEND2forSecondaryNotification_Node0 -- No --> E_CallEMCSEND2forSecondaryNotification
notification"}:::decision N_CallEMCSEND2forSecondaryNotification_Node0_action["The system calls EMCSEND2 service
with administrative table recipients
and the same error message content"]:::exclusion N_CallEMCSEND2forSecondaryNotification_Node0 -- Yes -->|Alternative| N_CallEMCSEND2forSecondaryNotification_Node0_action N_CallEMCSEND2forSecondaryNotification_Node0_action --> E_CallEMCSEND2forSecondaryNotification S_CallEMCSEND2forSecondaryNotification --> N_CallEMCSEND2forSecondaryNotification_Node0 N_CallEMCSEND2forSecondaryNotification_Node0 -- No --> E_CallEMCSEND2forSecondaryNotification
File: GCX015.cbl
GIVEN:
Primary error notification was successful and secondary recipients are configured from administrative table
WHEN:
Transmitting the secondary error notification
THEN:
- The system calls emcsend2 service with administrative table recipients
- The same error message content
β Consolidated Acceptance Criteria
- Checking the secondary transmission result status → the system evaluates if the secondary notification was successful based on EMI-NO-ERRORS status and completes the error notification process if successful
- Checking secondary transmission result status → if EMI-NO-ERRORS condition is true, the secondary transmission is considered successful
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SecondarySendSuccessful(["Start Step"])
E_SecondarySendSuccessful(["End Step"])
N_SecondarySendSuccessful_Node0{"Checking the secondary transmission
result status"}:::decision N_SecondarySendSuccessful_Node0_action["The system evaluates if the
secondary notification was
successful based on EMI-NO-ERRORS
status and completes the error
notification process if successful"]:::main N_SecondarySendSuccessful_Node0 -- Yes --> N_SecondarySendSuccessful_Node0_action N_SecondarySendSuccessful_Node0_action --> E_SecondarySendSuccessful S_SecondarySendSuccessful --> N_SecondarySendSuccessful_Node0 N_SecondarySendSuccessful_Node1{"Checking secondary transmission
result status"}:::decision N_SecondarySendSuccessful_Node1_action["If EMI-NO-ERRORS condition is true,
the secondary transmission is
considered successful"]:::main N_SecondarySendSuccessful_Node1 -- Yes --> N_SecondarySendSuccessful_Node1_action N_SecondarySendSuccessful_Node1_action --> E_SecondarySendSuccessful N_SecondarySendSuccessful_Node0 -- No --> N_SecondarySendSuccessful_Node1 N_SecondarySendSuccessful_Node1 -- No --> E_SecondarySendSuccessful
result status"}:::decision N_SecondarySendSuccessful_Node0_action["The system evaluates if the
secondary notification was
successful based on EMI-NO-ERRORS
status and completes the error
notification process if successful"]:::main N_SecondarySendSuccessful_Node0 -- Yes --> N_SecondarySendSuccessful_Node0_action N_SecondarySendSuccessful_Node0_action --> E_SecondarySendSuccessful S_SecondarySendSuccessful --> N_SecondarySendSuccessful_Node0 N_SecondarySendSuccessful_Node1{"Checking secondary transmission
result status"}:::decision N_SecondarySendSuccessful_Node1_action["If EMI-NO-ERRORS condition is true,
the secondary transmission is
considered successful"]:::main N_SecondarySendSuccessful_Node1 -- Yes --> N_SecondarySendSuccessful_Node1_action N_SecondarySendSuccessful_Node1_action --> E_SecondarySendSuccessful N_SecondarySendSuccessful_Node0 -- No --> N_SecondarySendSuccessful_Node1 N_SecondarySendSuccessful_Node1 -- No --> E_SecondarySendSuccessful
File: GCX015.cbl
GIVEN:
Secondary error notification has been transmitted via EMCSEND2
WHEN:
Checking the secondary transmission result status
THEN:
- The system evaluates if the secondary notification was successful based on emi-no-errors status
- Completes the error notification process if successful
File: GCX015.cbl
GIVEN:
Secondary error report transmission has been attempted
WHEN:
Checking secondary transmission result status
THEN:
If EMI-NO-ERRORS condition is true, the secondary transmission is considered successful
β Consolidated Acceptance Criteria
- The EMCSEND2 service returns a failure status for primary notification → the system triggers an abend process due to critical send failure for invalid sender, recipient, or filename conditions
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandlePrimarySendFailure(["Start Step"])
E_HandlePrimarySendFailure(["End Step"])
N_HandlePrimarySendFailure_Node0{"The EMCSEND2 service returns a
failure status for primary
notification"}:::decision N_HandlePrimarySendFailure_Node0_action["The system triggers an abend
process due to critical send failure
for invalid sender, recipient, or
filename conditions"]:::exclusion N_HandlePrimarySendFailure_Node0 -- Yes -->|Alternative| N_HandlePrimarySendFailure_Node0_action N_HandlePrimarySendFailure_Node0_action --> E_HandlePrimarySendFailure S_HandlePrimarySendFailure --> N_HandlePrimarySendFailure_Node0 N_HandlePrimarySendFailure_Node0 -- No --> E_HandlePrimarySendFailure
failure status for primary
notification"}:::decision N_HandlePrimarySendFailure_Node0_action["The system triggers an abend
process due to critical send failure
for invalid sender, recipient, or
filename conditions"]:::exclusion N_HandlePrimarySendFailure_Node0 -- Yes -->|Alternative| N_HandlePrimarySendFailure_Node0_action N_HandlePrimarySendFailure_Node0_action --> E_HandlePrimarySendFailure S_HandlePrimarySendFailure --> N_HandlePrimarySendFailure_Node0 N_HandlePrimarySendFailure_Node0 -- No --> E_HandlePrimarySendFailure
File: GCX015.cbl
GIVEN:
Primary error notification transmission has failed
WHEN:
The EMCSEND2 service returns a failure status for primary notification
THEN:
The system triggers an abend process due to critical send failure for invalid sender, recipient, or filename conditions
β Consolidated Acceptance Criteria
- The EMCSEND2 service returns a failure status for secondary notification → the system triggers an abend process due to critical send failure for invalid sender, recipient, or filename conditions
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleSecondarySendFailure(["Start Step"])
E_HandleSecondarySendFailure(["End Step"])
N_HandleSecondarySendFailure_Node0{"The EMCSEND2 service returns a
failure status for secondary
notification"}:::decision N_HandleSecondarySendFailure_Node0_action["The system triggers an abend
process due to critical send failure
for invalid sender, recipient, or
filename conditions"]:::exclusion N_HandleSecondarySendFailure_Node0 -- Yes -->|Alternative| N_HandleSecondarySendFailure_Node0_action N_HandleSecondarySendFailure_Node0_action --> E_HandleSecondarySendFailure S_HandleSecondarySendFailure --> N_HandleSecondarySendFailure_Node0 N_HandleSecondarySendFailure_Node0 -- No --> E_HandleSecondarySendFailure
failure status for secondary
notification"}:::decision N_HandleSecondarySendFailure_Node0_action["The system triggers an abend
process due to critical send failure
for invalid sender, recipient, or
filename conditions"]:::exclusion N_HandleSecondarySendFailure_Node0 -- Yes -->|Alternative| N_HandleSecondarySendFailure_Node0_action N_HandleSecondarySendFailure_Node0_action --> E_HandleSecondarySendFailure S_HandleSecondarySendFailure --> N_HandleSecondarySendFailure_Node0 N_HandleSecondarySendFailure_Node0 -- No --> E_HandleSecondarySendFailure
File: GCX015.cbl
GIVEN:
Secondary error notification transmission has failed
WHEN:
The EMCSEND2 service returns a failure status for secondary notification
THEN:
The system triggers an abend process due to critical send failure for invalid sender, recipient, or filename conditions
β Consolidated Acceptance Criteria
- The processing resulted in an error status condition → the system sends an error notification message via EMCSEND service
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendErrorMessageviaEMCSEND(["Start Step"])
E_SendErrorMessageviaEMCSEND(["End Step"])
N_SendErrorMessageviaEMCSEND_Node0{"The processing resulted in an error
status condition"}:::decision N_SendErrorMessageviaEMCSEND_Node0_action["The system sends an error
notification message via EMCSEND
service"]:::exclusion N_SendErrorMessageviaEMCSEND_Node0 -- Yes -->|Alternative| N_SendErrorMessageviaEMCSEND_Node0_action N_SendErrorMessageviaEMCSEND_Node0_action --> E_SendErrorMessageviaEMCSEND S_SendErrorMessageviaEMCSEND --> N_SendErrorMessageviaEMCSEND_Node0 N_SendErrorMessageviaEMCSEND_Node0 -- No --> E_SendErrorMessageviaEMCSEND
status condition"}:::decision N_SendErrorMessageviaEMCSEND_Node0_action["The system sends an error
notification message via EMCSEND
service"]:::exclusion N_SendErrorMessageviaEMCSEND_Node0 -- Yes -->|Alternative| N_SendErrorMessageviaEMCSEND_Node0_action N_SendErrorMessageviaEMCSEND_Node0_action --> E_SendErrorMessageviaEMCSEND S_SendErrorMessageviaEMCSEND --> N_SendErrorMessageviaEMCSEND_Node0 N_SendErrorMessageviaEMCSEND_Node0 -- No --> E_SendErrorMessageviaEMCSEND
File: GCX015.cbl
GIVEN:
A message processing operation has completed
WHEN:
The processing resulted in an error status condition
THEN:
The system sends an error notification message via EMCSEND service
β Consolidated Acceptance Criteria
- Log information needs to be recorded → the system populates GCX105 structure with security byte, sending transaction code, ACF2 user ID, processing date from machine century and K3 date, and processing time from K3 segment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MoveLogInformationtoGCX105(["Start Step"])
E_MoveLogInformationtoGCX105(["End Step"])
N_MoveLogInformationtoGCX105_Node0{"Log information needs to be
recorded"}:::decision N_MoveLogInformationtoGCX105_Node0_action["The system populates GCX105
structure with security byte,
sending transaction code, ACF2 user
ID, processing date from machine
century and K3 date, and processing
time from K3 segment"]:::main N_MoveLogInformationtoGCX105_Node0 -- Yes --> N_MoveLogInformationtoGCX105_Node0_action N_MoveLogInformationtoGCX105_Node0_action --> E_MoveLogInformationtoGCX105 S_MoveLogInformationtoGCX105 --> N_MoveLogInformationtoGCX105_Node0 N_MoveLogInformationtoGCX105_Node0 -- No --> E_MoveLogInformationtoGCX105
recorded"}:::decision N_MoveLogInformationtoGCX105_Node0_action["The system populates GCX105
structure with security byte,
sending transaction code, ACF2 user
ID, processing date from machine
century and K3 date, and processing
time from K3 segment"]:::main N_MoveLogInformationtoGCX105_Node0 -- Yes --> N_MoveLogInformationtoGCX105_Node0_action N_MoveLogInformationtoGCX105_Node0_action --> E_MoveLogInformationtoGCX105 S_MoveLogInformationtoGCX105 --> N_MoveLogInformationtoGCX105_Node0 N_MoveLogInformationtoGCX105_Node0 -- No --> E_MoveLogInformationtoGCX105
File: GCX015.cbl
GIVEN:
A message processing operation requires logging
WHEN:
Log information needs to be recorded
THEN:
- The system populates gcx105 structure with security byte, sending transaction code, acf2 user id, processing date from machine century
- K3 date, and processing time from k3 segment
β Consolidated Acceptance Criteria
- The entity type needs to be identified for logging purposes → the system sets the train or cargo identifier in the GCX105 structure using the work M10-12 data
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTrainorCargoIdentifier(["Start Step"])
E_SetTrainorCargoIdentifier(["End Step"])
N_SetTrainorCargoIdentifier_Node0{"The entity type needs to be
identified for logging purposes"}:::decision N_SetTrainorCargoIdentifier_Node0_action["The system sets the train or cargo
identifier in the GCX105 structure
using the work M10-12 data"]:::main N_SetTrainorCargoIdentifier_Node0 -- Yes --> N_SetTrainorCargoIdentifier_Node0_action N_SetTrainorCargoIdentifier_Node0_action --> E_SetTrainorCargoIdentifier S_SetTrainorCargoIdentifier --> N_SetTrainorCargoIdentifier_Node0 N_SetTrainorCargoIdentifier_Node0 -- No --> E_SetTrainorCargoIdentifier
identified for logging purposes"}:::decision N_SetTrainorCargoIdentifier_Node0_action["The system sets the train or cargo
identifier in the GCX105 structure
using the work M10-12 data"]:::main N_SetTrainorCargoIdentifier_Node0 -- Yes --> N_SetTrainorCargoIdentifier_Node0_action N_SetTrainorCargoIdentifier_Node0_action --> E_SetTrainorCargoIdentifier S_SetTrainorCargoIdentifier --> N_SetTrainorCargoIdentifier_Node0 N_SetTrainorCargoIdentifier_Node0 -- No --> E_SetTrainorCargoIdentifier
File: GCX015.cbl
GIVEN:
A shipment entity needs to be logged
WHEN:
The entity type needs to be identified for logging purposes
THEN:
The system sets the train or cargo identifier in the GCX105 structure using the work M10-12 data
β Consolidated Acceptance Criteria
- The entity type flag needs to be set for logging → the system sets the GCX105-US-TRAIN flag to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUSTRAINFlag(["Start Step"])
E_SetUSTRAINFlag(["End Step"])
N_SetUSTRAINFlag_Node0{"The entity type flag needs to be
set for logging"}:::decision N_SetUSTRAINFlag_Node0_action["The system sets the GCX105-US-TRAIN
flag to true"]:::main N_SetUSTRAINFlag_Node0 -- Yes --> N_SetUSTRAINFlag_Node0_action N_SetUSTRAINFlag_Node0_action --> E_SetUSTRAINFlag S_SetUSTRAINFlag --> N_SetUSTRAINFlag_Node0 N_SetUSTRAINFlag_Node0 -- No --> E_SetUSTRAINFlag
set for logging"}:::decision N_SetUSTRAINFlag_Node0_action["The system sets the GCX105-US-TRAIN
flag to true"]:::main N_SetUSTRAINFlag_Node0 -- Yes --> N_SetUSTRAINFlag_Node0_action N_SetUSTRAINFlag_Node0_action --> E_SetUSTRAINFlag S_SetUSTRAINFlag --> N_SetUSTRAINFlag_Node0 N_SetUSTRAINFlag_Node0 -- No --> E_SetUSTRAINFlag
File: GCX015.cbl
GIVEN:
The entity being processed is identified as a train
WHEN:
The entity type flag needs to be set for logging
THEN:
The system sets the GCX105-US-TRAIN flag to true
β Consolidated Acceptance Criteria
- The entity type flag needs to be set for logging → the system sets the GCX105-US-CARGO flag to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUSCARGOFlag(["Start Step"])
E_SetUSCARGOFlag(["End Step"])
N_SetUSCARGOFlag_Node0{"The entity type flag needs to be
set for logging"}:::decision N_SetUSCARGOFlag_Node0_action["The system sets the GCX105-US-CARGO
flag to true"]:::main N_SetUSCARGOFlag_Node0 -- Yes --> N_SetUSCARGOFlag_Node0_action N_SetUSCARGOFlag_Node0_action --> E_SetUSCARGOFlag S_SetUSCARGOFlag --> N_SetUSCARGOFlag_Node0 N_SetUSCARGOFlag_Node0 -- No --> E_SetUSCARGOFlag
set for logging"}:::decision N_SetUSCARGOFlag_Node0_action["The system sets the GCX105-US-CARGO
flag to true"]:::main N_SetUSCARGOFlag_Node0 -- Yes --> N_SetUSCARGOFlag_Node0_action N_SetUSCARGOFlag_Node0_action --> E_SetUSCARGOFlag S_SetUSCARGOFlag --> N_SetUSCARGOFlag_Node0 N_SetUSCARGOFlag_Node0 -- No --> E_SetUSCARGOFlag
File: GCX015.cbl
GIVEN:
The entity being processed is identified as cargo
WHEN:
The entity type flag needs to be set for logging
THEN:
The system sets the GCX105-US-CARGO flag to true
β Consolidated Acceptance Criteria
- The action code needs to be set → the system sets the GCX105-ACTION-CODE to 'ZZZ'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetActionCodetoZZZ(["Start Step"])
E_SetActionCodetoZZZ(["End Step"])
N_SetActionCodetoZZZ_Node0{"The action code needs to be set"}:::decision
N_SetActionCodetoZZZ_Node0_action["The system sets the
GCX105-ACTION-CODE to ZZZ"]:::main N_SetActionCodetoZZZ_Node0 -- Yes --> N_SetActionCodetoZZZ_Node0_action N_SetActionCodetoZZZ_Node0_action --> E_SetActionCodetoZZZ S_SetActionCodetoZZZ --> N_SetActionCodetoZZZ_Node0 N_SetActionCodetoZZZ_Node0 -- No --> E_SetActionCodetoZZZ
GCX105-ACTION-CODE to ZZZ"]:::main N_SetActionCodetoZZZ_Node0 -- Yes --> N_SetActionCodetoZZZ_Node0_action N_SetActionCodetoZZZ_Node0_action --> E_SetActionCodetoZZZ S_SetActionCodetoZZZ --> N_SetActionCodetoZZZ_Node0 N_SetActionCodetoZZZ_Node0 -- No --> E_SetActionCodetoZZZ
File: GCX015.cbl
GIVEN:
A log entry is being prepared for transmission
WHEN:
The action code needs to be set
THEN:
The system sets the GCX105-ACTION-CODE to 'ZZZ'
β Consolidated Acceptance Criteria
- Message fields are being populated → the system moves the current WS-STATUS to USCS-MESSAGE1, USCS-MESSAGE2, and USCS-MESSAGE3 fields
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MoveStatustoMessageFields(["Start Step"])
E_MoveStatustoMessageFields(["End Step"])
N_MoveStatustoMessageFields_Node0{"Message fields are being populated"}:::decision
N_MoveStatustoMessageFields_Node0_action["The system moves the current
WS-STATUS to USCS-MESSAGE1,
USCS-MESSAGE2, and USCS-MESSAGE3
fields"]:::main N_MoveStatustoMessageFields_Node0 -- Yes --> N_MoveStatustoMessageFields_Node0_action N_MoveStatustoMessageFields_Node0_action --> E_MoveStatustoMessageFields S_MoveStatustoMessageFields --> N_MoveStatustoMessageFields_Node0 N_MoveStatustoMessageFields_Node0 -- No --> E_MoveStatustoMessageFields
WS-STATUS to USCS-MESSAGE1,
USCS-MESSAGE2, and USCS-MESSAGE3
fields"]:::main N_MoveStatustoMessageFields_Node0 -- Yes --> N_MoveStatustoMessageFields_Node0_action N_MoveStatustoMessageFields_Node0_action --> E_MoveStatustoMessageFields S_MoveStatustoMessageFields --> N_MoveStatustoMessageFields_Node0 N_MoveStatustoMessageFields_Node0 -- No --> E_MoveStatustoMessageFields
File: GCX015.cbl
GIVEN:
Status information needs to be included in log messages
WHEN:
Message fields are being populated
THEN:
The system moves the current WS-STATUS to USCS-MESSAGE1, USCS-MESSAGE2, and USCS-MESSAGE3 fields
β Consolidated Acceptance Criteria
- The message format needs to be determined for logging → the system uses USCS-LOG-MESSAGE1 format and moves it to GCX105-MESSAGE
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseManifestReplyMessageFormat(["Start Step"])
E_UseManifestReplyMessageFormat(["End Step"])
N_UseManifestReplyMessageFormat_Node0{"The message format needs to be
determined for logging"}:::decision N_UseManifestReplyMessageFormat_Node0_action["The system uses USCS-LOG-MESSAGE1
format and moves it to
GCX105-MESSAGE"]:::main N_UseManifestReplyMessageFormat_Node0 -- Yes --> N_UseManifestReplyMessageFormat_Node0_action N_UseManifestReplyMessageFormat_Node0_action --> E_UseManifestReplyMessageFormat S_UseManifestReplyMessageFormat --> N_UseManifestReplyMessageFormat_Node0 N_UseManifestReplyMessageFormat_Node0 -- No --> E_UseManifestReplyMessageFormat
determined for logging"}:::decision N_UseManifestReplyMessageFormat_Node0_action["The system uses USCS-LOG-MESSAGE1
format and moves it to
GCX105-MESSAGE"]:::main N_UseManifestReplyMessageFormat_Node0 -- Yes --> N_UseManifestReplyMessageFormat_Node0_action N_UseManifestReplyMessageFormat_Node0_action --> E_UseManifestReplyMessageFormat S_UseManifestReplyMessageFormat --> N_UseManifestReplyMessageFormat_Node0 N_UseManifestReplyMessageFormat_Node0 -- No --> E_UseManifestReplyMessageFormat
File: GCX015.cbl
GIVEN:
A cargo entity is being processed and status should be updated
WHEN:
The message format needs to be determined for logging
THEN:
- The system uses uscs-log-message1 format
- Moves it to gcx105-message
β Consolidated Acceptance Criteria
- The message format needs to be determined for logging → the system uses USCS-LOG-MESSAGE2 format and moves it to GCX105-MESSAGE
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseTrainReplyMessageFormat(["Start Step"])
E_UseTrainReplyMessageFormat(["End Step"])
N_UseTrainReplyMessageFormat_Node0{"The message format needs to be
determined for logging"}:::decision N_UseTrainReplyMessageFormat_Node0_action["The system uses USCS-LOG-MESSAGE2
format and moves it to
GCX105-MESSAGE"]:::main N_UseTrainReplyMessageFormat_Node0 -- Yes --> N_UseTrainReplyMessageFormat_Node0_action N_UseTrainReplyMessageFormat_Node0_action --> E_UseTrainReplyMessageFormat S_UseTrainReplyMessageFormat --> N_UseTrainReplyMessageFormat_Node0 N_UseTrainReplyMessageFormat_Node0 -- No --> E_UseTrainReplyMessageFormat
determined for logging"}:::decision N_UseTrainReplyMessageFormat_Node0_action["The system uses USCS-LOG-MESSAGE2
format and moves it to
GCX105-MESSAGE"]:::main N_UseTrainReplyMessageFormat_Node0 -- Yes --> N_UseTrainReplyMessageFormat_Node0_action N_UseTrainReplyMessageFormat_Node0_action --> E_UseTrainReplyMessageFormat S_UseTrainReplyMessageFormat --> N_UseTrainReplyMessageFormat_Node0 N_UseTrainReplyMessageFormat_Node0 -- No --> E_UseTrainReplyMessageFormat
File: GCX015.cbl
GIVEN:
A train entity is being processed and status should be updated
WHEN:
The message format needs to be determined for logging
THEN:
- The system uses uscs-log-message2 format
- Moves it to gcx105-message
β Consolidated Acceptance Criteria
- The message format needs to be determined for logging → the system uses USCS-LOG-MESSAGE3 format, moves it to GCX105-MESSAGE, and if the entity is a train with AEI-SEND flag, performs AEI status message processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseOtherReplyMessageFormat(["Start Step"])
E_UseOtherReplyMessageFormat(["End Step"])
N_UseOtherReplyMessageFormat_Node0{"The message format needs to be
determined for logging"}:::decision N_UseOtherReplyMessageFormat_Node0_action["The system uses USCS-LOG-MESSAGE3
format, moves it to GCX105-MESSAGE,
and if the entity is a train with
AEI-SEND flag, performs AEI status
message processing"]:::main N_UseOtherReplyMessageFormat_Node0 -- Yes --> N_UseOtherReplyMessageFormat_Node0_action N_UseOtherReplyMessageFormat_Node0_action --> E_UseOtherReplyMessageFormat S_UseOtherReplyMessageFormat --> N_UseOtherReplyMessageFormat_Node0 N_UseOtherReplyMessageFormat_Node0 -- No --> E_UseOtherReplyMessageFormat
determined for logging"}:::decision N_UseOtherReplyMessageFormat_Node0_action["The system uses USCS-LOG-MESSAGE3
format, moves it to GCX105-MESSAGE,
and if the entity is a train with
AEI-SEND flag, performs AEI status
message processing"]:::main N_UseOtherReplyMessageFormat_Node0 -- Yes --> N_UseOtherReplyMessageFormat_Node0_action N_UseOtherReplyMessageFormat_Node0_action --> E_UseOtherReplyMessageFormat S_UseOtherReplyMessageFormat --> N_UseOtherReplyMessageFormat_Node0 N_UseOtherReplyMessageFormat_Node0 -- No --> E_UseOtherReplyMessageFormat
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
An entity is being processed but status should not be updated
WHEN:
The message format needs to be determined for logging
THEN:
The system uses USCS-LOG-MESSAGE3 format, moves it to GCX105-MESSAGE, and if the entity is a train with AEI-SEND flag, performs AEI status message processing
β Consolidated Acceptance Criteria
- The primary log needs to be transmitted → the system calls Z300-SPAWN-GCT1051E to send the log entry using GCT1051E transaction
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendLogviaGCT1051ETransaction(["Start Step"])
E_SendLogviaGCT1051ETransaction(["End Step"])
N_SendLogviaGCT1051ETransaction_Node0{"The primary log needs to be
transmitted"}:::decision N_SendLogviaGCT1051ETransaction_Node0_action["The system calls
Z300-SPAWN-GCT1051E to send the log
entry using GCT1051E transaction"]:::main N_SendLogviaGCT1051ETransaction_Node0 -- Yes --> N_SendLogviaGCT1051ETransaction_Node0_action N_SendLogviaGCT1051ETransaction_Node0_action --> E_SendLogviaGCT1051ETransaction S_SendLogviaGCT1051ETransaction --> N_SendLogviaGCT1051ETransaction_Node0 N_SendLogviaGCT1051ETransaction_Node0 -- No --> E_SendLogviaGCT1051ETransaction
transmitted"}:::decision N_SendLogviaGCT1051ETransaction_Node0_action["The system calls
Z300-SPAWN-GCT1051E to send the log
entry using GCT1051E transaction"]:::main N_SendLogviaGCT1051ETransaction_Node0 -- Yes --> N_SendLogviaGCT1051ETransaction_Node0_action N_SendLogviaGCT1051ETransaction_Node0_action --> E_SendLogviaGCT1051ETransaction S_SendLogviaGCT1051ETransaction --> N_SendLogviaGCT1051ETransaction_Node0 N_SendLogviaGCT1051ETransaction_Node0 -- No --> E_SendLogviaGCT1051ETransaction
File: GCX015.cbl
GIVEN:
A log entry has been prepared with all required information
WHEN:
The primary log needs to be transmitted
THEN:
The system calls Z300-SPAWN-GCT1051E to send the log entry using GCT1051E transaction
β Consolidated Acceptance Criteria
- Error messages need to be processed for logging → the system performs A501-SEND-LOG for each K1-CNT from 1 by 1 until HOLD-K1-MESSAGE is spaces or K1-CNT exceeds 999
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessEachK1ErrorMessage(["Start Step"])
E_ProcessEachK1ErrorMessage(["End Step"])
N_ProcessEachK1ErrorMessage_Node0{"Error messages need to be processed
for logging"}:::decision N_ProcessEachK1ErrorMessage_Node0_action["The system performs A501-SEND-LOG
for each K1-CNT from 1 by 1 until
HOLD-K1-MESSAGE is spaces or K1-CNT
exceeds 999"]:::exclusion N_ProcessEachK1ErrorMessage_Node0 -- Yes -->|Alternative| N_ProcessEachK1ErrorMessage_Node0_action N_ProcessEachK1ErrorMessage_Node0_action --> E_ProcessEachK1ErrorMessage S_ProcessEachK1ErrorMessage --> N_ProcessEachK1ErrorMessage_Node0 N_ProcessEachK1ErrorMessage_Node0 -- No --> E_ProcessEachK1ErrorMessage
for logging"}:::decision N_ProcessEachK1ErrorMessage_Node0_action["The system performs A501-SEND-LOG
for each K1-CNT from 1 by 1 until
HOLD-K1-MESSAGE is spaces or K1-CNT
exceeds 999"]:::exclusion N_ProcessEachK1ErrorMessage_Node0 -- Yes -->|Alternative| N_ProcessEachK1ErrorMessage_Node0_action N_ProcessEachK1ErrorMessage_Node0_action --> E_ProcessEachK1ErrorMessage S_ProcessEachK1ErrorMessage --> N_ProcessEachK1ErrorMessage_Node0 N_ProcessEachK1ErrorMessage_Node0 -- No --> E_ProcessEachK1ErrorMessage
File: GCX015.cbl
GIVEN:
K1 error messages are present in the HOLD-K1-MESSAGE table
WHEN:
Error messages need to be processed for logging
THEN:
The system performs A501-SEND-LOG for each K1-CNT from 1 by 1 until HOLD-K1-MESSAGE is spaces or K1-CNT exceeds 999
β Consolidated Acceptance Criteria
- An individual K1 log entry needs to be prepared → the system moves log information to GCX105, sets the train or cargo identifier, sets the appropriate entity type flag, sets action code to 'ZZZ', and moves the specific K1 message to GCX105-MESSAGE
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetMessageDetailsforK1Entry(["Start Step"])
E_SetMessageDetailsforK1Entry(["End Step"])
N_SetMessageDetailsforK1Entry_Node0{"An individual K1 log entry needs to
be prepared"}:::decision N_SetMessageDetailsforK1Entry_Node0_action["The system moves log information to
GCX105, sets the train or cargo
identifier, sets the appropriate
entity type flag, sets action code
to ZZZ , and moves the specific K1
message to GCX105-MESSAGE"]:::main N_SetMessageDetailsforK1Entry_Node0 -- Yes --> N_SetMessageDetailsforK1Entry_Node0_action N_SetMessageDetailsforK1Entry_Node0_action --> E_SetMessageDetailsforK1Entry S_SetMessageDetailsforK1Entry --> N_SetMessageDetailsforK1Entry_Node0 N_SetMessageDetailsforK1Entry_Node0 -- No --> E_SetMessageDetailsforK1Entry
be prepared"}:::decision N_SetMessageDetailsforK1Entry_Node0_action["The system moves log information to
GCX105, sets the train or cargo
identifier, sets the appropriate
entity type flag, sets action code
to ZZZ , and moves the specific K1
message to GCX105-MESSAGE"]:::main N_SetMessageDetailsforK1Entry_Node0 -- Yes --> N_SetMessageDetailsforK1Entry_Node0_action N_SetMessageDetailsforK1Entry_Node0_action --> E_SetMessageDetailsforK1Entry S_SetMessageDetailsforK1Entry --> N_SetMessageDetailsforK1Entry_Node0 N_SetMessageDetailsforK1Entry_Node0 -- No --> E_SetMessageDetailsforK1Entry
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A K1 error message exists and is not spaces
WHEN:
An individual K1 log entry needs to be prepared
THEN:
The system moves log information to GCX105, sets the train or cargo identifier, sets the appropriate entity type flag, sets action code to 'ZZZ', and moves the specific K1 message to GCX105-MESSAGE
β Consolidated Acceptance Criteria
- The K1 error log needs to be transmitted → the system calls Z300-SPAWN-GCT1051E to send the K1 error log entry using GCT1051E transaction
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendK1LogEntryviaGCT1051E(["Start Step"])
E_SendK1LogEntryviaGCT1051E(["End Step"])
N_SendK1LogEntryviaGCT1051E_Node0{"The K1 error log needs to be
transmitted"}:::decision N_SendK1LogEntryviaGCT1051E_Node0_action["The system calls
Z300-SPAWN-GCT1051E to send the K1
error log entry using GCT1051E
transaction"]:::exclusion N_SendK1LogEntryviaGCT1051E_Node0 -- Yes -->|Alternative| N_SendK1LogEntryviaGCT1051E_Node0_action N_SendK1LogEntryviaGCT1051E_Node0_action --> E_SendK1LogEntryviaGCT1051E S_SendK1LogEntryviaGCT1051E --> N_SendK1LogEntryviaGCT1051E_Node0 N_SendK1LogEntryviaGCT1051E_Node0 -- No --> E_SendK1LogEntryviaGCT1051E
transmitted"}:::decision N_SendK1LogEntryviaGCT1051E_Node0_action["The system calls
Z300-SPAWN-GCT1051E to send the K1
error log entry using GCT1051E
transaction"]:::exclusion N_SendK1LogEntryviaGCT1051E_Node0 -- Yes -->|Alternative| N_SendK1LogEntryviaGCT1051E_Node0_action N_SendK1LogEntryviaGCT1051E_Node0_action --> E_SendK1LogEntryviaGCT1051E S_SendK1LogEntryviaGCT1051E --> N_SendK1LogEntryviaGCT1051E_Node0 N_SendK1LogEntryviaGCT1051E_Node0 -- No --> E_SendK1LogEntryviaGCT1051E
File: GCX015.cbl
GIVEN:
A K1 error log entry has been prepared
WHEN:
The K1 error log needs to be transmitted
THEN:
The system calls Z300-SPAWN-GCT1051E to send the K1 error log entry using GCT1051E transaction
β Consolidated Acceptance Criteria
- The system processes the K1 segment entry → the K1 segment data should be extracted and prepared for message lookup processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_K1SegmentDetected(["Start Step"])
E_K1SegmentDetected(["End Step"])
N_K1SegmentDetected_Node0{"The system processes the K1 segment
entry"}:::decision N_K1SegmentDetected_Node0_action["The K1 segment data should be
extracted and prepared for message
lookup processing"]:::main N_K1SegmentDetected_Node0 -- Yes --> N_K1SegmentDetected_Node0_action N_K1SegmentDetected_Node0_action --> E_K1SegmentDetected S_K1SegmentDetected --> N_K1SegmentDetected_Node0 N_K1SegmentDetected_Node0 -- No --> E_K1SegmentDetected
entry"}:::decision N_K1SegmentDetected_Node0_action["The K1 segment data should be
extracted and prepared for message
lookup processing"]:::main N_K1SegmentDetected_Node0 -- Yes --> N_K1SegmentDetected_Node0_action N_K1SegmentDetected_Node0_action --> E_K1SegmentDetected S_K1SegmentDetected --> N_K1SegmentDetected_Node0 N_K1SegmentDetected_Node0 -- No --> E_K1SegmentDetected
File: GCX015.cbl
GIVEN:
A K1 segment is detected in the message processing loop
WHEN:
The system processes the K1 segment entry
THEN:
- The k1 segment data should be extracted
- Prepared for message lookup processing
β Consolidated Acceptance Criteria
- The system processes the K1 segment → the message number should be extracted from K1-02-MSG-NUMBER field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractMessageNumberfromK102MSGNUMBER(["Start Step"])
E_ExtractMessageNumberfromK102MSGNUMBER(["End Step"])
N_ExtractMessageNumberfromK102MSGNUMBER_Node0{"The system processes the K1 segment"}:::decision
N_ExtractMessageNumberfromK102MSGNUMBER_Node0_action["The message number should be
extracted from K1-02-MSG-NUMBER
field"]:::main N_ExtractMessageNumberfromK102MSGNUMBER_Node0 -- Yes --> N_ExtractMessageNumberfromK102MSGNUMBER_Node0_action N_ExtractMessageNumberfromK102MSGNUMBER_Node0_action --> E_ExtractMessageNumberfromK102MSGNUMBER S_ExtractMessageNumberfromK102MSGNUMBER --> N_ExtractMessageNumberfromK102MSGNUMBER_Node0 N_ExtractMessageNumberfromK102MSGNUMBER_Node0 -- No --> E_ExtractMessageNumberfromK102MSGNUMBER
extracted from K1-02-MSG-NUMBER
field"]:::main N_ExtractMessageNumberfromK102MSGNUMBER_Node0 -- Yes --> N_ExtractMessageNumberfromK102MSGNUMBER_Node0_action N_ExtractMessageNumberfromK102MSGNUMBER_Node0_action --> E_ExtractMessageNumberfromK102MSGNUMBER S_ExtractMessageNumberfromK102MSGNUMBER --> N_ExtractMessageNumberfromK102MSGNUMBER_Node0 N_ExtractMessageNumberfromK102MSGNUMBER_Node0 -- No --> E_ExtractMessageNumberfromK102MSGNUMBER
File: GCX015.cbl
GIVEN:
A K1 segment contains message data in MQS-TABLE-ENTRY format
WHEN:
The system processes the K1 segment
THEN:
The message number should be extracted from K1-02-MSG-NUMBER field
β Consolidated Acceptance Criteria
- The system needs to look up the message in the MS table → the table key should be constructed by concatenating 'A' with the message number and stored in GCSTBRT-KEY-SEQID
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildTableKeyAMessageNumber(["Start Step"])
E_BuildTableKeyAMessageNumber(["End Step"])
N_BuildTableKeyAMessageNumber_Node0{"The system needs to look up the
message in the MS table"}:::decision N_BuildTableKeyAMessageNumber_Node0_action["The table key should be constructed
by concatenating A with the message
number and stored in
GCSTBRT-KEY-SEQID"]:::main N_BuildTableKeyAMessageNumber_Node0 -- Yes --> N_BuildTableKeyAMessageNumber_Node0_action N_BuildTableKeyAMessageNumber_Node0_action --> E_BuildTableKeyAMessageNumber S_BuildTableKeyAMessageNumber --> N_BuildTableKeyAMessageNumber_Node0 N_BuildTableKeyAMessageNumber_Node0 -- No --> E_BuildTableKeyAMessageNumber
message in the MS table"}:::decision N_BuildTableKeyAMessageNumber_Node0_action["The table key should be constructed
by concatenating A with the message
number and stored in
GCSTBRT-KEY-SEQID"]:::main N_BuildTableKeyAMessageNumber_Node0 -- Yes --> N_BuildTableKeyAMessageNumber_Node0_action N_BuildTableKeyAMessageNumber_Node0_action --> E_BuildTableKeyAMessageNumber S_BuildTableKeyAMessageNumber --> N_BuildTableKeyAMessageNumber_Node0 N_BuildTableKeyAMessageNumber_Node0 -- No --> E_BuildTableKeyAMessageNumber
File: GCX015.cbl
GIVEN:
A message number has been extracted from K1-02-MSG-NUMBER
WHEN:
The system needs to look up the message in the MS table
THEN:
- The table key should be constructed by concatenating 'a' with the message number
- Stored in gcstbrt-key-seqid
β Consolidated Acceptance Criteria
- The system performs the table lookup → the system should set table ID to 'MS', function code to 'GU', accept status to 'GE', clear return flags, and call the table lookup service
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LookUpMessageinMSTable(["Start Step"])
E_LookUpMessageinMSTable(["End Step"])
N_LookUpMessageinMSTable_Node0{"The system performs the table
lookup"}:::decision N_LookUpMessageinMSTable_Node0_action["The system should set table ID to
MS , function code to GU , accept
status to GE , clear return flags,
and call the table lookup service"]:::main N_LookUpMessageinMSTable_Node0 -- Yes --> N_LookUpMessageinMSTable_Node0_action N_LookUpMessageinMSTable_Node0_action --> E_LookUpMessageinMSTable S_LookUpMessageinMSTable --> N_LookUpMessageinMSTable_Node0 N_LookUpMessageinMSTable_Node0 -- No --> E_LookUpMessageinMSTable
lookup"}:::decision N_LookUpMessageinMSTable_Node0_action["The system should set table ID to
MS , function code to GU , accept
status to GE , clear return flags,
and call the table lookup service"]:::main N_LookUpMessageinMSTable_Node0 -- Yes --> N_LookUpMessageinMSTable_Node0_action N_LookUpMessageinMSTable_Node0_action --> E_LookUpMessageinMSTable S_LookUpMessageinMSTable --> N_LookUpMessageinMSTable_Node0 N_LookUpMessageinMSTable_Node0 -- No --> E_LookUpMessageinMSTable
File: GCX015.cbl
GIVEN:
A table key has been constructed for message lookup
WHEN:
The system performs the table lookup
THEN:
The system should set table ID to 'MS', function code to 'GU', accept status to 'GE', clear return flags, and call the table lookup service
β Consolidated Acceptance Criteria
- The lookup return flag is evaluated → if return flag equals '0' then use English text from table, otherwise use free-form message from K1 segment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageFoundinTable(["Start Step"])
E_MessageFoundinTable(["End Step"])
N_MessageFoundinTable_Node0{"The lookup return flag is evaluated"}:::decision
N_MessageFoundinTable_Node0_action["If return flag equals 0 then use
English text from table, otherwise
use free-form message from K1
segment"]:::main N_MessageFoundinTable_Node0 -- Yes --> N_MessageFoundinTable_Node0_action N_MessageFoundinTable_Node0_action --> E_MessageFoundinTable S_MessageFoundinTable --> N_MessageFoundinTable_Node0 N_MessageFoundinTable_Node0 -- No --> E_MessageFoundinTable
English text from table, otherwise
use free-form message from K1
segment"]:::main N_MessageFoundinTable_Node0 -- Yes --> N_MessageFoundinTable_Node0_action N_MessageFoundinTable_Node0_action --> E_MessageFoundinTable S_MessageFoundinTable --> N_MessageFoundinTable_Node0 N_MessageFoundinTable_Node0 -- No --> E_MessageFoundinTable
File: GCX015.cbl
GIVEN:
A table lookup has been performed for the message number
WHEN:
The lookup return flag is evaluated
THEN:
If return flag equals '0' then use English text from table, otherwise use free-form message from K1 segment
β Consolidated Acceptance Criteria
- The system processes the message text → the English text from GCSTBRT-MS-ENG-TEXT should be moved to both report lines and work message fields
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseEnglishTextfromGCSTBRTMSENGTEXT(["Start Step"])
E_UseEnglishTextfromGCSTBRTMSENGTEXT(["End Step"])
N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0{"The system processes the message
text"}:::decision N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0_action["The English text from
GCSTBRT-MS-ENG-TEXT should be moved
to both report lines and work
message fields"]:::main N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0 -- Yes --> N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0_action N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0_action --> E_UseEnglishTextfromGCSTBRTMSENGTEXT S_UseEnglishTextfromGCSTBRTMSENGTEXT --> N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0 N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0 -- No --> E_UseEnglishTextfromGCSTBRTMSENGTEXT
text"}:::decision N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0_action["The English text from
GCSTBRT-MS-ENG-TEXT should be moved
to both report lines and work
message fields"]:::main N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0 -- Yes --> N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0_action N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0_action --> E_UseEnglishTextfromGCSTBRTMSENGTEXT S_UseEnglishTextfromGCSTBRTMSENGTEXT --> N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0 N_UseEnglishTextfromGCSTBRTMSENGTEXT_Node0 -- No --> E_UseEnglishTextfromGCSTBRTMSENGTEXT
File: GCX015.cbl
GIVEN:
The table lookup was successful with return flag '0'
WHEN:
The system processes the message text
THEN:
- The english text from gcstbrt-ms-eng-text should be moved to both report lines
- Work message fields
β Consolidated Acceptance Criteria
- The system processes the message text → the free-form message from K1-02-FREE-FORM-MESSAGE should be moved to both report lines and work message fields
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseFreeFormMessagefromK102FREEFORMMESSAGE(["Start Step"])
E_UseFreeFormMessagefromK102FREEFORMMESSAGE(["End Step"])
N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0{"The system processes the message
text"}:::decision N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0_action["The free-form message from
K1-02-FREE-FORM-MESSAGE should be
moved to both report lines and work
message fields"]:::main N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0 -- Yes --> N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0_action N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0_action --> E_UseFreeFormMessagefromK102FREEFORMMESSAGE S_UseFreeFormMessagefromK102FREEFORMMESSAGE --> N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0 N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0 -- No --> E_UseFreeFormMessagefromK102FREEFORMMESSAGE
text"}:::decision N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0_action["The free-form message from
K1-02-FREE-FORM-MESSAGE should be
moved to both report lines and work
message fields"]:::main N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0 -- Yes --> N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0_action N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0_action --> E_UseFreeFormMessagefromK102FREEFORMMESSAGE S_UseFreeFormMessagefromK102FREEFORMMESSAGE --> N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0 N_UseFreeFormMessagefromK102FREEFORMMESSAGE_Node0 -- No --> E_UseFreeFormMessagefromK102FREEFORMMESSAGE
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The table lookup failed with return flag not equal to '0'
WHEN:
The system processes the message text
THEN:
- The free-form message from k1-02-free-form-message should be moved to both report lines
- Work message fields
β Consolidated Acceptance Criteria
- The system adds the message to the report → the message should be added to MRLN-LINES at the current line count position and the line counter should be incremented by 1
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddMessagetoReportLines(["Start Step"])
E_AddMessagetoReportLines(["End Step"])
N_AddMessagetoReportLines_Node0{"The system adds the message to the
report"}:::decision N_AddMessagetoReportLines_Node0_action["The message should be added to
MRLN-LINES at the current line count
position and the line counter should
be incremented by 1"]:::main N_AddMessagetoReportLines_Node0 -- Yes --> N_AddMessagetoReportLines_Node0_action N_AddMessagetoReportLines_Node0_action --> E_AddMessagetoReportLines S_AddMessagetoReportLines --> N_AddMessagetoReportLines_Node0 N_AddMessagetoReportLines_Node0 -- No --> E_AddMessagetoReportLines
report"}:::decision N_AddMessagetoReportLines_Node0_action["The message should be added to
MRLN-LINES at the current line count
position and the line counter should
be incremented by 1"]:::main N_AddMessagetoReportLines_Node0 -- Yes --> N_AddMessagetoReportLines_Node0_action N_AddMessagetoReportLines_Node0_action --> E_AddMessagetoReportLines S_AddMessagetoReportLines --> N_AddMessagetoReportLines_Node0 N_AddMessagetoReportLines_Node0 -- No --> E_AddMessagetoReportLines
File: GCX015.cbl
GIVEN:
Message text has been determined from either table lookup or free-form source
WHEN:
The system adds the message to the report
THEN:
- The message should be added to mrln-lines at the current line count position
- The line counter should be incremented by 1
β Consolidated Acceptance Criteria
- The system checks for special message processing requirements → if K1-02-MSG-NUMBER equals '242' then proceed with C4 code processing, otherwise increment K1 counter and end processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MessageNumber242(["Start Step"])
E_MessageNumber242(["End Step"])
N_MessageNumber242_Node0{"The system checks for special
message processing requirements"}:::decision N_MessageNumber242_Node0_action["If K1-02-MSG-NUMBER equals 242 then
proceed with C4 code processing,
otherwise increment K1 counter and
end processing"]:::main N_MessageNumber242_Node0 -- Yes --> N_MessageNumber242_Node0_action N_MessageNumber242_Node0_action --> E_MessageNumber242 S_MessageNumber242 --> N_MessageNumber242_Node0 N_MessageNumber242_Node0 -- No --> E_MessageNumber242
message processing requirements"}:::decision N_MessageNumber242_Node0_action["If K1-02-MSG-NUMBER equals 242 then
proceed with C4 code processing,
otherwise increment K1 counter and
end processing"]:::main N_MessageNumber242_Node0 -- Yes --> N_MessageNumber242_Node0_action N_MessageNumber242_Node0_action --> E_MessageNumber242 S_MessageNumber242 --> N_MessageNumber242_Node0 N_MessageNumber242_Node0 -- No --> E_MessageNumber242
File: GCX015.cbl
GIVEN:
A K1 message has been processed and stored
WHEN:
The system checks for special message processing requirements
THEN:
- If k1-02-msg-number equals '242' then proceed with c4 code processing, otherwise increment k1 counter
- End processing
β Consolidated Acceptance Criteria
- The system adds the C4 message to the report → the C4 message should be moved to MRLN-LINES at the current line count position and the line counter should be incremented by 1
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddC4CodetoReport(["Start Step"])
E_AddC4CodetoReport(["End Step"])
N_AddC4CodetoReport_Node0{"The system adds the C4 message to
the report"}:::decision N_AddC4CodetoReport_Node0_action["The C4 message should be moved to
MRLN-LINES at the current line count
position and the line counter should
be incremented by 1"]:::main N_AddC4CodetoReport_Node0 -- Yes --> N_AddC4CodetoReport_Node0_action N_AddC4CodetoReport_Node0_action --> E_AddC4CodetoReport S_AddC4CodetoReport --> N_AddC4CodetoReport_Node0 N_AddC4CodetoReport_Node0 -- No --> E_AddC4CodetoReport
the report"}:::decision N_AddC4CodetoReport_Node0_action["The C4 message should be moved to
MRLN-LINES at the current line count
position and the line counter should
be incremented by 1"]:::main N_AddC4CodetoReport_Node0 -- Yes --> N_AddC4CodetoReport_Node0_action N_AddC4CodetoReport_Node0_action --> E_AddC4CodetoReport S_AddC4CodetoReport --> N_AddC4CodetoReport_Node0 N_AddC4CodetoReport_Node0 -- No --> E_AddC4CodetoReport
File: GCX015.cbl
GIVEN:
A C4 code message has been constructed
WHEN:
The system adds the C4 message to the report
THEN:
- The c4 message should be moved to mrln-lines at the current line count position
- The line counter should be incremented by 1
β Consolidated Acceptance Criteria
- The system finalizes the K1 processing → the K1-CNT counter should be incremented by 1
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IncrementK1Counter(["Start Step"])
E_IncrementK1Counter(["End Step"])
N_IncrementK1Counter_Node0{"The system finalizes the K1
processing"}:::decision N_IncrementK1Counter_Node0_action["The K1-CNT counter should be
incremented by 1"]:::main N_IncrementK1Counter_Node0 -- Yes --> N_IncrementK1Counter_Node0_action N_IncrementK1Counter_Node0_action --> E_IncrementK1Counter S_IncrementK1Counter --> N_IncrementK1Counter_Node0 N_IncrementK1Counter_Node0 -- No --> E_IncrementK1Counter
processing"}:::decision N_IncrementK1Counter_Node0_action["The K1-CNT counter should be
incremented by 1"]:::main N_IncrementK1Counter_Node0 -- Yes --> N_IncrementK1Counter_Node0_action N_IncrementK1Counter_Node0_action --> E_IncrementK1Counter S_IncrementK1Counter --> N_IncrementK1Counter_Node0 N_IncrementK1Counter_Node0 -- No --> E_IncrementK1Counter
File: GCX015.cbl
GIVEN:
K1 message processing has been completed
WHEN:
The system finalizes the K1 processing
THEN:
The K1-CNT counter should be incremented by 1
β Consolidated Acceptance Criteria
- The cargo retrieval operation begins → the cargo found flag (88-USCARGO-TRAIN-FOUND) should be set to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCargoFoundFlag(["Start Step"])
E_SetCargoFoundFlag(["End Step"])
N_SetCargoFoundFlag_Node0{"The cargo retrieval operation
begins"}:::decision N_SetCargoFoundFlag_Node0_action["The cargo found flag
88-USCARGO-TRAIN-FOUND should be set
to true"]:::main N_SetCargoFoundFlag_Node0 -- Yes --> N_SetCargoFoundFlag_Node0_action N_SetCargoFoundFlag_Node0_action --> E_SetCargoFoundFlag S_SetCargoFoundFlag --> N_SetCargoFoundFlag_Node0 N_SetCargoFoundFlag_Node0 -- No --> E_SetCargoFoundFlag
begins"}:::decision N_SetCargoFoundFlag_Node0_action["The cargo found flag
88-USCARGO-TRAIN-FOUND should be set
to true"]:::main N_SetCargoFoundFlag_Node0 -- Yes --> N_SetCargoFoundFlag_Node0_action N_SetCargoFoundFlag_Node0_action --> E_SetCargoFoundFlag S_SetCargoFoundFlag --> N_SetCargoFoundFlag_Node0 N_SetCargoFoundFlag_Node0 -- No --> E_SetCargoFoundFlag
File: GCX015.cbl
GIVEN:
The system is starting cargo record retrieval process
WHEN:
The cargo retrieval operation begins
THEN:
The cargo found flag (88-USCARGO-TRAIN-FOUND) should be set to true
β Consolidated Acceptance Criteria
- The cargo retrieval process is initiated → the cargo segment (GCSUSRT-SEGMENT) should be initialized with spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeCargoSegment(["Start Step"])
E_InitializeCargoSegment(["End Step"])
N_InitializeCargoSegment_Node0{"The cargo retrieval process is
initiated"}:::decision N_InitializeCargoSegment_Node0_action["The cargo segment GCSUSRT-SEGMENT
should be initialized with spaces"]:::main N_InitializeCargoSegment_Node0 -- Yes --> N_InitializeCargoSegment_Node0_action N_InitializeCargoSegment_Node0_action --> E_InitializeCargoSegment S_InitializeCargoSegment --> N_InitializeCargoSegment_Node0 N_InitializeCargoSegment_Node0 -- No --> E_InitializeCargoSegment
initiated"}:::decision N_InitializeCargoSegment_Node0_action["The cargo segment GCSUSRT-SEGMENT
should be initialized with spaces"]:::main N_InitializeCargoSegment_Node0 -- Yes --> N_InitializeCargoSegment_Node0_action N_InitializeCargoSegment_Node0_action --> E_InitializeCargoSegment S_InitializeCargoSegment --> N_InitializeCargoSegment_Node0 N_InitializeCargoSegment_Node0 -- No --> E_InitializeCargoSegment
File: GCX015.cbl
GIVEN:
The system needs to retrieve cargo records from the database
WHEN:
The cargo retrieval process is initiated
THEN:
The cargo segment (GCSUSRT-SEGMENT) should be initialized with spaces
β Consolidated Acceptance Criteria
- Setting up the database operation parameters → the database function should be set to GET (GCWUSIO-FUNC-GU) and segment type should be set to cargo segment (GCWUSIO-SEG-GCSUSRT) and index usage should be set to not used (GCWUSIO-INDEX-NOT-USED)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetDatabaseFunctiontoGET(["Start Step"])
E_SetDatabaseFunctiontoGET(["End Step"])
N_SetDatabaseFunctiontoGET_Node0{"Setting up the database operation
parameters"}:::decision N_SetDatabaseFunctiontoGET_Node0_action["The database function should be set
to GET GCWUSIO-FUNC-GU and segment
type should be set to cargo segment
GCWUSIO-SEG-GCSUSRT and index usage
should be set to not used
GCWUSIO-INDEX-NOT-USED"]:::main N_SetDatabaseFunctiontoGET_Node0 -- Yes --> N_SetDatabaseFunctiontoGET_Node0_action N_SetDatabaseFunctiontoGET_Node0_action --> E_SetDatabaseFunctiontoGET S_SetDatabaseFunctiontoGET --> N_SetDatabaseFunctiontoGET_Node0 N_SetDatabaseFunctiontoGET_Node0 -- No --> E_SetDatabaseFunctiontoGET
parameters"}:::decision N_SetDatabaseFunctiontoGET_Node0_action["The database function should be set
to GET GCWUSIO-FUNC-GU and segment
type should be set to cargo segment
GCWUSIO-SEG-GCSUSRT and index usage
should be set to not used
GCWUSIO-INDEX-NOT-USED"]:::main N_SetDatabaseFunctiontoGET_Node0 -- Yes --> N_SetDatabaseFunctiontoGET_Node0_action N_SetDatabaseFunctiontoGET_Node0_action --> E_SetDatabaseFunctiontoGET S_SetDatabaseFunctiontoGET --> N_SetDatabaseFunctiontoGET_Node0 N_SetDatabaseFunctiontoGET_Node0 -- No --> E_SetDatabaseFunctiontoGET
File: GCX015.cbl
GIVEN:
The system needs to retrieve cargo records from the database
WHEN:
Setting up the database operation parameters
THEN:
The database function should be set to GET (GCWUSIO-FUNC-GU) and segment type should be set to cargo segment (GCWUSIO-SEG-GCSUSRT) and index usage should be set to not used (GCWUSIO-INDEX-NOT-USED)
β Consolidated Acceptance Criteria
- Preparing to search for cargo records in the database → the cargo search key (GCUSRT-US-CCN-KEY) should be set to the message data value (WORK-M10-12-DATA)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUSCCNKEYfromMessageData(["Start Step"])
E_SetUSCCNKEYfromMessageData(["End Step"])
N_SetUSCCNKEYfromMessageData_Node0{"Preparing to search for cargo
records in the database"}:::decision N_SetUSCCNKEYfromMessageData_Node0_action["The cargo search key
GCUSRT-US-CCN-KEY should be set to
the message data value
WORK-M10-12-DATA"]:::main N_SetUSCCNKEYfromMessageData_Node0 -- Yes --> N_SetUSCCNKEYfromMessageData_Node0_action N_SetUSCCNKEYfromMessageData_Node0_action --> E_SetUSCCNKEYfromMessageData S_SetUSCCNKEYfromMessageData --> N_SetUSCCNKEYfromMessageData_Node0 N_SetUSCCNKEYfromMessageData_Node0 -- No --> E_SetUSCCNKEYfromMessageData
records in the database"}:::decision N_SetUSCCNKEYfromMessageData_Node0_action["The cargo search key
GCUSRT-US-CCN-KEY should be set to
the message data value
WORK-M10-12-DATA"]:::main N_SetUSCCNKEYfromMessageData_Node0 -- Yes --> N_SetUSCCNKEYfromMessageData_Node0_action N_SetUSCCNKEYfromMessageData_Node0_action --> E_SetUSCCNKEYfromMessageData S_SetUSCCNKEYfromMessageData --> N_SetUSCCNKEYfromMessageData_Node0 N_SetUSCCNKEYfromMessageData_Node0 -- No --> E_SetUSCCNKEYfromMessageData
File: GCX015.cbl
GIVEN:
The system has processed message data containing cargo identification information
WHEN:
Preparing to search for cargo records in the database
THEN:
The cargo search key (GCUSRT-US-CCN-KEY) should be set to the message data value (WORK-M10-12-DATA)
β Consolidated Acceptance Criteria
- Executing the cargo record retrieval → the system should call the database interface (GCCUSIO) with the communication control block, operation parameters, and cargo segment
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallDatabasetoGetCargoRecord(["Start Step"])
E_CallDatabasetoGetCargoRecord(["End Step"])
N_CallDatabasetoGetCargoRecord_Node0{"Executing the cargo record
retrieval"}:::decision N_CallDatabasetoGetCargoRecord_Node0_action["The system should call the database
interface GCCUSIO with the
communication control block,
operation parameters, and cargo
segment"]:::main N_CallDatabasetoGetCargoRecord_Node0 -- Yes --> N_CallDatabasetoGetCargoRecord_Node0_action N_CallDatabasetoGetCargoRecord_Node0_action --> E_CallDatabasetoGetCargoRecord S_CallDatabasetoGetCargoRecord --> N_CallDatabasetoGetCargoRecord_Node0 N_CallDatabasetoGetCargoRecord_Node0 -- No --> E_CallDatabasetoGetCargoRecord
retrieval"}:::decision N_CallDatabasetoGetCargoRecord_Node0_action["The system should call the database
interface GCCUSIO with the
communication control block,
operation parameters, and cargo
segment"]:::main N_CallDatabasetoGetCargoRecord_Node0 -- Yes --> N_CallDatabasetoGetCargoRecord_Node0_action N_CallDatabasetoGetCargoRecord_Node0_action --> E_CallDatabasetoGetCargoRecord S_CallDatabasetoGetCargoRecord --> N_CallDatabasetoGetCargoRecord_Node0 N_CallDatabasetoGetCargoRecord_Node0 -- No --> E_CallDatabasetoGetCargoRecord
File: GCX015.cbl
GIVEN:
The database operation parameters are configured and the search key is set
WHEN:
Executing the cargo record retrieval
THEN:
The system should call the database interface (GCCUSIO) with the communication control block, operation parameters, and cargo segment
β Consolidated Acceptance Criteria
- Checking the result of the cargo record retrieval → if the status code (CC-STATUS-CODE) is not spaces, the cargo record was not found, otherwise the cargo record was found successfully
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CargoRecordFound(["Start Step"])
E_CargoRecordFound(["End Step"])
N_CargoRecordFound_Node0{"Checking the result of the cargo
record retrieval"}:::decision N_CargoRecordFound_Node0_action["If the status code CC-STATUS-CODE
is not spaces, the cargo record was
not found, otherwise the cargo
record was found successfully"]:::main N_CargoRecordFound_Node0 -- Yes --> N_CargoRecordFound_Node0_action N_CargoRecordFound_Node0_action --> E_CargoRecordFound S_CargoRecordFound --> N_CargoRecordFound_Node0 N_CargoRecordFound_Node0 -- No --> E_CargoRecordFound
record retrieval"}:::decision N_CargoRecordFound_Node0_action["If the status code CC-STATUS-CODE
is not spaces, the cargo record was
not found, otherwise the cargo
record was found successfully"]:::main N_CargoRecordFound_Node0 -- Yes --> N_CargoRecordFound_Node0_action N_CargoRecordFound_Node0_action --> E_CargoRecordFound S_CargoRecordFound --> N_CargoRecordFound_Node0 N_CargoRecordFound_Node0 -- No --> E_CargoRecordFound
File: GCX015.cbl
GIVEN:
The database retrieval operation has been executed
WHEN:
Checking the result of the cargo record retrieval
THEN:
If the status code (CC-STATUS-CODE) is not spaces, the cargo record was not found, otherwise the cargo record was found successfully
β Consolidated Acceptance Criteria
- Processing the failed cargo record lookup → the cargo not found flag (88-USCARGO-TRAIN-NOTFND) should be set to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCargoNotFoundFlag(["Start Step"])
E_SetCargoNotFoundFlag(["End Step"])
N_SetCargoNotFoundFlag_Node0{"Processing the failed cargo record
lookup"}:::decision N_SetCargoNotFoundFlag_Node0_action["The cargo not found flag
88-USCARGO-TRAIN-NOTFND should be
set to true"]:::exclusion N_SetCargoNotFoundFlag_Node0 -- Yes -->|Alternative| N_SetCargoNotFoundFlag_Node0_action N_SetCargoNotFoundFlag_Node0_action --> E_SetCargoNotFoundFlag S_SetCargoNotFoundFlag --> N_SetCargoNotFoundFlag_Node0 N_SetCargoNotFoundFlag_Node0 -- No --> E_SetCargoNotFoundFlag
lookup"}:::decision N_SetCargoNotFoundFlag_Node0_action["The cargo not found flag
88-USCARGO-TRAIN-NOTFND should be
set to true"]:::exclusion N_SetCargoNotFoundFlag_Node0 -- Yes -->|Alternative| N_SetCargoNotFoundFlag_Node0_action N_SetCargoNotFoundFlag_Node0_action --> E_SetCargoNotFoundFlag S_SetCargoNotFoundFlag --> N_SetCargoNotFoundFlag_Node0 N_SetCargoNotFoundFlag_Node0 -- No --> E_SetCargoNotFoundFlag
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The cargo record retrieval operation returned a non-space status code indicating record not found
WHEN:
Processing the failed cargo record lookup
THEN:
The cargo not found flag (88-USCARGO-TRAIN-NOTFND) should be set to true
β Consolidated Acceptance Criteria
- Handling the cargo record not found condition → an error message 'THIS US-CCN-KEY WAS NOT FOUND: ' should be added to the report lines and the line count should be incremented by 1
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddErrorMessagetoReport(["Start Step"])
E_AddErrorMessagetoReport(["End Step"])
N_AddErrorMessagetoReport_Node0{"Handling the cargo record not found
condition"}:::decision N_AddErrorMessagetoReport_Node0_action["An error message THIS US-CCN-KEY
WAS NOT FOUND: should be added to
the report lines and the line count
should be incremented by 1"]:::main N_AddErrorMessagetoReport_Node0 -- Yes --> N_AddErrorMessagetoReport_Node0_action N_AddErrorMessagetoReport_Node0_action --> E_AddErrorMessagetoReport S_AddErrorMessagetoReport --> N_AddErrorMessagetoReport_Node0 N_AddErrorMessagetoReport_Node0 -- No --> E_AddErrorMessagetoReport
condition"}:::decision N_AddErrorMessagetoReport_Node0_action["An error message THIS US-CCN-KEY
WAS NOT FOUND: should be added to
the report lines and the line count
should be incremented by 1"]:::main N_AddErrorMessagetoReport_Node0 -- Yes --> N_AddErrorMessagetoReport_Node0_action N_AddErrorMessagetoReport_Node0_action --> E_AddErrorMessagetoReport S_AddErrorMessagetoReport --> N_AddErrorMessagetoReport_Node0 N_AddErrorMessagetoReport_Node0 -- No --> E_AddErrorMessagetoReport
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The cargo record was not found in the database
WHEN:
Handling the cargo record not found condition
THEN:
- An error message 'this us-ccn-key was not found: ' should be added to the report lines
- The line count should be incremented by 1
β Consolidated Acceptance Criteria
- Setting up reporting keys for the found cargo record → the Merlin key should be set to the message data value (WORK-M10-12-DATA) and the Merlin sub-key should be set to the cargo equipment car number (GCUSRT-RT081-EQUIPMENT-CAR)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetMerlinKeysforReporting(["Start Step"])
E_SetMerlinKeysforReporting(["End Step"])
N_SetMerlinKeysforReporting_Node0{"Setting up reporting keys for the
found cargo record"}:::decision N_SetMerlinKeysforReporting_Node0_action["The Merlin key should be set to the
message data value WORK-M10-12-DATA
and the Merlin sub-key should be set
to the cargo equipment car number
GCUSRT-RT081-EQUIPMENT-CAR"]:::main N_SetMerlinKeysforReporting_Node0 -- Yes --> N_SetMerlinKeysforReporting_Node0_action N_SetMerlinKeysforReporting_Node0_action --> E_SetMerlinKeysforReporting S_SetMerlinKeysforReporting --> N_SetMerlinKeysforReporting_Node0 N_SetMerlinKeysforReporting_Node0 -- No --> E_SetMerlinKeysforReporting
found cargo record"}:::decision N_SetMerlinKeysforReporting_Node0_action["The Merlin key should be set to the
message data value WORK-M10-12-DATA
and the Merlin sub-key should be set
to the cargo equipment car number
GCUSRT-RT081-EQUIPMENT-CAR"]:::main N_SetMerlinKeysforReporting_Node0 -- Yes --> N_SetMerlinKeysforReporting_Node0_action N_SetMerlinKeysforReporting_Node0_action --> E_SetMerlinKeysforReporting S_SetMerlinKeysforReporting --> N_SetMerlinKeysforReporting_Node0 N_SetMerlinKeysforReporting_Node0 -- No --> E_SetMerlinKeysforReporting
File: GCX015.cbl
GIVEN:
The cargo record has been successfully retrieved from the database
WHEN:
Setting up reporting keys for the found cargo record
THEN:
The Merlin key should be set to the message data value (WORK-M10-12-DATA) and the Merlin sub-key should be set to the cargo equipment car number (GCUSRT-RT081-EQUIPMENT-CAR)
β Consolidated Acceptance Criteria
- The train record retrieval section is invoked → the system should set the train found flag to true and initialize database access parameters
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_StartTrainRecordRetrieval(["Start Step"])
E_StartTrainRecordRetrieval(["End Step"])
N_StartTrainRecordRetrieval_Node0{"The train record retrieval section
is invoked"}:::decision N_StartTrainRecordRetrieval_Node0_action["The system should set the train
found flag to true and initialize
database access parameters"]:::main N_StartTrainRecordRetrieval_Node0 -- Yes --> N_StartTrainRecordRetrieval_Node0_action N_StartTrainRecordRetrieval_Node0_action --> E_StartTrainRecordRetrieval S_StartTrainRecordRetrieval --> N_StartTrainRecordRetrieval_Node0 N_StartTrainRecordRetrieval_Node0 -- No --> E_StartTrainRecordRetrieval
is invoked"}:::decision N_StartTrainRecordRetrieval_Node0_action["The system should set the train
found flag to true and initialize
database access parameters"]:::main N_StartTrainRecordRetrieval_Node0 -- Yes --> N_StartTrainRecordRetrieval_Node0_action N_StartTrainRecordRetrieval_Node0_action --> E_StartTrainRecordRetrieval S_StartTrainRecordRetrieval --> N_StartTrainRecordRetrieval_Node0 N_StartTrainRecordRetrieval_Node0 -- No --> E_StartTrainRecordRetrieval
File: GCX015.cbl
GIVEN:
A train record retrieval process needs to be started
WHEN:
The train record retrieval section is invoked
THEN:
- The system should set the train found flag to true
- Initialize database access parameters
β Consolidated Acceptance Criteria
- The train retrieval process begins → the system should set the train found flag to true as the default state
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTrainFoundFlag(["Start Step"])
E_SetTrainFoundFlag(["End Step"])
N_SetTrainFoundFlag_Node0{"The train retrieval process begins"}:::decision
N_SetTrainFoundFlag_Node0_action["The system should set the train
found flag to true as the default
state"]:::main N_SetTrainFoundFlag_Node0 -- Yes --> N_SetTrainFoundFlag_Node0_action N_SetTrainFoundFlag_Node0_action --> E_SetTrainFoundFlag S_SetTrainFoundFlag --> N_SetTrainFoundFlag_Node0 N_SetTrainFoundFlag_Node0 -- No --> E_SetTrainFoundFlag
found flag to true as the default
state"]:::main N_SetTrainFoundFlag_Node0 -- Yes --> N_SetTrainFoundFlag_Node0_action N_SetTrainFoundFlag_Node0_action --> E_SetTrainFoundFlag S_SetTrainFoundFlag --> N_SetTrainFoundFlag_Node0 N_SetTrainFoundFlag_Node0 -- No --> E_SetTrainFoundFlag
File: GCX015.cbl
GIVEN:
A train record lookup is about to be performed
WHEN:
The train retrieval process begins
THEN:
The system should set the train found flag to true as the default state
β Consolidated Acceptance Criteria
- Database access parameters are being configured → the system should set the function code to GET, set root-only access, set equal search criteria, and assign the appropriate PCB
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ConfigureDatabaseAccessParameters(["Start Step"])
E_ConfigureDatabaseAccessParameters(["End Step"])
N_ConfigureDatabaseAccessParameters_Node0{"Database access parameters are
being configured"}:::decision N_ConfigureDatabaseAccessParameters_Node0_action["The system should set the function
code to GET, set root-only access,
set equal search criteria, and
assign the appropriate PCB"]:::main N_ConfigureDatabaseAccessParameters_Node0 -- Yes --> N_ConfigureDatabaseAccessParameters_Node0_action N_ConfigureDatabaseAccessParameters_Node0_action --> E_ConfigureDatabaseAccessParameters S_ConfigureDatabaseAccessParameters --> N_ConfigureDatabaseAccessParameters_Node0 N_ConfigureDatabaseAccessParameters_Node0 -- No --> E_ConfigureDatabaseAccessParameters
being configured"}:::decision N_ConfigureDatabaseAccessParameters_Node0_action["The system should set the function
code to GET, set root-only access,
set equal search criteria, and
assign the appropriate PCB"]:::main N_ConfigureDatabaseAccessParameters_Node0 -- Yes --> N_ConfigureDatabaseAccessParameters_Node0_action N_ConfigureDatabaseAccessParameters_Node0_action --> E_ConfigureDatabaseAccessParameters S_ConfigureDatabaseAccessParameters --> N_ConfigureDatabaseAccessParameters_Node0 N_ConfigureDatabaseAccessParameters_Node0 -- No --> E_ConfigureDatabaseAccessParameters
File: GCX015.cbl
GIVEN:
A train record needs to be retrieved from the database
WHEN:
Database access parameters are being configured
THEN:
The system should set the function code to GET, set root-only access, set equal search criteria, and assign the appropriate PCB
β Consolidated Acceptance Criteria
- Setting up the database search criteria → the system should move the work message data to the train list US customer train ID field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUSCUSTTRAINIDfromMessageData(["Start Step"])
E_SetUSCUSTTRAINIDfromMessageData(["End Step"])
N_SetUSCUSTTRAINIDfromMessageData_Node0{"Setting up the database search
criteria"}:::decision N_SetUSCUSTTRAINIDfromMessageData_Node0_action["The system should move the work
message data to the train list US
customer train ID field"]:::main N_SetUSCUSTTRAINIDfromMessageData_Node0 -- Yes --> N_SetUSCUSTTRAINIDfromMessageData_Node0_action N_SetUSCUSTTRAINIDfromMessageData_Node0_action --> E_SetUSCUSTTRAINIDfromMessageData S_SetUSCUSTTRAINIDfromMessageData --> N_SetUSCUSTTRAINIDfromMessageData_Node0 N_SetUSCUSTTRAINIDfromMessageData_Node0 -- No --> E_SetUSCUSTTRAINIDfromMessageData
criteria"}:::decision N_SetUSCUSTTRAINIDfromMessageData_Node0_action["The system should move the work
message data to the train list US
customer train ID field"]:::main N_SetUSCUSTTRAINIDfromMessageData_Node0 -- Yes --> N_SetUSCUSTTRAINIDfromMessageData_Node0_action N_SetUSCUSTTRAINIDfromMessageData_Node0_action --> E_SetUSCUSTTRAINIDfromMessageData S_SetUSCUSTTRAINIDfromMessageData --> N_SetUSCUSTTRAINIDfromMessageData_Node0 N_SetUSCUSTTRAINIDfromMessageData_Node0 -- No --> E_SetUSCUSTTRAINIDfromMessageData
File: GCX015.cbl
GIVEN:
Message data contains a train identifier
WHEN:
Setting up the database search criteria
THEN:
The system should move the work message data to the train list US customer train ID field
β Consolidated Acceptance Criteria
- The database lookup is executed → the system should call the database utility program with the common communication area, database parameters, and train list structure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallDatabasetoGetTrainRecord(["Start Step"])
E_CallDatabasetoGetTrainRecord(["End Step"])
N_CallDatabasetoGetTrainRecord_Node0{"The database lookup is executed"}:::decision
N_CallDatabasetoGetTrainRecord_Node0_action["The system should call the database
utility program with the common
communication area, database
parameters, and train list structure"]:::main N_CallDatabasetoGetTrainRecord_Node0 -- Yes --> N_CallDatabasetoGetTrainRecord_Node0_action N_CallDatabasetoGetTrainRecord_Node0_action --> E_CallDatabasetoGetTrainRecord S_CallDatabasetoGetTrainRecord --> N_CallDatabasetoGetTrainRecord_Node0 N_CallDatabasetoGetTrainRecord_Node0 -- No --> E_CallDatabasetoGetTrainRecord
utility program with the common
communication area, database
parameters, and train list structure"]:::main N_CallDatabasetoGetTrainRecord_Node0 -- Yes --> N_CallDatabasetoGetTrainRecord_Node0_action N_CallDatabasetoGetTrainRecord_Node0_action --> E_CallDatabasetoGetTrainRecord S_CallDatabasetoGetTrainRecord --> N_CallDatabasetoGetTrainRecord_Node0 N_CallDatabasetoGetTrainRecord_Node0 -- No --> E_CallDatabasetoGetTrainRecord
File: GCX015.cbl
GIVEN:
Database access parameters are configured and train ID is set
WHEN:
The database lookup is executed
THEN:
The system should call the database utility program with the common communication area, database parameters, and train list structure
β Consolidated Acceptance Criteria
- Checking the result of the database call → the system should evaluate if the status code is not spaces to determine if the record was found
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainRecordFound(["Start Step"])
E_TrainRecordFound(["End Step"])
N_TrainRecordFound_Node0{"Checking the result of the database
call"}:::decision N_TrainRecordFound_Node0_action["The system should evaluate if the
status code is not spaces to
determine if the record was found"]:::main N_TrainRecordFound_Node0 -- Yes --> N_TrainRecordFound_Node0_action N_TrainRecordFound_Node0_action --> E_TrainRecordFound S_TrainRecordFound --> N_TrainRecordFound_Node0 N_TrainRecordFound_Node0 -- No --> E_TrainRecordFound
call"}:::decision N_TrainRecordFound_Node0_action["The system should evaluate if the
status code is not spaces to
determine if the record was found"]:::main N_TrainRecordFound_Node0 -- Yes --> N_TrainRecordFound_Node0_action N_TrainRecordFound_Node0_action --> E_TrainRecordFound S_TrainRecordFound --> N_TrainRecordFound_Node0 N_TrainRecordFound_Node0 -- No --> E_TrainRecordFound
File: GCX015.cbl
GIVEN:
A database lookup for a train record has been executed
WHEN:
Checking the result of the database call
THEN:
The system should evaluate if the status code is not spaces to determine if the record was found
β Consolidated Acceptance Criteria
- The database status code indicates the record was not found → the system should set the train not found flag to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTrainNotFoundFlag(["Start Step"])
E_SetTrainNotFoundFlag(["End Step"])
N_SetTrainNotFoundFlag_Node0{"The database status code indicates
the record was not found"}:::decision N_SetTrainNotFoundFlag_Node0_action["The system should set the train not
found flag to true"]:::main N_SetTrainNotFoundFlag_Node0 -- Yes --> N_SetTrainNotFoundFlag_Node0_action N_SetTrainNotFoundFlag_Node0_action --> E_SetTrainNotFoundFlag S_SetTrainNotFoundFlag --> N_SetTrainNotFoundFlag_Node0 N_SetTrainNotFoundFlag_Node0 -- No --> E_SetTrainNotFoundFlag
the record was not found"}:::decision N_SetTrainNotFoundFlag_Node0_action["The system should set the train not
found flag to true"]:::main N_SetTrainNotFoundFlag_Node0 -- Yes --> N_SetTrainNotFoundFlag_Node0_action N_SetTrainNotFoundFlag_Node0_action --> E_SetTrainNotFoundFlag S_SetTrainNotFoundFlag --> N_SetTrainNotFoundFlag_Node0 N_SetTrainNotFoundFlag_Node0 -- No --> E_SetTrainNotFoundFlag
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train database lookup has been performed
WHEN:
The database status code indicates the record was not found
THEN:
The system should set the train not found flag to true
β Consolidated Acceptance Criteria
- The train ID is not found in the database → the system should move the message 'THIS US-TRAIN-ID WAS NOT FOUND: ' to the error report line and increment the line counter
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LogTrainIDNotFoundError(["Start Step"])
E_LogTrainIDNotFoundError(["End Step"])
N_LogTrainIDNotFoundError_Node0{"The train ID is not found in the
database"}:::decision N_LogTrainIDNotFoundError_Node0_action["The system should move the message
THIS US-TRAIN-ID WAS NOT FOUND: to
the error report line and increment
the line counter"]:::main N_LogTrainIDNotFoundError_Node0 -- Yes --> N_LogTrainIDNotFoundError_Node0_action N_LogTrainIDNotFoundError_Node0_action --> E_LogTrainIDNotFoundError S_LogTrainIDNotFoundError --> N_LogTrainIDNotFoundError_Node0 N_LogTrainIDNotFoundError_Node0 -- No --> E_LogTrainIDNotFoundError
database"}:::decision N_LogTrainIDNotFoundError_Node0_action["The system should move the message
THIS US-TRAIN-ID WAS NOT FOUND: to
the error report line and increment
the line counter"]:::main N_LogTrainIDNotFoundError_Node0 -- Yes --> N_LogTrainIDNotFoundError_Node0_action N_LogTrainIDNotFoundError_Node0_action --> E_LogTrainIDNotFoundError S_LogTrainIDNotFoundError --> N_LogTrainIDNotFoundError_Node0 N_LogTrainIDNotFoundError_Node0 -- No --> E_LogTrainIDNotFoundError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train record lookup has failed
WHEN:
The train ID is not found in the database
THEN:
- The system should move the message 'this us-train-id was not found: ' to the error report line
- Increment the line counter
β Consolidated Acceptance Criteria
- Setting up logging information → the system should move the work message data to the Merlin key and move the train ID to the Merlin sub-key
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetMerlinKeysforLogging(["Start Step"])
E_SetMerlinKeysforLogging(["End Step"])
N_SetMerlinKeysforLogging_Node0{"Setting up logging information"}:::decision
N_SetMerlinKeysforLogging_Node0_action["The system should move the work
message data to the Merlin key and
move the train ID to the Merlin
sub-key"]:::main N_SetMerlinKeysforLogging_Node0 -- Yes --> N_SetMerlinKeysforLogging_Node0_action N_SetMerlinKeysforLogging_Node0_action --> E_SetMerlinKeysforLogging S_SetMerlinKeysforLogging --> N_SetMerlinKeysforLogging_Node0 N_SetMerlinKeysforLogging_Node0 -- No --> E_SetMerlinKeysforLogging
message data to the Merlin key and
move the train ID to the Merlin
sub-key"]:::main N_SetMerlinKeysforLogging_Node0 -- Yes --> N_SetMerlinKeysforLogging_Node0_action N_SetMerlinKeysforLogging_Node0_action --> E_SetMerlinKeysforLogging S_SetMerlinKeysforLogging --> N_SetMerlinKeysforLogging_Node0 N_SetMerlinKeysforLogging_Node0 -- No --> E_SetMerlinKeysforLogging
File: GCX015.cbl
GIVEN:
A train record has been successfully retrieved from the database
WHEN:
Setting up logging information
THEN:
- The system should move the work message data to the merlin key
- Move the train id to the merlin sub-key
β Consolidated Acceptance Criteria
- The train status update process is executed → the train current status should be set to DELETED, security fields should be cleared, and the train record should be updated
- The train status update process is executed → the train current status should be set to DELETED and the train record should be updated
- The message processing results in WS-ACK-STATUS being true → the train current status is set to 'DELETED' and security fields are cleared
- The message processing results in WS-ACK-STATUS being true → the train current status is set to 'DELETED' and security fields are cleared
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetStatustoDELETED(["Start Step"])
E_SetStatustoDELETED(["End Step"])
N_SetStatustoDELETED_Node0{"The train status update process is
executed"}:::decision N_SetStatustoDELETED_Node0_action["The train current status should be
set to DELETED, security fields
should be cleared, and the train
record should be updated"]:::main N_SetStatustoDELETED_Node0 -- Yes --> N_SetStatustoDELETED_Node0_action N_SetStatustoDELETED_Node0_action --> E_SetStatustoDELETED S_SetStatustoDELETED --> N_SetStatustoDELETED_Node0 N_SetStatustoDELETED_Node1{"The train status update process is
executed"}:::decision N_SetStatustoDELETED_Node1_action["The train current status should be
set to DELETED and the train record
should be updated"]:::main N_SetStatustoDELETED_Node1 -- Yes --> N_SetStatustoDELETED_Node1_action N_SetStatustoDELETED_Node1_action --> E_SetStatustoDELETED N_SetStatustoDELETED_Node0 -- No --> N_SetStatustoDELETED_Node1 N_SetStatustoDELETED_Node2{"The message processing results in
WS-ACK-STATUS being true"}:::decision N_SetStatustoDELETED_Node2_action["The train current status is set to
DELETED and security fields are
cleared"]:::main N_SetStatustoDELETED_Node2 -- Yes --> N_SetStatustoDELETED_Node2_action N_SetStatustoDELETED_Node2_action --> E_SetStatustoDELETED N_SetStatustoDELETED_Node1 -- No --> N_SetStatustoDELETED_Node2 N_SetStatustoDELETED_Node3{"The message processing results in
WS-ACK-STATUS being true"}:::decision N_SetStatustoDELETED_Node3_action["The train current status is set to
DELETED and security fields are
cleared"]:::main N_SetStatustoDELETED_Node3 -- Yes --> N_SetStatustoDELETED_Node3_action N_SetStatustoDELETED_Node3_action --> E_SetStatustoDELETED N_SetStatustoDELETED_Node2 -- No --> N_SetStatustoDELETED_Node3 N_SetStatustoDELETED_Node3 -- No --> E_SetStatustoDELETED
executed"}:::decision N_SetStatustoDELETED_Node0_action["The train current status should be
set to DELETED, security fields
should be cleared, and the train
record should be updated"]:::main N_SetStatustoDELETED_Node0 -- Yes --> N_SetStatustoDELETED_Node0_action N_SetStatustoDELETED_Node0_action --> E_SetStatustoDELETED S_SetStatustoDELETED --> N_SetStatustoDELETED_Node0 N_SetStatustoDELETED_Node1{"The train status update process is
executed"}:::decision N_SetStatustoDELETED_Node1_action["The train current status should be
set to DELETED and the train record
should be updated"]:::main N_SetStatustoDELETED_Node1 -- Yes --> N_SetStatustoDELETED_Node1_action N_SetStatustoDELETED_Node1_action --> E_SetStatustoDELETED N_SetStatustoDELETED_Node0 -- No --> N_SetStatustoDELETED_Node1 N_SetStatustoDELETED_Node2{"The message processing results in
WS-ACK-STATUS being true"}:::decision N_SetStatustoDELETED_Node2_action["The train current status is set to
DELETED and security fields are
cleared"]:::main N_SetStatustoDELETED_Node2 -- Yes --> N_SetStatustoDELETED_Node2_action N_SetStatustoDELETED_Node2_action --> E_SetStatustoDELETED N_SetStatustoDELETED_Node1 -- No --> N_SetStatustoDELETED_Node2 N_SetStatustoDELETED_Node3{"The message processing results in
WS-ACK-STATUS being true"}:::decision N_SetStatustoDELETED_Node3_action["The train current status is set to
DELETED and security fields are
cleared"]:::main N_SetStatustoDELETED_Node3 -- Yes --> N_SetStatustoDELETED_Node3_action N_SetStatustoDELETED_Node3_action --> E_SetStatustoDELETED N_SetStatustoDELETED_Node2 -- No --> N_SetStatustoDELETED_Node3 N_SetStatustoDELETED_Node3 -- No --> E_SetStatustoDELETED
File: GCX015.cbl
GIVEN:
A train record exists with DELETED status and the message contains ACK status
WHEN:
The train status update process is executed
THEN:
The train current status should be set to DELETED, security fields should be cleared, and the train record should be updated
File: GCX015.cbl
GIVEN:
A train record exists with DELETE-PENDING status and the message contains ACK status
WHEN:
The train status update process is executed
THEN:
- The train current status should be set to deleted
- The train record should be updated
File: GCX015.cbl
GIVEN:
A train record exists with GCWTL-DELETED flag set to true
WHEN:
The message processing results in WS-ACK-STATUS being true
THEN:
The train current status is set to 'DELETED' and security fields are cleared
File: GCX015.cbl
GIVEN:
A train record exists with GCWTL-DELETE-PENDING flag set to true
WHEN:
The message processing results in WS-ACK-STATUS being true
THEN:
The train current status is set to 'DELETED' and security fields are cleared
β Consolidated Acceptance Criteria
- The train status update process is executed → the train current status should be updated with the status from the message and the train record should be updated
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetStatusfromMessage(["Start Step"])
E_SetStatusfromMessage(["End Step"])
N_SetStatusfromMessage_Node0{"The train status update process is
executed"}:::decision N_SetStatusfromMessage_Node0_action["The train current status should be
updated with the status from the
message and the train record should
be updated"]:::main N_SetStatusfromMessage_Node0 -- Yes --> N_SetStatusfromMessage_Node0_action N_SetStatusfromMessage_Node0_action --> E_SetStatusfromMessage S_SetStatusfromMessage --> N_SetStatusfromMessage_Node0 N_SetStatusfromMessage_Node0 -- No --> E_SetStatusfromMessage
executed"}:::decision N_SetStatusfromMessage_Node0_action["The train current status should be
updated with the status from the
message and the train record should
be updated"]:::main N_SetStatusfromMessage_Node0 -- Yes --> N_SetStatusfromMessage_Node0_action N_SetStatusfromMessage_Node0_action --> E_SetStatusfromMessage S_SetStatusfromMessage --> N_SetStatusfromMessage_Node0 N_SetStatusfromMessage_Node0 -- No --> E_SetStatusfromMessage
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train record exists that is not DELETED and not DELETE-PENDING
WHEN:
The train status update process is executed
THEN:
- The train current status should be updated with the status from the message
- The train record should be updated
β Consolidated Acceptance Criteria
- The train status update process completes → the automatic train arrival process should be triggered
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessAutomaticArrival(["Start Step"])
E_ProcessAutomaticArrival(["End Step"])
N_ProcessAutomaticArrival_Node0{"The train status update process
completes"}:::decision N_ProcessAutomaticArrival_Node0_action["The automatic train arrival process
should be triggered"]:::main N_ProcessAutomaticArrival_Node0 -- Yes --> N_ProcessAutomaticArrival_Node0_action N_ProcessAutomaticArrival_Node0_action --> E_ProcessAutomaticArrival S_ProcessAutomaticArrival --> N_ProcessAutomaticArrival_Node0 N_ProcessAutomaticArrival_Node0 -- No --> E_ProcessAutomaticArrival
completes"}:::decision N_ProcessAutomaticArrival_Node0_action["The automatic train arrival process
should be triggered"]:::main N_ProcessAutomaticArrival_Node0 -- Yes --> N_ProcessAutomaticArrival_Node0_action N_ProcessAutomaticArrival_Node0_action --> E_ProcessAutomaticArrival S_ProcessAutomaticArrival --> N_ProcessAutomaticArrival_Node0 N_ProcessAutomaticArrival_Node0 -- No --> E_ProcessAutomaticArrival
File: GCX015.cbl
GIVEN:
A train record has ACK status and ARRIVED-PENDING flag is set
WHEN:
The train status update process completes
THEN:
The automatic train arrival process should be triggered
β Consolidated Acceptance Criteria
- The train status update process continues → the system should check if the train meets AEI send requirements and process accordingly
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CheckAEIQualification(["Start Step"])
E_CheckAEIQualification(["End Step"])
N_CheckAEIQualification_Node0{"The train status update process
continues"}:::decision N_CheckAEIQualification_Node0_action["The system should check if the
train meets AEI send requirements
and process accordingly"]:::main N_CheckAEIQualification_Node0 -- Yes --> N_CheckAEIQualification_Node0_action N_CheckAEIQualification_Node0_action --> E_CheckAEIQualification S_CheckAEIQualification --> N_CheckAEIQualification_Node0 N_CheckAEIQualification_Node0 -- No --> E_CheckAEIQualification
continues"}:::decision N_CheckAEIQualification_Node0_action["The system should check if the
train meets AEI send requirements
and process accordingly"]:::main N_CheckAEIQualification_Node0 -- Yes --> N_CheckAEIQualification_Node0_action N_CheckAEIQualification_Node0_action --> E_CheckAEIQualification S_CheckAEIQualification --> N_CheckAEIQualification_Node0 N_CheckAEIQualification_Node0 -- No --> E_CheckAEIQualification
File: GCX015.cbl
GIVEN:
A train record has been updated with normal status (not deleted or delete pending)
WHEN:
The train status update process continues
THEN:
- The system should check if the train meets aei send requirements
- Process accordingly
β Consolidated Acceptance Criteria
- The message processing completes with a status update → the train current status is updated with the message status value
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCurrentStatusfromMessage(["Start Step"])
E_SetCurrentStatusfromMessage(["End Step"])
N_SetCurrentStatusfromMessage_Node0{"The message processing completes
with a status update"}:::decision N_SetCurrentStatusfromMessage_Node0_action["The train current status is updated
with the message status value"]:::main N_SetCurrentStatusfromMessage_Node0 -- Yes --> N_SetCurrentStatusfromMessage_Node0_action N_SetCurrentStatusfromMessage_Node0_action --> E_SetCurrentStatusfromMessage S_SetCurrentStatusfromMessage --> N_SetCurrentStatusfromMessage_Node0 N_SetCurrentStatusfromMessage_Node0 -- No --> E_SetCurrentStatusfromMessage
with a status update"}:::decision N_SetCurrentStatusfromMessage_Node0_action["The train current status is updated
with the message status value"]:::main N_SetCurrentStatusfromMessage_Node0 -- Yes --> N_SetCurrentStatusfromMessage_Node0_action N_SetCurrentStatusfromMessage_Node0_action --> E_SetCurrentStatusfromMessage S_SetCurrentStatusfromMessage --> N_SetCurrentStatusfromMessage_Node0 N_SetCurrentStatusfromMessage_Node0 -- No --> E_SetCurrentStatusfromMessage
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train record exists that is not deleted and not delete pending
WHEN:
The message processing completes with a status update
THEN:
The train current status is updated with the message status value
β Consolidated Acceptance Criteria
- The status update operation is executed → the GCWTL-SECX security field is initialized to spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ClearSecurityFields(["Start Step"])
E_ClearSecurityFields(["End Step"])
N_ClearSecurityFields_Node0{"The status update operation is
executed"}:::decision N_ClearSecurityFields_Node0_action["The GCWTL-SECX security field is
initialized to spaces"]:::main N_ClearSecurityFields_Node0 -- Yes --> N_ClearSecurityFields_Node0_action N_ClearSecurityFields_Node0_action --> E_ClearSecurityFields S_ClearSecurityFields --> N_ClearSecurityFields_Node0 N_ClearSecurityFields_Node0 -- No --> E_ClearSecurityFields
executed"}:::decision N_ClearSecurityFields_Node0_action["The GCWTL-SECX security field is
initialized to spaces"]:::main N_ClearSecurityFields_Node0 -- Yes --> N_ClearSecurityFields_Node0_action N_ClearSecurityFields_Node0_action --> E_ClearSecurityFields S_ClearSecurityFields --> N_ClearSecurityFields_Node0 N_ClearSecurityFields_Node0 -- No --> E_ClearSecurityFields
File: GCX015.cbl
GIVEN:
A train record is being updated to DELETED status
WHEN:
The status update operation is executed
THEN:
The GCWTL-SECX security field is initialized to spaces
β Consolidated Acceptance Criteria
- The update operation is initiated → the system calls GCCUTRIO with replacement function and root-only scope using the train PCB
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExecuteDatabaseUpdate(["Start Step"])
E_ExecuteDatabaseUpdate(["End Step"])
N_ExecuteDatabaseUpdate_Node0{"The update operation is initiated"}:::decision
N_ExecuteDatabaseUpdate_Node0_action["The system calls GCCUTRIO with
replacement function and root-only
scope using the train PCB"]:::main N_ExecuteDatabaseUpdate_Node0 -- Yes --> N_ExecuteDatabaseUpdate_Node0_action N_ExecuteDatabaseUpdate_Node0_action --> E_ExecuteDatabaseUpdate S_ExecuteDatabaseUpdate --> N_ExecuteDatabaseUpdate_Node0 N_ExecuteDatabaseUpdate_Node0 -- No --> E_ExecuteDatabaseUpdate
replacement function and root-only
scope using the train PCB"]:::main N_ExecuteDatabaseUpdate_Node0 -- Yes --> N_ExecuteDatabaseUpdate_Node0_action N_ExecuteDatabaseUpdate_Node0_action --> E_ExecuteDatabaseUpdate S_ExecuteDatabaseUpdate --> N_ExecuteDatabaseUpdate_Node0 N_ExecuteDatabaseUpdate_Node0 -- No --> E_ExecuteDatabaseUpdate
File: GCX015.cbl
GIVEN:
A train record requires status or field updates
WHEN:
The update operation is initiated
THEN:
- The system calls gccutrio with replacement function
- Root-only scope using the train pcb
β Consolidated Acceptance Criteria
- The update operation completes → the system performs AEI train send qualification check to determine if additional AEI processing is required
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CheckAEITrainQualification(["Start Step"])
E_CheckAEITrainQualification(["End Step"])
N_CheckAEITrainQualification_Node0{"The update operation completes"}:::decision
N_CheckAEITrainQualification_Node0_action["The system performs AEI train send
qualification check to determine if
additional AEI processing is
required"]:::main N_CheckAEITrainQualification_Node0 -- Yes --> N_CheckAEITrainQualification_Node0_action N_CheckAEITrainQualification_Node0_action --> E_CheckAEITrainQualification S_CheckAEITrainQualification --> N_CheckAEITrainQualification_Node0 N_CheckAEITrainQualification_Node0 -- No --> E_CheckAEITrainQualification
qualification check to determine if
additional AEI processing is
required"]:::main N_CheckAEITrainQualification_Node0 -- Yes --> N_CheckAEITrainQualification_Node0_action N_CheckAEITrainQualification_Node0_action --> E_CheckAEITrainQualification S_CheckAEITrainQualification --> N_CheckAEITrainQualification_Node0 N_CheckAEITrainQualification_Node0 -- No --> E_CheckAEITrainQualification
File: GCX015.cbl
GIVEN:
A train record has been updated successfully
WHEN:
The update operation completes
THEN:
The system performs AEI train send qualification check to determine if additional AEI processing is required
β Consolidated Acceptance Criteria
- The train record update is completed → the system automatically triggers train arrival processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ProcessAutomaticTrainArrival(["Start Step"])
E_ProcessAutomaticTrainArrival(["End Step"])
N_ProcessAutomaticTrainArrival_Node0{"The train record update is
completed"}:::decision N_ProcessAutomaticTrainArrival_Node0_action["The system automatically triggers
train arrival processing"]:::main N_ProcessAutomaticTrainArrival_Node0 -- Yes --> N_ProcessAutomaticTrainArrival_Node0_action N_ProcessAutomaticTrainArrival_Node0_action --> E_ProcessAutomaticTrainArrival S_ProcessAutomaticTrainArrival --> N_ProcessAutomaticTrainArrival_Node0 N_ProcessAutomaticTrainArrival_Node0 -- No --> E_ProcessAutomaticTrainArrival
completed"}:::decision N_ProcessAutomaticTrainArrival_Node0_action["The system automatically triggers
train arrival processing"]:::main N_ProcessAutomaticTrainArrival_Node0 -- Yes --> N_ProcessAutomaticTrainArrival_Node0_action N_ProcessAutomaticTrainArrival_Node0_action --> E_ProcessAutomaticTrainArrival S_ProcessAutomaticTrainArrival --> N_ProcessAutomaticTrainArrival_Node0 N_ProcessAutomaticTrainArrival_Node0 -- No --> E_ProcessAutomaticTrainArrival
File: GCX015.cbl
GIVEN:
A train record has GCWTL-ACK status set to true and GCWTL-ARRIVED-PENDING status set to true
WHEN:
The train record update is completed
THEN:
The system automatically triggers train arrival processing
β Consolidated Acceptance Criteria
- The cargo status update is executed → the saved status is moved to the current USCARGO status AND the saved status description is moved to the current USCARGO short description
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_RestorePreviousStatusfromSaveArea(["Start Step"])
E_RestorePreviousStatusfromSaveArea(["End Step"])
N_RestorePreviousStatusfromSaveArea_Node0{"The cargo status update is executed"}:::decision
N_RestorePreviousStatusfromSaveArea_Node0_action["The saved status is moved to the
current USCARGO status AND the saved
status description is moved to the
current USCARGO short description"]:::main N_RestorePreviousStatusfromSaveArea_Node0 -- Yes --> N_RestorePreviousStatusfromSaveArea_Node0_action N_RestorePreviousStatusfromSaveArea_Node0_action --> E_RestorePreviousStatusfromSaveArea S_RestorePreviousStatusfromSaveArea --> N_RestorePreviousStatusfromSaveArea_Node0 N_RestorePreviousStatusfromSaveArea_Node0 -- No --> E_RestorePreviousStatusfromSaveArea
current USCARGO status AND the saved
status description is moved to the
current USCARGO short description"]:::main N_RestorePreviousStatusfromSaveArea_Node0 -- Yes --> N_RestorePreviousStatusfromSaveArea_Node0_action N_RestorePreviousStatusfromSaveArea_Node0_action --> E_RestorePreviousStatusfromSaveArea S_RestorePreviousStatusfromSaveArea --> N_RestorePreviousStatusfromSaveArea_Node0 N_RestorePreviousStatusfromSaveArea_Node0 -- No --> E_RestorePreviousStatusfromSaveArea
File: GCX015.cbl
GIVEN:
A cargo status update is being processed AND the final status is ACK AND there is a saved status description in the save area
WHEN:
The cargo status update is executed
THEN:
- The saved status is moved to the current uscargo status
- The saved status description is moved to the current uscargo short description
β Consolidated Acceptance Criteria
- The cargo status update is executed → the USCARGO status flag is set to ACK AND the USCARGO short description flag is set to ACK
- The system processes the acknowledgment → set both USCARGO status flags to acknowledgment state
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetStatustoUSCARGOACK(["Start Step"])
E_SetStatustoUSCARGOACK(["End Step"])
N_SetStatustoUSCARGOACK_Node0{"The cargo status update is executed"}:::decision
N_SetStatustoUSCARGOACK_Node0_action["The USCARGO status flag is set to
ACK AND the USCARGO short
description flag is set to ACK"]:::main N_SetStatustoUSCARGOACK_Node0 -- Yes --> N_SetStatustoUSCARGOACK_Node0_action N_SetStatustoUSCARGOACK_Node0_action --> E_SetStatustoUSCARGOACK S_SetStatustoUSCARGOACK --> N_SetStatustoUSCARGOACK_Node0 N_SetStatustoUSCARGOACK_Node1{"The system processes the
acknowledgment"}:::decision N_SetStatustoUSCARGOACK_Node1_action["Set both USCARGO status flags to
acknowledgment state"]:::main N_SetStatustoUSCARGOACK_Node1 -- Yes --> N_SetStatustoUSCARGOACK_Node1_action N_SetStatustoUSCARGOACK_Node1_action --> E_SetStatustoUSCARGOACK N_SetStatustoUSCARGOACK_Node0 -- No --> N_SetStatustoUSCARGOACK_Node1 N_SetStatustoUSCARGOACK_Node1 -- No --> E_SetStatustoUSCARGOACK
ACK AND the USCARGO short
description flag is set to ACK"]:::main N_SetStatustoUSCARGOACK_Node0 -- Yes --> N_SetStatustoUSCARGOACK_Node0_action N_SetStatustoUSCARGOACK_Node0_action --> E_SetStatustoUSCARGOACK S_SetStatustoUSCARGOACK --> N_SetStatustoUSCARGOACK_Node0 N_SetStatustoUSCARGOACK_Node1{"The system processes the
acknowledgment"}:::decision N_SetStatustoUSCARGOACK_Node1_action["Set both USCARGO status flags to
acknowledgment state"]:::main N_SetStatustoUSCARGOACK_Node1 -- Yes --> N_SetStatustoUSCARGOACK_Node1_action N_SetStatustoUSCARGOACK_Node1_action --> E_SetStatustoUSCARGOACK N_SetStatustoUSCARGOACK_Node0 -- No --> N_SetStatustoUSCARGOACK_Node1 N_SetStatustoUSCARGOACK_Node1 -- No --> E_SetStatustoUSCARGOACK
File: GCX015.cbl
GIVEN:
A cargo status update is being processed AND the final status is ACK AND there is no saved status description in the save area
WHEN:
The cargo status update is executed
THEN:
- The uscargo status flag is set to ack
- The uscargo short description flag is set to ack
File: GCX015.cbl
GIVEN:
A cargo status is being acknowledged and no previous status is saved
WHEN:
The system processes the acknowledgment
THEN:
Set both USCARGO status flags to acknowledgment state
β Consolidated Acceptance Criteria
- The cargo status update is executed → the current USCARGO status is moved to the save status area AND the current USCARGO short description is moved to the save status description area
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SaveCurrentStatustoSaveArea(["Start Step"])
E_SaveCurrentStatustoSaveArea(["End Step"])
N_SaveCurrentStatustoSaveArea_Node0{"The cargo status update is executed"}:::decision
N_SaveCurrentStatustoSaveArea_Node0_action["The current USCARGO status is moved
to the save status area AND the
current USCARGO short description is
moved to the save status description
area"]:::main N_SaveCurrentStatustoSaveArea_Node0 -- Yes --> N_SaveCurrentStatustoSaveArea_Node0_action N_SaveCurrentStatustoSaveArea_Node0_action --> E_SaveCurrentStatustoSaveArea S_SaveCurrentStatustoSaveArea --> N_SaveCurrentStatustoSaveArea_Node0 N_SaveCurrentStatustoSaveArea_Node0 -- No --> E_SaveCurrentStatustoSaveArea
to the save status area AND the
current USCARGO short description is
moved to the save status description
area"]:::main N_SaveCurrentStatustoSaveArea_Node0 -- Yes --> N_SaveCurrentStatustoSaveArea_Node0_action N_SaveCurrentStatustoSaveArea_Node0_action --> E_SaveCurrentStatustoSaveArea S_SaveCurrentStatustoSaveArea --> N_SaveCurrentStatustoSaveArea_Node0 N_SaveCurrentStatustoSaveArea_Node0 -- No --> E_SaveCurrentStatustoSaveArea
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A cargo status update is being processed AND the final status is ERROR AND the current USCARGO short description is not ERROR AND not ACK AND not ACK-R
WHEN:
The cargo status update is executed
THEN:
- The current uscargo status is moved to the save status area
- The current uscargo short description is moved to the save status description area
β Consolidated Acceptance Criteria
- The cargo status update is executed → the CPCARGO status flag is set to ERROR
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCargoStatustoERROR(["Start Step"])
E_SetCargoStatustoERROR(["End Step"])
N_SetCargoStatustoERROR_Node0{"The cargo status update is executed"}:::decision
N_SetCargoStatustoERROR_Node0_action["The CPCARGO status flag is set to
ERROR"]:::main N_SetCargoStatustoERROR_Node0 -- Yes --> N_SetCargoStatustoERROR_Node0_action N_SetCargoStatustoERROR_Node0_action --> E_SetCargoStatustoERROR S_SetCargoStatustoERROR --> N_SetCargoStatustoERROR_Node0 N_SetCargoStatustoERROR_Node0 -- No --> E_SetCargoStatustoERROR
ERROR"]:::main N_SetCargoStatustoERROR_Node0 -- Yes --> N_SetCargoStatustoERROR_Node0_action N_SetCargoStatustoERROR_Node0_action --> E_SetCargoStatustoERROR S_SetCargoStatustoERROR --> N_SetCargoStatustoERROR_Node0 N_SetCargoStatustoERROR_Node0 -- No --> E_SetCargoStatustoERROR
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A cargo status update is being processed AND the final status is ERROR AND the CPCARGO status is not DELETED
WHEN:
The cargo status update is executed
THEN:
The CPCARGO status flag is set to ERROR
β Consolidated Acceptance Criteria
- The cargo status update is executed → the USCARGO status flag is set to ERROR AND the USCARGO short description flag is set to ERROR
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUSCargoStatustoERROR(["Start Step"])
E_SetUSCargoStatustoERROR(["End Step"])
N_SetUSCargoStatustoERROR_Node0{"The cargo status update is executed"}:::decision
N_SetUSCargoStatustoERROR_Node0_action["The USCARGO status flag is set to
ERROR AND the USCARGO short
description flag is set to ERROR"]:::main N_SetUSCargoStatustoERROR_Node0 -- Yes --> N_SetUSCargoStatustoERROR_Node0_action N_SetUSCargoStatustoERROR_Node0_action --> E_SetUSCargoStatustoERROR S_SetUSCargoStatustoERROR --> N_SetUSCargoStatustoERROR_Node0 N_SetUSCargoStatustoERROR_Node0 -- No --> E_SetUSCargoStatustoERROR
ERROR AND the USCARGO short
description flag is set to ERROR"]:::main N_SetUSCargoStatustoERROR_Node0 -- Yes --> N_SetUSCargoStatustoERROR_Node0_action N_SetUSCargoStatustoERROR_Node0_action --> E_SetUSCargoStatustoERROR S_SetUSCargoStatustoERROR --> N_SetUSCargoStatustoERROR_Node0 N_SetUSCargoStatustoERROR_Node0 -- No --> E_SetUSCargoStatustoERROR
File: GCX015.cbl
GIVEN:
A cargo status update is being processed AND the final status is ERROR
WHEN:
The cargo status update is executed
THEN:
- The uscargo status flag is set to error
- The uscargo short description flag is set to error
β Consolidated Acceptance Criteria
- The cargo record update is requested → the GCSUSRT segment is updated using replace function through the GCCUSIO service
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdateCargoRecordinDatabase(["Start Step"])
E_UpdateCargoRecordinDatabase(["End Step"])
N_UpdateCargoRecordinDatabase_Node0{"The cargo record update is
requested"}:::decision N_UpdateCargoRecordinDatabase_Node0_action["The GCSUSRT segment is updated
using replace function through the
GCCUSIO service"]:::main N_UpdateCargoRecordinDatabase_Node0 -- Yes --> N_UpdateCargoRecordinDatabase_Node0_action N_UpdateCargoRecordinDatabase_Node0_action --> E_UpdateCargoRecordinDatabase S_UpdateCargoRecordinDatabase --> N_UpdateCargoRecordinDatabase_Node0 N_UpdateCargoRecordinDatabase_Node0 -- No --> E_UpdateCargoRecordinDatabase
requested"}:::decision N_UpdateCargoRecordinDatabase_Node0_action["The GCSUSRT segment is updated
using replace function through the
GCCUSIO service"]:::main N_UpdateCargoRecordinDatabase_Node0 -- Yes --> N_UpdateCargoRecordinDatabase_Node0_action N_UpdateCargoRecordinDatabase_Node0_action --> E_UpdateCargoRecordinDatabase S_UpdateCargoRecordinDatabase --> N_UpdateCargoRecordinDatabase_Node0 N_UpdateCargoRecordinDatabase_Node0 -- No --> E_UpdateCargoRecordinDatabase
File: GCX015.cbl
GIVEN:
Cargo status flags have been updated
WHEN:
The cargo record update is requested
THEN:
The GCSUSRT segment is updated using replace function through the GCCUSIO service
β Consolidated Acceptance Criteria
- If the current status type → if the status is ACK, the system proceeds to check for previously saved status information, otherwise it processes as an error status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IsStatusACK(["Start Step"])
E_IsStatusACK(["End Step"])
N_IsStatusACK_Node0{"The system evaluates the current
status type"}:::decision N_IsStatusACK_Node0_action["If the status is ACK, the system
proceeds to check for previously
saved status information, otherwise
it processes as an error status"]:::main N_IsStatusACK_Node0 -- Yes --> N_IsStatusACK_Node0_action N_IsStatusACK_Node0_action --> E_IsStatusACK S_IsStatusACK --> N_IsStatusACK_Node0 N_IsStatusACK_Node0 -- No --> E_IsStatusACK
status type"}:::decision N_IsStatusACK_Node0_action["If the status is ACK, the system
proceeds to check for previously
saved status information, otherwise
it processes as an error status"]:::main N_IsStatusACK_Node0 -- Yes --> N_IsStatusACK_Node0_action N_IsStatusACK_Node0_action --> E_IsStatusACK S_IsStatusACK --> N_IsStatusACK_Node0 N_IsStatusACK_Node0 -- No --> E_IsStatusACK
File: GCX015.cbl
GIVEN:
A cargo record is being processed for status update
WHEN:
The system evaluates the current status type
THEN:
If the status is ACK, the system proceeds to check for previously saved status information, otherwise it processes as an error status
β Consolidated Acceptance Criteria
- The system checks the saved status description field → if the saved status description is not empty, restore the saved status and description, otherwise set default acknowledgment flags
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_PreviousStatusSaved(["Start Step"])
E_PreviousStatusSaved(["End Step"])
N_PreviousStatusSaved_Node0{"The system checks the saved status
description field"}:::decision N_PreviousStatusSaved_Node0_action["If the saved status description is
not empty, restore the saved status
and description, otherwise set
default acknowledgment flags"]:::main N_PreviousStatusSaved_Node0 -- Yes --> N_PreviousStatusSaved_Node0_action N_PreviousStatusSaved_Node0_action --> E_PreviousStatusSaved S_PreviousStatusSaved --> N_PreviousStatusSaved_Node0 N_PreviousStatusSaved_Node0 -- No --> E_PreviousStatusSaved
description field"}:::decision N_PreviousStatusSaved_Node0_action["If the saved status description is
not empty, restore the saved status
and description, otherwise set
default acknowledgment flags"]:::main N_PreviousStatusSaved_Node0 -- Yes --> N_PreviousStatusSaved_Node0_action N_PreviousStatusSaved_Node0_action --> E_PreviousStatusSaved S_PreviousStatusSaved --> N_PreviousStatusSaved_Node0 N_PreviousStatusSaved_Node0 -- No --> E_PreviousStatusSaved
File: GCX015.cbl
GIVEN:
A cargo status is being acknowledged
WHEN:
The system checks the saved status description field
THEN:
- If the saved status description is not empty, restore the saved status
- Description, otherwise set default acknowledgment flags
β Consolidated Acceptance Criteria
- The system processes the acknowledgment → restore the cargo status from the saved status field and restore the status description from the saved description field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_RestorePreviousStatusfromSaveFields(["Start Step"])
E_RestorePreviousStatusfromSaveFields(["End Step"])
N_RestorePreviousStatusfromSaveFields_Node0{"The system processes the
acknowledgment"}:::decision N_RestorePreviousStatusfromSaveFields_Node0_action["Restore the cargo status from the
saved status field and restore the
status description from the saved
description field"]:::main N_RestorePreviousStatusfromSaveFields_Node0 -- Yes --> N_RestorePreviousStatusfromSaveFields_Node0_action N_RestorePreviousStatusfromSaveFields_Node0_action --> E_RestorePreviousStatusfromSaveFields S_RestorePreviousStatusfromSaveFields --> N_RestorePreviousStatusfromSaveFields_Node0 N_RestorePreviousStatusfromSaveFields_Node0 -- No --> E_RestorePreviousStatusfromSaveFields
acknowledgment"}:::decision N_RestorePreviousStatusfromSaveFields_Node0_action["Restore the cargo status from the
saved status field and restore the
status description from the saved
description field"]:::main N_RestorePreviousStatusfromSaveFields_Node0 -- Yes --> N_RestorePreviousStatusfromSaveFields_Node0_action N_RestorePreviousStatusfromSaveFields_Node0_action --> E_RestorePreviousStatusfromSaveFields S_RestorePreviousStatusfromSaveFields --> N_RestorePreviousStatusfromSaveFields_Node0 N_RestorePreviousStatusfromSaveFields_Node0 -- No --> E_RestorePreviousStatusfromSaveFields
File: GCX015.cbl
GIVEN:
A cargo status is being acknowledged and a previous status description exists in save fields
WHEN:
The system processes the acknowledgment
THEN:
- Restore the cargo status from the saved status field
- Restore the status description from the saved description field
β Consolidated Acceptance Criteria
- If the current USCARGO short description status → if the current status is ERROR, ACK, or ACK-R, skip saving the current status, otherwise save the current status to backup fields
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CurrentStatusisErrorACK(["Start Step"])
E_CurrentStatusisErrorACK(["End Step"])
N_CurrentStatusisErrorACK_Node0{"The system evaluates the current
USCARGO short description status"}:::decision N_CurrentStatusisErrorACK_Node0_action["If the current status is ERROR,
ACK, or ACK-R, skip saving the
current status, otherwise save the
current status to backup fields"]:::main N_CurrentStatusisErrorACK_Node0 -- Yes --> N_CurrentStatusisErrorACK_Node0_action N_CurrentStatusisErrorACK_Node0_action --> E_CurrentStatusisErrorACK S_CurrentStatusisErrorACK --> N_CurrentStatusisErrorACK_Node0 N_CurrentStatusisErrorACK_Node0 -- No --> E_CurrentStatusisErrorACK
USCARGO short description status"}:::decision N_CurrentStatusisErrorACK_Node0_action["If the current status is ERROR,
ACK, or ACK-R, skip saving the
current status, otherwise save the
current status to backup fields"]:::main N_CurrentStatusisErrorACK_Node0 -- Yes --> N_CurrentStatusisErrorACK_Node0_action N_CurrentStatusisErrorACK_Node0_action --> E_CurrentStatusisErrorACK S_CurrentStatusisErrorACK --> N_CurrentStatusisErrorACK_Node0 N_CurrentStatusisErrorACK_Node0 -- No --> E_CurrentStatusisErrorACK
File: GCX015.cbl
GIVEN:
A cargo is being processed with error status
WHEN:
The system evaluates the current USCARGO short description status
THEN:
If the current status is ERROR, ACK, or ACK-R, skip saving the current status, otherwise save the current status to backup fields
β Consolidated Acceptance Criteria
- The system processes the error status → move the current USCARGO status to the saved status field and move the current USCARGO short description to the saved description field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SaveCurrentStatustoBackupFields(["Start Step"])
E_SaveCurrentStatustoBackupFields(["End Step"])
N_SaveCurrentStatustoBackupFields_Node0{"The system processes the error
status"}:::decision N_SaveCurrentStatustoBackupFields_Node0_action["Move the current USCARGO status to
the saved status field and move the
current USCARGO short description to
the saved description field"]:::exclusion N_SaveCurrentStatustoBackupFields_Node0 -- Yes -->|Alternative| N_SaveCurrentStatustoBackupFields_Node0_action N_SaveCurrentStatustoBackupFields_Node0_action --> E_SaveCurrentStatustoBackupFields S_SaveCurrentStatustoBackupFields --> N_SaveCurrentStatustoBackupFields_Node0 N_SaveCurrentStatustoBackupFields_Node0 -- No --> E_SaveCurrentStatustoBackupFields
status"}:::decision N_SaveCurrentStatustoBackupFields_Node0_action["Move the current USCARGO status to
the saved status field and move the
current USCARGO short description to
the saved description field"]:::exclusion N_SaveCurrentStatustoBackupFields_Node0 -- Yes -->|Alternative| N_SaveCurrentStatustoBackupFields_Node0_action N_SaveCurrentStatustoBackupFields_Node0_action --> E_SaveCurrentStatustoBackupFields S_SaveCurrentStatustoBackupFields --> N_SaveCurrentStatustoBackupFields_Node0 N_SaveCurrentStatustoBackupFields_Node0 -- No --> E_SaveCurrentStatustoBackupFields
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A cargo is being set to error status and current status is not ERROR, ACK, or ACK-R
WHEN:
The system processes the error status
THEN:
- Move the current uscargo status to the saved status field
- Move the current uscargo short description to the saved description field
β Consolidated Acceptance Criteria
- If the CPCARGO deletion status → if the cargo is already marked as CPCARGO-DELETED, skip setting CPCARGO-ERROR flag, otherwise set the CPCARGO-ERROR flag
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CargoAlreadyDeleted(["Start Step"])
E_CargoAlreadyDeleted(["End Step"])
N_CargoAlreadyDeleted_Node0{"The system evaluates the CPCARGO
deletion status"}:::decision N_CargoAlreadyDeleted_Node0_action["If the cargo is already marked as
CPCARGO-DELETED, skip setting
CPCARGO-ERROR flag, otherwise set
the CPCARGO-ERROR flag"]:::main N_CargoAlreadyDeleted_Node0 -- Yes --> N_CargoAlreadyDeleted_Node0_action N_CargoAlreadyDeleted_Node0_action --> E_CargoAlreadyDeleted S_CargoAlreadyDeleted --> N_CargoAlreadyDeleted_Node0 N_CargoAlreadyDeleted_Node0 -- No --> E_CargoAlreadyDeleted
deletion status"}:::decision N_CargoAlreadyDeleted_Node0_action["If the cargo is already marked as
CPCARGO-DELETED, skip setting
CPCARGO-ERROR flag, otherwise set
the CPCARGO-ERROR flag"]:::main N_CargoAlreadyDeleted_Node0 -- Yes --> N_CargoAlreadyDeleted_Node0_action N_CargoAlreadyDeleted_Node0_action --> E_CargoAlreadyDeleted S_CargoAlreadyDeleted --> N_CargoAlreadyDeleted_Node0 N_CargoAlreadyDeleted_Node0 -- No --> E_CargoAlreadyDeleted
File: GCX015.cbl
GIVEN:
A cargo is being processed with error status
WHEN:
The system evaluates the CPCARGO deletion status
THEN:
If the cargo is already marked as CPCARGO-DELETED, skip setting CPCARGO-ERROR flag, otherwise set the CPCARGO-ERROR flag
β Consolidated Acceptance Criteria
- The system processes the error status → set the CPCARGO status flag to ERROR state
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetStatustoCPCARGOERROR(["Start Step"])
E_SetStatustoCPCARGOERROR(["End Step"])
N_SetStatustoCPCARGOERROR_Node0{"The system processes the error
status"}:::decision N_SetStatustoCPCARGOERROR_Node0_action["Set the CPCARGO status flag to
ERROR state"]:::exclusion N_SetStatustoCPCARGOERROR_Node0 -- Yes -->|Alternative| N_SetStatustoCPCARGOERROR_Node0_action N_SetStatustoCPCARGOERROR_Node0_action --> E_SetStatustoCPCARGOERROR S_SetStatustoCPCARGOERROR --> N_SetStatustoCPCARGOERROR_Node0 N_SetStatustoCPCARGOERROR_Node0 -- No --> E_SetStatustoCPCARGOERROR
status"}:::decision N_SetStatustoCPCARGOERROR_Node0_action["Set the CPCARGO status flag to
ERROR state"]:::exclusion N_SetStatustoCPCARGOERROR_Node0 -- Yes -->|Alternative| N_SetStatustoCPCARGOERROR_Node0_action N_SetStatustoCPCARGOERROR_Node0_action --> E_SetStatustoCPCARGOERROR S_SetStatustoCPCARGOERROR --> N_SetStatustoCPCARGOERROR_Node0 N_SetStatustoCPCARGOERROR_Node0 -- No --> E_SetStatustoCPCARGOERROR
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A cargo is being set to error status and is not already deleted
WHEN:
The system processes the error status
THEN:
Set the CPCARGO status flag to ERROR state
β Consolidated Acceptance Criteria
- The system applies error status flags → set both USCARGO status flag and USCARGO short description flag to ERROR state
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetStatustoUSCARGOERROR(["Start Step"])
E_SetStatustoUSCARGOERROR(["End Step"])
N_SetStatustoUSCARGOERROR_Node0{"The system applies error status
flags"}:::decision N_SetStatustoUSCARGOERROR_Node0_action["Set both USCARGO status flag and
USCARGO short description flag to
ERROR state"]:::exclusion N_SetStatustoUSCARGOERROR_Node0 -- Yes -->|Alternative| N_SetStatustoUSCARGOERROR_Node0_action N_SetStatustoUSCARGOERROR_Node0_action --> E_SetStatustoUSCARGOERROR S_SetStatustoUSCARGOERROR --> N_SetStatustoUSCARGOERROR_Node0 N_SetStatustoUSCARGOERROR_Node0 -- No --> E_SetStatustoUSCARGOERROR
flags"}:::decision N_SetStatustoUSCARGOERROR_Node0_action["Set both USCARGO status flag and
USCARGO short description flag to
ERROR state"]:::exclusion N_SetStatustoUSCARGOERROR_Node0 -- Yes -->|Alternative| N_SetStatustoUSCARGOERROR_Node0_action N_SetStatustoUSCARGOERROR_Node0_action --> E_SetStatustoUSCARGOERROR S_SetStatustoUSCARGOERROR --> N_SetStatustoUSCARGOERROR_Node0 N_SetStatustoUSCARGOERROR_Node0 -- No --> E_SetStatustoUSCARGOERROR
File: GCX015.cbl
GIVEN:
A cargo is being processed with error status
WHEN:
The system applies error status flags
THEN:
- Set both uscargo status flag
- Uscargo short description flag to error state
β Consolidated Acceptance Criteria
- The system is ready to persist changes → execute database update operation using GCCUSIO with segment replacement function for the cargo record
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExecuteDatabaseUpdateOperation(["Start Step"])
E_ExecuteDatabaseUpdateOperation(["End Step"])
N_ExecuteDatabaseUpdateOperation_Node0{"The system is ready to persist
changes"}:::decision N_ExecuteDatabaseUpdateOperation_Node0_action["Execute database update operation
using GCCUSIO with segment
replacement function for the cargo
record"]:::main N_ExecuteDatabaseUpdateOperation_Node0 -- Yes --> N_ExecuteDatabaseUpdateOperation_Node0_action N_ExecuteDatabaseUpdateOperation_Node0_action --> E_ExecuteDatabaseUpdateOperation S_ExecuteDatabaseUpdateOperation --> N_ExecuteDatabaseUpdateOperation_Node0 N_ExecuteDatabaseUpdateOperation_Node0 -- No --> E_ExecuteDatabaseUpdateOperation
changes"}:::decision N_ExecuteDatabaseUpdateOperation_Node0_action["Execute database update operation
using GCCUSIO with segment
replacement function for the cargo
record"]:::main N_ExecuteDatabaseUpdateOperation_Node0 -- Yes --> N_ExecuteDatabaseUpdateOperation_Node0_action N_ExecuteDatabaseUpdateOperation_Node0_action --> E_ExecuteDatabaseUpdateOperation S_ExecuteDatabaseUpdateOperation --> N_ExecuteDatabaseUpdateOperation_Node0 N_ExecuteDatabaseUpdateOperation_Node0 -- No --> E_ExecuteDatabaseUpdateOperation
File: GCX015.cbl
GIVEN:
All cargo status fields have been modified according to business rules
WHEN:
The system is ready to persist changes
THEN:
Execute database update operation using GCCUSIO with segment replacement function for the cargo record
β Consolidated Acceptance Criteria
- The system checks the train's current status for AEI qualification → the train must have ACK status to qualify for AEI processing, otherwise it does not qualify
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainStatusACK(["Start Step"])
E_TrainStatusACK(["End Step"])
N_TrainStatusACK_Node0{"The system checks the train s
current status for AEI qualification"}:::decision N_TrainStatusACK_Node0_action["The train must have ACK status to
qualify for AEI processing,
otherwise it does not qualify"]:::main N_TrainStatusACK_Node0 -- Yes --> N_TrainStatusACK_Node0_action N_TrainStatusACK_Node0_action --> E_TrainStatusACK S_TrainStatusACK --> N_TrainStatusACK_Node0 N_TrainStatusACK_Node0 -- No --> E_TrainStatusACK
current status for AEI qualification"}:::decision N_TrainStatusACK_Node0_action["The train must have ACK status to
qualify for AEI processing,
otherwise it does not qualify"]:::main N_TrainStatusACK_Node0 -- Yes --> N_TrainStatusACK_Node0_action N_TrainStatusACK_Node0_action --> E_TrainStatusACK S_TrainStatusACK --> N_TrainStatusACK_Node0 N_TrainStatusACK_Node0 -- No --> E_TrainStatusACK
File: GCX015.cbl
GIVEN:
A train record exists in the system
WHEN:
The system checks the train's current status for AEI qualification
THEN:
The train must have ACK status to qualify for AEI processing, otherwise it does not qualify
β Consolidated Acceptance Criteria
- If the train's AEI send configuration → the train must have AEI-SEND flag set to true to proceed with full AEI processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainConfiguredforAEISend(["Start Step"])
E_TrainConfiguredforAEISend(["End Step"])
N_TrainConfiguredforAEISend_Node0{"The system evaluates the train s
AEI send configuration"}:::decision N_TrainConfiguredforAEISend_Node0_action["The train must have AEI-SEND flag
set to true to proceed with full AEI
processing"]:::main N_TrainConfiguredforAEISend_Node0 -- Yes --> N_TrainConfiguredforAEISend_Node0_action N_TrainConfiguredforAEISend_Node0_action --> E_TrainConfiguredforAEISend S_TrainConfiguredforAEISend --> N_TrainConfiguredforAEISend_Node0 N_TrainConfiguredforAEISend_Node0 -- No --> E_TrainConfiguredforAEISend
AEI send configuration"}:::decision N_TrainConfiguredforAEISend_Node0_action["The train must have AEI-SEND flag
set to true to proceed with full AEI
processing"]:::main N_TrainConfiguredforAEISend_Node0 -- Yes --> N_TrainConfiguredforAEISend_Node0_action N_TrainConfiguredforAEISend_Node0_action --> E_TrainConfiguredforAEISend S_TrainConfiguredforAEISend --> N_TrainConfiguredforAEISend_Node0 N_TrainConfiguredforAEISend_Node0 -- No --> E_TrainConfiguredforAEISend
File: GCX015.cbl
GIVEN:
A train record with ACK status exists
WHEN:
The system evaluates the train's AEI send configuration
THEN:
The train must have AEI-SEND flag set to true to proceed with full AEI processing
β Consolidated Acceptance Criteria
- The system checks if the train's enroute status has been reported → the train must have ENROUTE-NOT-REPORTED status to qualify for customs transaction processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainEnrouteNotYetReported(["Start Step"])
E_TrainEnrouteNotYetReported(["End Step"])
N_TrainEnrouteNotYetReported_Node0{"The system checks if the train s
enroute status has been reported"}:::decision N_TrainEnrouteNotYetReported_Node0_action["The train must have
ENROUTE-NOT-REPORTED status to
qualify for customs transaction
processing"]:::main N_TrainEnrouteNotYetReported_Node0 -- Yes --> N_TrainEnrouteNotYetReported_Node0_action N_TrainEnrouteNotYetReported_Node0_action --> E_TrainEnrouteNotYetReported S_TrainEnrouteNotYetReported --> N_TrainEnrouteNotYetReported_Node0 N_TrainEnrouteNotYetReported_Node0 -- No --> E_TrainEnrouteNotYetReported
enroute status has been reported"}:::decision N_TrainEnrouteNotYetReported_Node0_action["The train must have
ENROUTE-NOT-REPORTED status to
qualify for customs transaction
processing"]:::main N_TrainEnrouteNotYetReported_Node0 -- Yes --> N_TrainEnrouteNotYetReported_Node0_action N_TrainEnrouteNotYetReported_Node0_action --> E_TrainEnrouteNotYetReported S_TrainEnrouteNotYetReported --> N_TrainEnrouteNotYetReported_Node0 N_TrainEnrouteNotYetReported_Node0 -- No --> E_TrainEnrouteNotYetReported
File: GCX015.cbl
GIVEN:
A train with ACK status and AEI send configuration enabled
WHEN:
The system checks if the train's enroute status has been reported
THEN:
The train must have ENROUTE-NOT-REPORTED status to qualify for customs transaction processing
β Consolidated Acceptance Criteria
- The system examines the train ID suffix at position 23 → the train ID must end with 'T' to qualify for full AEI customs transaction processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainIDSuffixT(["Start Step"])
E_TrainIDSuffixT(["End Step"])
N_TrainIDSuffixT_Node0{"The system examines the train ID
suffix at position 23"}:::decision N_TrainIDSuffixT_Node0_action["The train ID must end with T to
qualify for full AEI customs
transaction processing"]:::main N_TrainIDSuffixT_Node0 -- Yes --> N_TrainIDSuffixT_Node0_action N_TrainIDSuffixT_Node0_action --> E_TrainIDSuffixT S_TrainIDSuffixT --> N_TrainIDSuffixT_Node0 N_TrainIDSuffixT_Node0 -- No --> E_TrainIDSuffixT
suffix at position 23"}:::decision N_TrainIDSuffixT_Node0_action["The train ID must end with T to
qualify for full AEI customs
transaction processing"]:::main N_TrainIDSuffixT_Node0 -- Yes --> N_TrainIDSuffixT_Node0_action N_TrainIDSuffixT_Node0_action --> E_TrainIDSuffixT S_TrainIDSuffixT --> N_TrainIDSuffixT_Node0 N_TrainIDSuffixT_Node0 -- No --> E_TrainIDSuffixT
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train with ACK status, AEI send enabled, and enroute not reported
WHEN:
The system examines the train ID suffix at position 23
THEN:
The train ID must end with 'T' to qualify for full AEI customs transaction processing
β Consolidated Acceptance Criteria
- The system sets up customs transaction data → the system must populate transaction code as 'GCT1461E', security as HIGH-VALUES, customer code as 'A', and map train details to customs fields including train ID, stations, consist number, date and time
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetUpCustomsTransactionData(["Start Step"])
E_SetUpCustomsTransactionData(["End Step"])
N_SetUpCustomsTransactionData_Node0{"The system sets up customs
transaction data"}:::decision N_SetUpCustomsTransactionData_Node0_action["The system must populate
transaction code as GCT1461E ,
security as HIGH-VALUES, customer
code as A , and map train details to
customs fields including train ID,
stations, consist number, date and
time"]:::main N_SetUpCustomsTransactionData_Node0 -- Yes --> N_SetUpCustomsTransactionData_Node0_action N_SetUpCustomsTransactionData_Node0_action --> E_SetUpCustomsTransactionData S_SetUpCustomsTransactionData --> N_SetUpCustomsTransactionData_Node0 N_SetUpCustomsTransactionData_Node0 -- No --> E_SetUpCustomsTransactionData
transaction data"}:::decision N_SetUpCustomsTransactionData_Node0_action["The system must populate
transaction code as GCT1461E ,
security as HIGH-VALUES, customer
code as A , and map train details to
customs fields including train ID,
stations, consist number, date and
time"]:::main N_SetUpCustomsTransactionData_Node0 -- Yes --> N_SetUpCustomsTransactionData_Node0_action N_SetUpCustomsTransactionData_Node0_action --> E_SetUpCustomsTransactionData S_SetUpCustomsTransactionData --> N_SetUpCustomsTransactionData_Node0 N_SetUpCustomsTransactionData_Node0 -- No --> E_SetUpCustomsTransactionData
File: GCX015.cbl
GIVEN:
A train qualifies for AEI processing with all validation criteria met
WHEN:
The system sets up customs transaction data
THEN:
- The system must populate transaction code as 'gct1461e', security as high-values, customer code as 'a', and map train details to customs fields including train id, stations, consist number, date
- Time
β Consolidated Acceptance Criteria
- The system loads car information from the train consist → the system must process each car excluding container indicators 'C', extract equipment initials and numbers, determine loaded/empty status based on next car's container indicator, map equipment types (LO to L, ET to E), and limit processing to maximum 500 cars
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LoadTrainCarInformation(["Start Step"])
E_LoadTrainCarInformation(["End Step"])
N_LoadTrainCarInformation_Node0{"The system loads car information
from the train consist"}:::decision N_LoadTrainCarInformation_Node0_action["The system must process each car
excluding container indicators C ,
extract equipment initials and
numbers, determine loadedempty
status based on next car s container
indicator, map equipment types LO to
L, ET to E, and limit processing to
maximum 500 cars"]:::main N_LoadTrainCarInformation_Node0 -- Yes --> N_LoadTrainCarInformation_Node0_action N_LoadTrainCarInformation_Node0_action --> E_LoadTrainCarInformation S_LoadTrainCarInformation --> N_LoadTrainCarInformation_Node0 N_LoadTrainCarInformation_Node0 -- No --> E_LoadTrainCarInformation
from the train consist"}:::decision N_LoadTrainCarInformation_Node0_action["The system must process each car
excluding container indicators C ,
extract equipment initials and
numbers, determine loadedempty
status based on next car s container
indicator, map equipment types LO to
L, ET to E, and limit processing to
maximum 500 cars"]:::main N_LoadTrainCarInformation_Node0 -- Yes --> N_LoadTrainCarInformation_Node0_action N_LoadTrainCarInformation_Node0_action --> E_LoadTrainCarInformation S_LoadTrainCarInformation --> N_LoadTrainCarInformation_Node0 N_LoadTrainCarInformation_Node0 -- No --> E_LoadTrainCarInformation
File: GCX015.cbl
GIVEN:
Customs transaction data is set up for a qualified train
WHEN:
The system loads car information from the train consist
THEN:
- The system must process each car excluding container indicators 'c', extract equipment initials
- Numbers, determine loaded/empty status based on next car's container indicator, map equipment types (lo to l, et to e), and limit processing to maximum 500 cars
β Consolidated Acceptance Criteria
- The system submits the customs transaction → the system must call CIMS to change message format, call WRITMSGL to send the customs transaction with message code 'S', and call CIMS to purge the transaction
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendAEIStatusMessage(["Start Step"])
E_SendAEIStatusMessage(["End Step"])
N_SendAEIStatusMessage_Node0{"The system submits the customs
transaction"}:::decision N_SendAEIStatusMessage_Node0_action["The system must call CIMS to change
message format, call WRITMSGL to
send the customs transaction with
message code S , and call CIMS to
purge the transaction"]:::main N_SendAEIStatusMessage_Node0 -- Yes --> N_SendAEIStatusMessage_Node0_action N_SendAEIStatusMessage_Node0_action --> E_SendAEIStatusMessage S_SendAEIStatusMessage --> N_SendAEIStatusMessage_Node0 N_SendAEIStatusMessage_Node0 -- No --> E_SendAEIStatusMessage
transaction"}:::decision N_SendAEIStatusMessage_Node0_action["The system must call CIMS to change
message format, call WRITMSGL to
send the customs transaction with
message code S , and call CIMS to
purge the transaction"]:::main N_SendAEIStatusMessage_Node0 -- Yes --> N_SendAEIStatusMessage_Node0_action N_SendAEIStatusMessage_Node0_action --> E_SendAEIStatusMessage S_SendAEIStatusMessage --> N_SendAEIStatusMessage_Node0 N_SendAEIStatusMessage_Node0 -- No --> E_SendAEIStatusMessage
File: GCX015.cbl
GIVEN:
Train car information has been loaded into the customs transaction
WHEN:
The system submits the customs transaction
THEN:
The system must call CIMS to change message format, call WRITMSGL to send the customs transaction with message code 'S', and call CIMS to purge the transaction
β Consolidated Acceptance Criteria
- The system processes AEI status messaging → the system must retrieve AEI Merlin ID, format status message with train ID and current status, and send via Merlin messaging system
- The system processes terminal enroute notifications → the system must retrieve AEI Merlin ID, format enroute message with train ID, and send notification via Merlin messaging system
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendAEIStatusMessageOnly(["Start Step"])
E_SendAEIStatusMessageOnly(["End Step"])
N_SendAEIStatusMessageOnly_Node0{"The system processes AEI status
messaging"}:::decision N_SendAEIStatusMessageOnly_Node0_action["The system must retrieve AEI Merlin
ID, format status message with train
ID and current status, and send via
Merlin messaging system"]:::main N_SendAEIStatusMessageOnly_Node0 -- Yes --> N_SendAEIStatusMessageOnly_Node0_action N_SendAEIStatusMessageOnly_Node0_action --> E_SendAEIStatusMessageOnly S_SendAEIStatusMessageOnly --> N_SendAEIStatusMessageOnly_Node0 N_SendAEIStatusMessageOnly_Node1{"The system processes terminal
enroute notifications"}:::decision N_SendAEIStatusMessageOnly_Node1_action["The system must retrieve AEI Merlin
ID, format enroute message with
train ID, and send notification via
Merlin messaging system"]:::main N_SendAEIStatusMessageOnly_Node1 -- Yes --> N_SendAEIStatusMessageOnly_Node1_action N_SendAEIStatusMessageOnly_Node1_action --> E_SendAEIStatusMessageOnly N_SendAEIStatusMessageOnly_Node0 -- No --> N_SendAEIStatusMessageOnly_Node1 N_SendAEIStatusMessageOnly_Node1 -- No --> E_SendAEIStatusMessageOnly
messaging"}:::decision N_SendAEIStatusMessageOnly_Node0_action["The system must retrieve AEI Merlin
ID, format status message with train
ID and current status, and send via
Merlin messaging system"]:::main N_SendAEIStatusMessageOnly_Node0 -- Yes --> N_SendAEIStatusMessageOnly_Node0_action N_SendAEIStatusMessageOnly_Node0_action --> E_SendAEIStatusMessageOnly S_SendAEIStatusMessageOnly --> N_SendAEIStatusMessageOnly_Node0 N_SendAEIStatusMessageOnly_Node1{"The system processes terminal
enroute notifications"}:::decision N_SendAEIStatusMessageOnly_Node1_action["The system must retrieve AEI Merlin
ID, format enroute message with
train ID, and send notification via
Merlin messaging system"]:::main N_SendAEIStatusMessageOnly_Node1 -- Yes --> N_SendAEIStatusMessageOnly_Node1_action N_SendAEIStatusMessageOnly_Node1_action --> E_SendAEIStatusMessageOnly N_SendAEIStatusMessageOnly_Node0 -- No --> N_SendAEIStatusMessageOnly_Node1 N_SendAEIStatusMessageOnly_Node1 -- No --> E_SendAEIStatusMessageOnly
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A train has AEI-SEND configuration enabled but does not meet all qualification criteria for customs processing
WHEN:
The system processes AEI status messaging
THEN:
- The system must retrieve aei merlin id, format status message with train id
- Current status, and send via merlin messaging system
File: GCX015.cbl
GIVEN:
A train has ACK status, AEI send enabled, and enroute already reported
WHEN:
The system processes terminal enroute notifications
THEN:
The system must retrieve AEI Merlin ID, format enroute message with train ID, and send notification via Merlin messaging system
β Consolidated Acceptance Criteria
- If AEI processing eligibility → the train qualifies for AEI processing if it has ACK status AND AEI send flag is enabled AND enroute is not yet reported AND train identifier ends with 'T'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainQualifiesforAEI(["Start Step"])
E_TrainQualifiesforAEI(["End Step"])
N_TrainQualifiesforAEI_Node0{"The system evaluates AEI processing
eligibility"}:::decision N_TrainQualifiesforAEI_Node0_action["The train qualifies for AEI
processing if it has ACK status AND
AEI send flag is enabled AND enroute
is not yet reported AND train
identifier ends with T"]:::main N_TrainQualifiesforAEI_Node0 -- Yes --> N_TrainQualifiesforAEI_Node0_action N_TrainQualifiesforAEI_Node0_action --> E_TrainQualifiesforAEI S_TrainQualifiesforAEI --> N_TrainQualifiesforAEI_Node0 N_TrainQualifiesforAEI_Node0 -- No --> E_TrainQualifiesforAEI
eligibility"}:::decision N_TrainQualifiesforAEI_Node0_action["The train qualifies for AEI
processing if it has ACK status AND
AEI send flag is enabled AND enroute
is not yet reported AND train
identifier ends with T"]:::main N_TrainQualifiesforAEI_Node0 -- Yes --> N_TrainQualifiesforAEI_Node0_action N_TrainQualifiesforAEI_Node0_action --> E_TrainQualifiesforAEI S_TrainQualifiesforAEI --> N_TrainQualifiesforAEI_Node0 N_TrainQualifiesforAEI_Node0 -- No --> E_TrainQualifiesforAEI
File: GCX015.cbl
GIVEN:
A train record exists with status, AEI send flag, enroute reporting status, and train identifier
WHEN:
The system evaluates AEI processing eligibility
THEN:
- The train qualifies for aei processing if it has ack status
- Aei send flag is enabled
- Enroute is not yet reported
- Train identifier ends with 't'
β Consolidated Acceptance Criteria
- Setting up customs transaction data → the customs transaction code is set to 'GCT1461E'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTransactionCodetoGCT1461E(["Start Step"])
E_SetTransactionCodetoGCT1461E(["End Step"])
N_SetTransactionCodetoGCT1461E_Node0{"Setting up customs transaction data"}:::decision
N_SetTransactionCodetoGCT1461E_Node0_action["The customs transaction code is set
to GCT1461E"]:::main N_SetTransactionCodetoGCT1461E_Node0 -- Yes --> N_SetTransactionCodetoGCT1461E_Node0_action N_SetTransactionCodetoGCT1461E_Node0_action --> E_SetTransactionCodetoGCT1461E S_SetTransactionCodetoGCT1461E --> N_SetTransactionCodetoGCT1461E_Node0 N_SetTransactionCodetoGCT1461E_Node0 -- No --> E_SetTransactionCodetoGCT1461E
to GCT1461E"]:::main N_SetTransactionCodetoGCT1461E_Node0 -- Yes --> N_SetTransactionCodetoGCT1461E_Node0_action N_SetTransactionCodetoGCT1461E_Node0_action --> E_SetTransactionCodetoGCT1461E S_SetTransactionCodetoGCT1461E --> N_SetTransactionCodetoGCT1461E_Node0 N_SetTransactionCodetoGCT1461E_Node0 -- No --> E_SetTransactionCodetoGCT1461E
File: GCX015.cbl
GIVEN:
A train qualifies for AEI processing
WHEN:
Setting up customs transaction data
THEN:
The customs transaction code is set to 'GCT1461E'
β Consolidated Acceptance Criteria
- Setting security parameters → the security level is set to high values (HIGH-VALUES)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetSecurityLeveltoHigh(["Start Step"])
E_SetSecurityLeveltoHigh(["End Step"])
N_SetSecurityLeveltoHigh_Node0{"Setting security parameters"}:::decision
N_SetSecurityLeveltoHigh_Node0_action["The security level is set to high
values HIGH-VALUES"]:::main N_SetSecurityLeveltoHigh_Node0 -- Yes --> N_SetSecurityLeveltoHigh_Node0_action N_SetSecurityLeveltoHigh_Node0_action --> E_SetSecurityLeveltoHigh S_SetSecurityLeveltoHigh --> N_SetSecurityLeveltoHigh_Node0 N_SetSecurityLeveltoHigh_Node0 -- No --> E_SetSecurityLeveltoHigh
values HIGH-VALUES"]:::main N_SetSecurityLeveltoHigh_Node0 -- Yes --> N_SetSecurityLeveltoHigh_Node0_action N_SetSecurityLeveltoHigh_Node0_action --> E_SetSecurityLeveltoHigh S_SetSecurityLeveltoHigh --> N_SetSecurityLeveltoHigh_Node0 N_SetSecurityLeveltoHigh_Node0 -- No --> E_SetSecurityLeveltoHigh
File: GCX015.cbl
GIVEN:
A customs transaction is being prepared for AEI processing
WHEN:
Setting security parameters
THEN:
The security level is set to high values (HIGH-VALUES)
β Consolidated Acceptance Criteria
- Setting the customs processing code → the customs code is set to 'A'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCustomsCodetoA(["Start Step"])
E_SetCustomsCodetoA(["End Step"])
N_SetCustomsCodetoA_Node0{"Setting the customs processing code"}:::decision
N_SetCustomsCodetoA_Node0_action["The customs code is set to A"]:::main
N_SetCustomsCodetoA_Node0 -- Yes --> N_SetCustomsCodetoA_Node0_action
N_SetCustomsCodetoA_Node0_action --> E_SetCustomsCodetoA
S_SetCustomsCodetoA --> N_SetCustomsCodetoA_Node0
N_SetCustomsCodetoA_Node0 -- No --> E_SetCustomsCodetoA
File: GCX015.cbl
GIVEN:
A customs transaction is being configured
WHEN:
Setting the customs processing code
THEN:
The customs code is set to 'A'
β Consolidated Acceptance Criteria
- Building the customs transaction → the train identifier is copied to the customs train ID field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CopyTrainIDtoCustomsTrainID(["Start Step"])
E_CopyTrainIDtoCustomsTrainID(["End Step"])
N_CopyTrainIDtoCustomsTrainID_Node0{"Building the customs transaction"}:::decision
N_CopyTrainIDtoCustomsTrainID_Node0_action["The train identifier is copied to
the customs train ID field"]:::main N_CopyTrainIDtoCustomsTrainID_Node0 -- Yes --> N_CopyTrainIDtoCustomsTrainID_Node0_action N_CopyTrainIDtoCustomsTrainID_Node0_action --> E_CopyTrainIDtoCustomsTrainID S_CopyTrainIDtoCustomsTrainID --> N_CopyTrainIDtoCustomsTrainID_Node0 N_CopyTrainIDtoCustomsTrainID_Node0 -- No --> E_CopyTrainIDtoCustomsTrainID
the customs train ID field"]:::main N_CopyTrainIDtoCustomsTrainID_Node0 -- Yes --> N_CopyTrainIDtoCustomsTrainID_Node0_action N_CopyTrainIDtoCustomsTrainID_Node0_action --> E_CopyTrainIDtoCustomsTrainID S_CopyTrainIDtoCustomsTrainID --> N_CopyTrainIDtoCustomsTrainID_Node0 N_CopyTrainIDtoCustomsTrainID_Node0 -- No --> E_CopyTrainIDtoCustomsTrainID
File: GCX015.cbl
GIVEN:
A train record with a valid train identifier
WHEN:
Building the customs transaction
THEN:
The train identifier is copied to the customs train ID field
β Consolidated Acceptance Criteria
- Setting up customs transaction routing data → both origin and destination stations are set to the train's from station
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetStationInformation(["Start Step"])
E_SetStationInformation(["End Step"])
N_SetStationInformation_Node0{"Setting up customs transaction
routing data"}:::decision N_SetStationInformation_Node0_action["Both origin and destination
stations are set to the train s from
station"]:::main N_SetStationInformation_Node0 -- Yes --> N_SetStationInformation_Node0_action N_SetStationInformation_Node0_action --> E_SetStationInformation S_SetStationInformation --> N_SetStationInformation_Node0 N_SetStationInformation_Node0 -- No --> E_SetStationInformation
routing data"}:::decision N_SetStationInformation_Node0_action["Both origin and destination
stations are set to the train s from
station"]:::main N_SetStationInformation_Node0 -- Yes --> N_SetStationInformation_Node0_action N_SetStationInformation_Node0_action --> E_SetStationInformation S_SetStationInformation --> N_SetStationInformation_Node0 N_SetStationInformation_Node0 -- No --> E_SetStationInformation
File: GCX015.cbl
GIVEN:
A train record with station routing information
WHEN:
Setting up customs transaction routing data
THEN:
- Both origin
- Destination stations are set to the train's from station
β Consolidated Acceptance Criteria
- Building customs transaction data → the train consist number is copied to the customs consist field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CopyTrainConsistNumber(["Start Step"])
E_CopyTrainConsistNumber(["End Step"])
N_CopyTrainConsistNumber_Node0{"Building customs transaction data"}:::decision
N_CopyTrainConsistNumber_Node0_action["The train consist number is copied
to the customs consist field"]:::main N_CopyTrainConsistNumber_Node0 -- Yes --> N_CopyTrainConsistNumber_Node0_action N_CopyTrainConsistNumber_Node0_action --> E_CopyTrainConsistNumber S_CopyTrainConsistNumber --> N_CopyTrainConsistNumber_Node0 N_CopyTrainConsistNumber_Node0 -- No --> E_CopyTrainConsistNumber
to the customs consist field"]:::main N_CopyTrainConsistNumber_Node0 -- Yes --> N_CopyTrainConsistNumber_Node0_action N_CopyTrainConsistNumber_Node0_action --> E_CopyTrainConsistNumber S_CopyTrainConsistNumber --> N_CopyTrainConsistNumber_Node0 N_CopyTrainConsistNumber_Node0 -- No --> E_CopyTrainConsistNumber
File: GCX015.cbl
GIVEN:
A train record with a consist number
WHEN:
Building customs transaction data
THEN:
The train consist number is copied to the customs consist field
β Consolidated Acceptance Criteria
- Configuring customs transaction timing → the event date is set to the train's P402 EDA value
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetEventDatefromTrainData(["Start Step"])
E_SetEventDatefromTrainData(["End Step"])
N_SetEventDatefromTrainData_Node0{"Configuring customs transaction
timing"}:::decision N_SetEventDatefromTrainData_Node0_action["The event date is set to the train
s P402 EDA value"]:::main N_SetEventDatefromTrainData_Node0 -- Yes --> N_SetEventDatefromTrainData_Node0_action N_SetEventDatefromTrainData_Node0_action --> E_SetEventDatefromTrainData S_SetEventDatefromTrainData --> N_SetEventDatefromTrainData_Node0 N_SetEventDatefromTrainData_Node0 -- No --> E_SetEventDatefromTrainData
timing"}:::decision N_SetEventDatefromTrainData_Node0_action["The event date is set to the train
s P402 EDA value"]:::main N_SetEventDatefromTrainData_Node0 -- Yes --> N_SetEventDatefromTrainData_Node0_action N_SetEventDatefromTrainData_Node0_action --> E_SetEventDatefromTrainData S_SetEventDatefromTrainData --> N_SetEventDatefromTrainData_Node0 N_SetEventDatefromTrainData_Node0 -- No --> E_SetEventDatefromTrainData
File: GCX015.cbl
GIVEN:
A train record with estimated departure date (EDA)
WHEN:
Configuring customs transaction timing
THEN:
The event date is set to the train's P402 EDA value
β Consolidated Acceptance Criteria
- Configuring customs transaction timing → the event time is set to the train's P405 ETA value
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetEventTimefromTrainData(["Start Step"])
E_SetEventTimefromTrainData(["End Step"])
N_SetEventTimefromTrainData_Node0{"Configuring customs transaction
timing"}:::decision N_SetEventTimefromTrainData_Node0_action["The event time is set to the train
s P405 ETA value"]:::main N_SetEventTimefromTrainData_Node0 -- Yes --> N_SetEventTimefromTrainData_Node0_action N_SetEventTimefromTrainData_Node0_action --> E_SetEventTimefromTrainData S_SetEventTimefromTrainData --> N_SetEventTimefromTrainData_Node0 N_SetEventTimefromTrainData_Node0 -- No --> E_SetEventTimefromTrainData
timing"}:::decision N_SetEventTimefromTrainData_Node0_action["The event time is set to the train
s P405 ETA value"]:::main N_SetEventTimefromTrainData_Node0 -- Yes --> N_SetEventTimefromTrainData_Node0_action N_SetEventTimefromTrainData_Node0_action --> E_SetEventTimefromTrainData S_SetEventTimefromTrainData --> N_SetEventTimefromTrainData_Node0 N_SetEventTimefromTrainData_Node0 -- No --> E_SetEventTimefromTrainData
File: GCX015.cbl
GIVEN:
A train record with estimated time of arrival (ETA)
WHEN:
Configuring customs transaction timing
THEN:
The event time is set to the train's P405 ETA value
β Consolidated Acceptance Criteria
- Initializing processing variables → car counter is set to 1, secondary counter is set to 2, and tertiary counter is set to 2
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeCarCounterVariables(["Start Step"])
E_InitializeCarCounterVariables(["End Step"])
N_InitializeCarCounterVariables_Node0{"Initializing processing variables"}:::decision
N_InitializeCarCounterVariables_Node0_action["Car counter is set to 1, secondary
counter is set to 2, and tertiary
counter is set to 2"]:::main N_InitializeCarCounterVariables_Node0 -- Yes --> N_InitializeCarCounterVariables_Node0_action N_InitializeCarCounterVariables_Node0_action --> E_InitializeCarCounterVariables S_InitializeCarCounterVariables --> N_InitializeCarCounterVariables_Node0 N_InitializeCarCounterVariables_Node0 -- No --> E_InitializeCarCounterVariables
counter is set to 2, and tertiary
counter is set to 2"]:::main N_InitializeCarCounterVariables_Node0 -- Yes --> N_InitializeCarCounterVariables_Node0_action N_InitializeCarCounterVariables_Node0_action --> E_InitializeCarCounterVariables S_InitializeCarCounterVariables --> N_InitializeCarCounterVariables_Node0 N_InitializeCarCounterVariables_Node0 -- No --> E_InitializeCarCounterVariables
File: GCX015.cbl
GIVEN:
Starting car information processing for a train
WHEN:
Initializing processing variables
THEN:
Car counter is set to 1, secondary counter is set to 2, and tertiary counter is set to 2
β Consolidated Acceptance Criteria
- Preparing the output data structure → the customs output table is cleared to spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ClearCustomsOutputTable(["Start Step"])
E_ClearCustomsOutputTable(["End Step"])
N_ClearCustomsOutputTable_Node0{"Preparing the output data structure"}:::decision
N_ClearCustomsOutputTable_Node0_action["The customs output table is cleared
to spaces"]:::main N_ClearCustomsOutputTable_Node0 -- Yes --> N_ClearCustomsOutputTable_Node0_action N_ClearCustomsOutputTable_Node0_action --> E_ClearCustomsOutputTable S_ClearCustomsOutputTable --> N_ClearCustomsOutputTable_Node0 N_ClearCustomsOutputTable_Node0 -- No --> E_ClearCustomsOutputTable
to spaces"]:::main N_ClearCustomsOutputTable_Node0 -- Yes --> N_ClearCustomsOutputTable_Node0_action N_ClearCustomsOutputTable_Node0_action --> E_ClearCustomsOutputTable S_ClearCustomsOutputTable --> N_ClearCustomsOutputTable_Node0 N_ClearCustomsOutputTable_Node0 -- No --> E_ClearCustomsOutputTable
File: GCX015.cbl
GIVEN:
Beginning car data processing for customs transaction
WHEN:
Preparing the output data structure
THEN:
The customs output table is cleared to spaces
β Consolidated Acceptance Criteria
- Determining whether to continue processing → continue processing if current car index is within equipment quantity AND car counter is 500 or less
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MoreCarstoProcess(["Start Step"])
E_MoreCarstoProcess(["End Step"])
N_MoreCarstoProcess_Node0{"Determining whether to continue
processing"}:::decision N_MoreCarstoProcess_Node0_action["Continue processing if current car
index is within equipment quantity
AND car counter is 500 or less"]:::main N_MoreCarstoProcess_Node0 -- Yes --> N_MoreCarstoProcess_Node0_action N_MoreCarstoProcess_Node0_action --> E_MoreCarstoProcess S_MoreCarstoProcess --> N_MoreCarstoProcess_Node0 N_MoreCarstoProcess_Node0 -- No --> E_MoreCarstoProcess
processing"}:::decision N_MoreCarstoProcess_Node0_action["Continue processing if current car
index is within equipment quantity
AND car counter is 500 or less"]:::main N_MoreCarstoProcess_Node0 -- Yes --> N_MoreCarstoProcess_Node0_action N_MoreCarstoProcess_Node0_action --> E_MoreCarstoProcess S_MoreCarstoProcess --> N_MoreCarstoProcess_Node0 N_MoreCarstoProcess_Node0 -- No --> E_MoreCarstoProcess
File: GCX015.cbl
GIVEN:
Processing cars in a train consist
WHEN:
Determining whether to continue processing
THEN:
- Continue processing if current car index is within equipment quantity
- Car counter is 500 or less
β Consolidated Acceptance Criteria
- Processing individual cars for customs data → skip the car if its container indicator is 'C'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SkipContainerCars(["Start Step"])
E_SkipContainerCars(["End Step"])
N_SkipContainerCars_Node0{"Processing individual cars for
customs data"}:::decision N_SkipContainerCars_Node0_action["Skip the car if its container
indicator is C"]:::main N_SkipContainerCars_Node0 -- Yes --> N_SkipContainerCars_Node0_action N_SkipContainerCars_Node0_action --> E_SkipContainerCars S_SkipContainerCars --> N_SkipContainerCars_Node0 N_SkipContainerCars_Node0 -- No --> E_SkipContainerCars
customs data"}:::decision N_SkipContainerCars_Node0_action["Skip the car if its container
indicator is C"]:::main N_SkipContainerCars_Node0 -- Yes --> N_SkipContainerCars_Node0_action N_SkipContainerCars_Node0_action --> E_SkipContainerCars S_SkipContainerCars --> N_SkipContainerCars_Node0 N_SkipContainerCars_Node0 -- No --> E_SkipContainerCars
File: GCX015.cbl
GIVEN:
A car with container indicator in the train consist
WHEN:
Processing individual cars for customs data
THEN:
Skip the car if its container indicator is 'C'
β Consolidated Acceptance Criteria
- Building customs car data → copy equipment initials to customs car initials AND convert equipment number to 6-digit format for customs car number
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CopyCarInitialsandNumbers(["Start Step"])
E_CopyCarInitialsandNumbers(["End Step"])
N_CopyCarInitialsandNumbers_Node0{"Building customs car data"}:::decision
N_CopyCarInitialsandNumbers_Node0_action["Copy equipment initials to customs
car initials AND convert equipment
number to 6-digit format for customs
car number"]:::main N_CopyCarInitialsandNumbers_Node0 -- Yes --> N_CopyCarInitialsandNumbers_Node0_action N_CopyCarInitialsandNumbers_Node0_action --> E_CopyCarInitialsandNumbers S_CopyCarInitialsandNumbers --> N_CopyCarInitialsandNumbers_Node0 N_CopyCarInitialsandNumbers_Node0 -- No --> E_CopyCarInitialsandNumbers
car initials AND convert equipment
number to 6-digit format for customs
car number"]:::main N_CopyCarInitialsandNumbers_Node0 -- Yes --> N_CopyCarInitialsandNumbers_Node0_action N_CopyCarInitialsandNumbers_Node0_action --> E_CopyCarInitialsandNumbers S_CopyCarInitialsandNumbers --> N_CopyCarInitialsandNumbers_Node0 N_CopyCarInitialsandNumbers_Node0 -- No --> E_CopyCarInitialsandNumbers
File: GCX015.cbl
GIVEN:
A non-container car with equipment initials and number
WHEN:
Building customs car data
THEN:
- Copy equipment initials to customs car initials
- Convert equipment number to 6-digit format for customs car number
β Consolidated Acceptance Criteria
- Setting the car's load status for customs → if processing the last car, use its load/empty indicator; otherwise, if the next car is a container, set status to 'L' (loaded); otherwise, use current car's load/empty indicator
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_DetermineCarLoadStatus(["Start Step"])
E_DetermineCarLoadStatus(["End Step"])
N_DetermineCarLoadStatus_Node0{"Setting the car s load status for
customs"}:::decision N_DetermineCarLoadStatus_Node0_action["If processing the last car, use its
loadempty indicator otherwise, if
the next car is a container, set
status to L loaded otherwise, use
current car s loadempty indicator"]:::main N_DetermineCarLoadStatus_Node0 -- Yes --> N_DetermineCarLoadStatus_Node0_action N_DetermineCarLoadStatus_Node0_action --> E_DetermineCarLoadStatus S_DetermineCarLoadStatus --> N_DetermineCarLoadStatus_Node0 N_DetermineCarLoadStatus_Node0 -- No --> E_DetermineCarLoadStatus
customs"}:::decision N_DetermineCarLoadStatus_Node0_action["If processing the last car, use its
loadempty indicator otherwise, if
the next car is a container, set
status to L loaded otherwise, use
current car s loadempty indicator"]:::main N_DetermineCarLoadStatus_Node0 -- Yes --> N_DetermineCarLoadStatus_Node0_action N_DetermineCarLoadStatus_Node0_action --> E_DetermineCarLoadStatus S_DetermineCarLoadStatus --> N_DetermineCarLoadStatus_Node0 N_DetermineCarLoadStatus_Node0 -- No --> E_DetermineCarLoadStatus
File: GCX015.cbl
GIVEN:
A car being processed with load/empty indicator and information about subsequent cars
WHEN:
Setting the car's load status for customs
THEN:
If processing the last car, use its load/empty indicator; otherwise, if the next car is a container, set status to 'L' (loaded); otherwise, use current car's load/empty indicator
β Consolidated Acceptance Criteria
- Setting customs car type information → if equipment type is 'LO', set car kind to 'L'; if equipment type is 'ET', set car kind to 'E'; otherwise, set car kind to spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCarTypeInformation(["Start Step"])
E_SetCarTypeInformation(["End Step"])
N_SetCarTypeInformation_Node0{"Setting customs car type
information"}:::decision N_SetCarTypeInformation_Node0_action["If equipment type is LO , set car
kind to L if equipment type is ET ,
set car kind to E otherwise, set car
kind to spaces"]:::main N_SetCarTypeInformation_Node0 -- Yes --> N_SetCarTypeInformation_Node0_action N_SetCarTypeInformation_Node0_action --> E_SetCarTypeInformation S_SetCarTypeInformation --> N_SetCarTypeInformation_Node0 N_SetCarTypeInformation_Node0 -- No --> E_SetCarTypeInformation
information"}:::decision N_SetCarTypeInformation_Node0_action["If equipment type is LO , set car
kind to L if equipment type is ET ,
set car kind to E otherwise, set car
kind to spaces"]:::main N_SetCarTypeInformation_Node0 -- Yes --> N_SetCarTypeInformation_Node0_action N_SetCarTypeInformation_Node0_action --> E_SetCarTypeInformation S_SetCarTypeInformation --> N_SetCarTypeInformation_Node0 N_SetCarTypeInformation_Node0 -- No --> E_SetCarTypeInformation
File: GCX015.cbl
GIVEN:
A car with equipment type designation
WHEN:
Setting customs car type information
THEN:
If equipment type is 'LO', set car kind to 'L'; if equipment type is 'ET', set car kind to 'E'; otherwise, set car kind to spaces
β Consolidated Acceptance Criteria
- Completing car data processing → increment the car counter by 1 AND increment the tertiary counter by 1
- The car processing is complete → the car counter should be incremented by 1 and the position counter should be incremented by 1
- The car information has been stored → the car counter should be incremented by 1 to maintain accurate count
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IncrementCarCounter(["Start Step"])
E_IncrementCarCounter(["End Step"])
N_IncrementCarCounter_Node0{"Completing car data processing"}:::decision
N_IncrementCarCounter_Node0_action["Increment the car counter by 1 AND
increment the tertiary counter by 1"]:::main N_IncrementCarCounter_Node0 -- Yes --> N_IncrementCarCounter_Node0_action N_IncrementCarCounter_Node0_action --> E_IncrementCarCounter S_IncrementCarCounter --> N_IncrementCarCounter_Node0 N_IncrementCarCounter_Node1{"The car processing is complete"}:::decision N_IncrementCarCounter_Node1_action["The car counter should be
incremented by 1 and the position
counter should be incremented by 1"]:::main N_IncrementCarCounter_Node1 -- Yes --> N_IncrementCarCounter_Node1_action N_IncrementCarCounter_Node1_action --> E_IncrementCarCounter N_IncrementCarCounter_Node0 -- No --> N_IncrementCarCounter_Node1 N_IncrementCarCounter_Node2{"The car information has been stored"}:::decision N_IncrementCarCounter_Node2_action["The car counter should be
incremented by 1 to maintain
accurate count"]:::main N_IncrementCarCounter_Node2 -- Yes --> N_IncrementCarCounter_Node2_action N_IncrementCarCounter_Node2_action --> E_IncrementCarCounter N_IncrementCarCounter_Node1 -- No --> N_IncrementCarCounter_Node2 N_IncrementCarCounter_Node2 -- No --> E_IncrementCarCounter
increment the tertiary counter by 1"]:::main N_IncrementCarCounter_Node0 -- Yes --> N_IncrementCarCounter_Node0_action N_IncrementCarCounter_Node0_action --> E_IncrementCarCounter S_IncrementCarCounter --> N_IncrementCarCounter_Node0 N_IncrementCarCounter_Node1{"The car processing is complete"}:::decision N_IncrementCarCounter_Node1_action["The car counter should be
incremented by 1 and the position
counter should be incremented by 1"]:::main N_IncrementCarCounter_Node1 -- Yes --> N_IncrementCarCounter_Node1_action N_IncrementCarCounter_Node1_action --> E_IncrementCarCounter N_IncrementCarCounter_Node0 -- No --> N_IncrementCarCounter_Node1 N_IncrementCarCounter_Node2{"The car information has been stored"}:::decision N_IncrementCarCounter_Node2_action["The car counter should be
incremented by 1 to maintain
accurate count"]:::main N_IncrementCarCounter_Node2 -- Yes --> N_IncrementCarCounter_Node2_action N_IncrementCarCounter_Node2_action --> E_IncrementCarCounter N_IncrementCarCounter_Node1 -- No --> N_IncrementCarCounter_Node2 N_IncrementCarCounter_Node2 -- No --> E_IncrementCarCounter
File: GCX015.cbl
GIVEN:
A non-container car has been processed successfully
WHEN:
Completing car data processing
THEN:
- Increment the car counter by 1
- Increment the tertiary counter by 1
File: GCX015.cbl
GIVEN:
A car record has been successfully built for customs
WHEN:
The car processing is complete
THEN:
- The car counter should be incremented by 1
- The position counter should be incremented by 1
File: GCX015.cbl
GIVEN:
A non-container equipment record has been successfully added to the customs output table
WHEN:
The car information has been stored
THEN:
The car counter should be incremented by 1 to maintain accurate count
β Consolidated Acceptance Criteria
- Submitting the transaction for processing → call CIMS with change operation using the customs transaction code
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendTransactiontoCIMS(["Start Step"])
E_SendTransactiontoCIMS(["End Step"])
N_SendTransactiontoCIMS_Node0{"Submitting the transaction for
processing"}:::decision N_SendTransactiontoCIMS_Node0_action["Call CIMS with change operation
using the customs transaction code"]:::main N_SendTransactiontoCIMS_Node0 -- Yes --> N_SendTransactiontoCIMS_Node0_action N_SendTransactiontoCIMS_Node0_action --> E_SendTransactiontoCIMS S_SendTransactiontoCIMS --> N_SendTransactiontoCIMS_Node0 N_SendTransactiontoCIMS_Node0 -- No --> E_SendTransactiontoCIMS
processing"}:::decision N_SendTransactiontoCIMS_Node0_action["Call CIMS with change operation
using the customs transaction code"]:::main N_SendTransactiontoCIMS_Node0 -- Yes --> N_SendTransactiontoCIMS_Node0_action N_SendTransactiontoCIMS_Node0_action --> E_SendTransactiontoCIMS S_SendTransactiontoCIMS --> N_SendTransactiontoCIMS_Node0 N_SendTransactiontoCIMS_Node0 -- No --> E_SendTransactiontoCIMS
File: GCX015.cbl
GIVEN:
A completed customs transaction with all car data loaded
WHEN:
Submitting the transaction for processing
THEN:
Call CIMS with change operation using the customs transaction code
β Consolidated Acceptance Criteria
- Submitting the message to the queue → call WRITMSGL with send message code, customs transaction data, message length, and module name
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_WriteMessagetoQueue(["Start Step"])
E_WriteMessagetoQueue(["End Step"])
N_WriteMessagetoQueue_Node0{"Submitting the message to the queue"}:::decision
N_WriteMessagetoQueue_Node0_action["Call WRITMSGL with send message
code, customs transaction data,
message length, and module name"]:::main N_WriteMessagetoQueue_Node0 -- Yes --> N_WriteMessagetoQueue_Node0_action N_WriteMessagetoQueue_Node0_action --> E_WriteMessagetoQueue S_WriteMessagetoQueue --> N_WriteMessagetoQueue_Node0 N_WriteMessagetoQueue_Node0 -- No --> E_WriteMessagetoQueue
code, customs transaction data,
message length, and module name"]:::main N_WriteMessagetoQueue_Node0 -- Yes --> N_WriteMessagetoQueue_Node0_action N_WriteMessagetoQueue_Node0_action --> E_WriteMessagetoQueue S_WriteMessagetoQueue --> N_WriteMessagetoQueue_Node0 N_WriteMessagetoQueue_Node0 -- No --> E_WriteMessagetoQueue
File: GCX015.cbl
GIVEN:
A customs transaction ready for queue processing
WHEN:
Submitting the message to the queue
THEN:
Call WRITMSGL with send message code, customs transaction data, message length, and module name
β Consolidated Acceptance Criteria
- Completing the AEI processing → call CIMS with purge operation to clean up the transaction
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_PurgeTransaction(["Start Step"])
E_PurgeTransaction(["End Step"])
N_PurgeTransaction_Node0{"Completing the AEI processing"}:::decision
N_PurgeTransaction_Node0_action["Call CIMS with purge operation to
clean up the transaction"]:::main N_PurgeTransaction_Node0 -- Yes --> N_PurgeTransaction_Node0_action N_PurgeTransaction_Node0_action --> E_PurgeTransaction S_PurgeTransaction --> N_PurgeTransaction_Node0 N_PurgeTransaction_Node0 -- No --> E_PurgeTransaction
clean up the transaction"]:::main N_PurgeTransaction_Node0 -- Yes --> N_PurgeTransaction_Node0_action N_PurgeTransaction_Node0_action --> E_PurgeTransaction S_PurgeTransaction --> N_PurgeTransaction_Node0 N_PurgeTransaction_Node0 -- No --> E_PurgeTransaction
File: GCX015.cbl
GIVEN:
A customs transaction has been successfully submitted
WHEN:
Completing the AEI processing
THEN:
Call CIMS with purge operation to clean up the transaction
β Consolidated Acceptance Criteria
- The car has a container indicator of 'C' → the car should be skipped and not included in the customs car records
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IsCaraContainer(["Start Step"])
E_IsCaraContainer(["End Step"])
N_IsCaraContainer_Node0{"The car has a container indicator
of C"}:::decision N_IsCaraContainer_Node0_action["The car should be skipped and not
included in the customs car records"]:::main N_IsCaraContainer_Node0 -- Yes --> N_IsCaraContainer_Node0_action N_IsCaraContainer_Node0_action --> E_IsCaraContainer S_IsCaraContainer --> N_IsCaraContainer_Node0 N_IsCaraContainer_Node0 -- No --> E_IsCaraContainer
of C"}:::decision N_IsCaraContainer_Node0_action["The car should be skipped and not
included in the customs car records"]:::main N_IsCaraContainer_Node0 -- Yes --> N_IsCaraContainer_Node0_action N_IsCaraContainer_Node0_action --> E_IsCaraContainer S_IsCaraContainer --> N_IsCaraContainer_Node0 N_IsCaraContainer_Node0 -- No --> E_IsCaraContainer
File: GCX015.cbl
GIVEN:
A train car is being processed for customs reporting
WHEN:
The car has a container indicator of 'C'
THEN:
- The car should be skipped
- Not included in the customs car records
β Consolidated Acceptance Criteria
- The car equipment information is available → the car initials should be extracted from the equipment initials field and stored in the customs car record
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractCarInitials(["Start Step"])
E_ExtractCarInitials(["End Step"])
N_ExtractCarInitials_Node0{"The car equipment information is
available"}:::decision N_ExtractCarInitials_Node0_action["The car initials should be
extracted from the equipment
initials field and stored in the
customs car record"]:::main N_ExtractCarInitials_Node0 -- Yes --> N_ExtractCarInitials_Node0_action N_ExtractCarInitials_Node0_action --> E_ExtractCarInitials S_ExtractCarInitials --> N_ExtractCarInitials_Node0 N_ExtractCarInitials_Node0 -- No --> E_ExtractCarInitials
available"}:::decision N_ExtractCarInitials_Node0_action["The car initials should be
extracted from the equipment
initials field and stored in the
customs car record"]:::main N_ExtractCarInitials_Node0 -- Yes --> N_ExtractCarInitials_Node0_action N_ExtractCarInitials_Node0_action --> E_ExtractCarInitials S_ExtractCarInitials --> N_ExtractCarInitials_Node0 N_ExtractCarInitials_Node0 -- No --> E_ExtractCarInitials
File: GCX015.cbl
GIVEN:
A non-container car is being processed for customs
WHEN:
The car equipment information is available
THEN:
- The car initials should be extracted from the equipment initials field
- Stored in the customs car record
β Consolidated Acceptance Criteria
- The car equipment number is available → the car number should be extracted and converted to a 6-digit format for the customs car record
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractCarNumber(["Start Step"])
E_ExtractCarNumber(["End Step"])
N_ExtractCarNumber_Node0{"The car equipment number is
available"}:::decision N_ExtractCarNumber_Node0_action["The car number should be extracted
and converted to a 6-digit format
for the customs car record"]:::main N_ExtractCarNumber_Node0 -- Yes --> N_ExtractCarNumber_Node0_action N_ExtractCarNumber_Node0_action --> E_ExtractCarNumber S_ExtractCarNumber --> N_ExtractCarNumber_Node0 N_ExtractCarNumber_Node0 -- No --> E_ExtractCarNumber
available"}:::decision N_ExtractCarNumber_Node0_action["The car number should be extracted
and converted to a 6-digit format
for the customs car record"]:::main N_ExtractCarNumber_Node0 -- Yes --> N_ExtractCarNumber_Node0_action N_ExtractCarNumber_Node0_action --> E_ExtractCarNumber S_ExtractCarNumber --> N_ExtractCarNumber_Node0 N_ExtractCarNumber_Node0 -- No --> E_ExtractCarNumber
File: GCX015.cbl
GIVEN:
A non-container car is being processed for customs
WHEN:
The car equipment number is available
THEN:
- The car number should be extracted
- Converted to a 6-digit format for the customs car record
β Consolidated Acceptance Criteria
- The next car in sequence has a container indicator of 'C' → the current car's load/empty status should be set to 'L' (Loaded), otherwise use the current car's load/empty status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_DetermineLoadEmptyStatusfromNextCar(["Start Step"])
E_DetermineLoadEmptyStatusfromNextCar(["End Step"])
N_DetermineLoadEmptyStatusfromNextCar_Node0{"The next car in sequence has a
container indicator of C"}:::decision N_DetermineLoadEmptyStatusfromNextCar_Node0_action["The current car s loadempty status
should be set to L Loaded, otherwise
use the current car s loadempty
status"]:::main N_DetermineLoadEmptyStatusfromNextCar_Node0 -- Yes --> N_DetermineLoadEmptyStatusfromNextCar_Node0_action N_DetermineLoadEmptyStatusfromNextCar_Node0_action --> E_DetermineLoadEmptyStatusfromNextCar S_DetermineLoadEmptyStatusfromNextCar --> N_DetermineLoadEmptyStatusfromNextCar_Node0 N_DetermineLoadEmptyStatusfromNextCar_Node0 -- No --> E_DetermineLoadEmptyStatusfromNextCar
container indicator of C"}:::decision N_DetermineLoadEmptyStatusfromNextCar_Node0_action["The current car s loadempty status
should be set to L Loaded, otherwise
use the current car s loadempty
status"]:::main N_DetermineLoadEmptyStatusfromNextCar_Node0 -- Yes --> N_DetermineLoadEmptyStatusfromNextCar_Node0_action N_DetermineLoadEmptyStatusfromNextCar_Node0_action --> E_DetermineLoadEmptyStatusfromNextCar S_DetermineLoadEmptyStatusfromNextCar --> N_DetermineLoadEmptyStatusfromNextCar_Node0 N_DetermineLoadEmptyStatusfromNextCar_Node0 -- No --> E_DetermineLoadEmptyStatusfromNextCar
File: GCX015.cbl
GIVEN:
A car is being processed and there are more cars in the train sequence
WHEN:
The next car in sequence has a container indicator of 'C'
THEN:
The current car's load/empty status should be set to 'L' (Loaded), otherwise use the current car's load/empty status
β Consolidated Acceptance Criteria
- No next car is available to check container status → the current car's own load/empty status indicator should be used for the customs record
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseCurrentCarLoadEmptyStatus(["Start Step"])
E_UseCurrentCarLoadEmptyStatus(["End Step"])
N_UseCurrentCarLoadEmptyStatus_Node0{"No next car is available to check
container status"}:::decision N_UseCurrentCarLoadEmptyStatus_Node0_action["The current car s own loadempty
status indicator should be used for
the customs record"]:::main N_UseCurrentCarLoadEmptyStatus_Node0 -- Yes --> N_UseCurrentCarLoadEmptyStatus_Node0_action N_UseCurrentCarLoadEmptyStatus_Node0_action --> E_UseCurrentCarLoadEmptyStatus S_UseCurrentCarLoadEmptyStatus --> N_UseCurrentCarLoadEmptyStatus_Node0 N_UseCurrentCarLoadEmptyStatus_Node0 -- No --> E_UseCurrentCarLoadEmptyStatus
container status"}:::decision N_UseCurrentCarLoadEmptyStatus_Node0_action["The current car s own loadempty
status indicator should be used for
the customs record"]:::main N_UseCurrentCarLoadEmptyStatus_Node0 -- Yes --> N_UseCurrentCarLoadEmptyStatus_Node0_action N_UseCurrentCarLoadEmptyStatus_Node0_action --> E_UseCurrentCarLoadEmptyStatus S_UseCurrentCarLoadEmptyStatus --> N_UseCurrentCarLoadEmptyStatus_Node0 N_UseCurrentCarLoadEmptyStatus_Node0 -- No --> E_UseCurrentCarLoadEmptyStatus
File: GCX015.cbl
GIVEN:
A car is being processed and it is the last car in the train sequence
WHEN:
No next car is available to check container status
THEN:
The current car's own load/empty status indicator should be used for the customs record
β Consolidated Acceptance Criteria
- The equipment type is 'LO' → the car kind should be set to 'L' to indicate locomotive
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCarKindLforLocomotive(["Start Step"])
E_SetCarKindLforLocomotive(["End Step"])
N_SetCarKindLforLocomotive_Node0{"The equipment type is LO"}:::decision
N_SetCarKindLforLocomotive_Node0_action["The car kind should be set to L to
indicate locomotive"]:::main N_SetCarKindLforLocomotive_Node0 -- Yes --> N_SetCarKindLforLocomotive_Node0_action N_SetCarKindLforLocomotive_Node0_action --> E_SetCarKindLforLocomotive S_SetCarKindLforLocomotive --> N_SetCarKindLforLocomotive_Node0 N_SetCarKindLforLocomotive_Node0 -- No --> E_SetCarKindLforLocomotive
indicate locomotive"]:::main N_SetCarKindLforLocomotive_Node0 -- Yes --> N_SetCarKindLforLocomotive_Node0_action N_SetCarKindLforLocomotive_Node0_action --> E_SetCarKindLforLocomotive S_SetCarKindLforLocomotive --> N_SetCarKindLforLocomotive_Node0 N_SetCarKindLforLocomotive_Node0 -- No --> E_SetCarKindLforLocomotive
File: GCX015.cbl
GIVEN:
A car is being processed for customs reporting
WHEN:
The equipment type is 'LO'
THEN:
The car kind should be set to 'L' to indicate locomotive
β Consolidated Acceptance Criteria
- The equipment type is 'ET' → the car kind should be set to 'E' to indicate engine
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCarKindEforEngine(["Start Step"])
E_SetCarKindEforEngine(["End Step"])
N_SetCarKindEforEngine_Node0{"The equipment type is ET"}:::decision
N_SetCarKindEforEngine_Node0_action["The car kind should be set to E to
indicate engine"]:::main N_SetCarKindEforEngine_Node0 -- Yes --> N_SetCarKindEforEngine_Node0_action N_SetCarKindEforEngine_Node0_action --> E_SetCarKindEforEngine S_SetCarKindEforEngine --> N_SetCarKindEforEngine_Node0 N_SetCarKindEforEngine_Node0 -- No --> E_SetCarKindEforEngine
indicate engine"]:::main N_SetCarKindEforEngine_Node0 -- Yes --> N_SetCarKindEforEngine_Node0_action N_SetCarKindEforEngine_Node0_action --> E_SetCarKindEforEngine S_SetCarKindEforEngine --> N_SetCarKindEforEngine_Node0 N_SetCarKindEforEngine_Node0 -- No --> E_SetCarKindEforEngine
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A car is being processed for customs reporting and equipment type is not 'LO'
WHEN:
The equipment type is 'ET'
THEN:
The car kind should be set to 'E' to indicate engine
β Consolidated Acceptance Criteria
- The equipment type is neither 'LO' nor 'ET' → the car kind should be set to blank spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCarKindBlank(["Start Step"])
E_SetCarKindBlank(["End Step"])
N_SetCarKindBlank_Node0{"The equipment type is neither LO
nor ET"}:::decision N_SetCarKindBlank_Node0_action["The car kind should be set to blank
spaces"]:::main N_SetCarKindBlank_Node0 -- Yes --> N_SetCarKindBlank_Node0_action N_SetCarKindBlank_Node0_action --> E_SetCarKindBlank S_SetCarKindBlank --> N_SetCarKindBlank_Node0 N_SetCarKindBlank_Node0 -- No --> E_SetCarKindBlank
nor ET"}:::decision N_SetCarKindBlank_Node0_action["The car kind should be set to blank
spaces"]:::main N_SetCarKindBlank_Node0 -- Yes --> N_SetCarKindBlank_Node0_action N_SetCarKindBlank_Node0_action --> E_SetCarKindBlank S_SetCarKindBlank --> N_SetCarKindBlank_Node0 N_SetCarKindBlank_Node0 -- No --> E_SetCarKindBlank
File: GCX015.cbl
GIVEN:
A car is being processed for customs reporting
WHEN:
The equipment type is neither 'LO' nor 'ET'
THEN:
The car kind should be set to blank spaces
β Consolidated Acceptance Criteria
- Car initials, number, load/empty status, and car kind have been determined → a complete customs car record should be built with all the processed information
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildCustomsCarRecord(["Start Step"])
E_BuildCustomsCarRecord(["End Step"])
N_BuildCustomsCarRecord_Node0{"Car initials, number, loadempty
status, and car kind have been
determined"}:::decision N_BuildCustomsCarRecord_Node0_action["A complete customs car record
should be built with all the
processed information"]:::main N_BuildCustomsCarRecord_Node0 -- Yes --> N_BuildCustomsCarRecord_Node0_action N_BuildCustomsCarRecord_Node0_action --> E_BuildCustomsCarRecord S_BuildCustomsCarRecord --> N_BuildCustomsCarRecord_Node0 N_BuildCustomsCarRecord_Node0 -- No --> E_BuildCustomsCarRecord
status, and car kind have been
determined"}:::decision N_BuildCustomsCarRecord_Node0_action["A complete customs car record
should be built with all the
processed information"]:::main N_BuildCustomsCarRecord_Node0 -- Yes --> N_BuildCustomsCarRecord_Node0_action N_BuildCustomsCarRecord_Node0_action --> E_BuildCustomsCarRecord S_BuildCustomsCarRecord --> N_BuildCustomsCarRecord_Node0 N_BuildCustomsCarRecord_Node0 -- No --> E_BuildCustomsCarRecord
File: GCX015.cbl
GIVEN:
All car information has been extracted and classified
WHEN:
Car initials, number, load/empty status, and car kind have been determined
THEN:
A complete customs car record should be built with all the processed information
β Consolidated Acceptance Criteria
- The equipment has a container indicator of 'C' → the equipment should be skipped and the processing should move to the next equipment record
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IsCurrentEquipmentaContainer(["Start Step"])
E_IsCurrentEquipmentaContainer(["End Step"])
N_IsCurrentEquipmentaContainer_Node0{"The equipment has a container
indicator of C"}:::decision N_IsCurrentEquipmentaContainer_Node0_action["The equipment should be skipped and
the processing should move to the
next equipment record"]:::main N_IsCurrentEquipmentaContainer_Node0 -- Yes --> N_IsCurrentEquipmentaContainer_Node0_action N_IsCurrentEquipmentaContainer_Node0_action --> E_IsCurrentEquipmentaContainer S_IsCurrentEquipmentaContainer --> N_IsCurrentEquipmentaContainer_Node0 N_IsCurrentEquipmentaContainer_Node0 -- No --> E_IsCurrentEquipmentaContainer
indicator of C"}:::decision N_IsCurrentEquipmentaContainer_Node0_action["The equipment should be skipped and
the processing should move to the
next equipment record"]:::main N_IsCurrentEquipmentaContainer_Node0 -- Yes --> N_IsCurrentEquipmentaContainer_Node0_action N_IsCurrentEquipmentaContainer_Node0_action --> E_IsCurrentEquipmentaContainer S_IsCurrentEquipmentaContainer --> N_IsCurrentEquipmentaContainer_Node0 N_IsCurrentEquipmentaContainer_Node0 -- No --> E_IsCurrentEquipmentaContainer
File: GCX015.cbl
GIVEN:
A train equipment record is being processed for AEI customs reporting
WHEN:
The equipment has a container indicator of 'C'
THEN:
- The equipment should be skipped
- The processing should move to the next equipment record
β Consolidated Acceptance Criteria
- The equipment initial field contains valid data → the equipment initial should be moved to the customs car initial field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractCarInitialfromEquipment(["Start Step"])
E_ExtractCarInitialfromEquipment(["End Step"])
N_ExtractCarInitialfromEquipment_Node0{"The equipment initial field
contains valid data"}:::decision N_ExtractCarInitialfromEquipment_Node0_action["The equipment initial should be
moved to the customs car initial
field"]:::main N_ExtractCarInitialfromEquipment_Node0 -- Yes --> N_ExtractCarInitialfromEquipment_Node0_action N_ExtractCarInitialfromEquipment_Node0_action --> E_ExtractCarInitialfromEquipment S_ExtractCarInitialfromEquipment --> N_ExtractCarInitialfromEquipment_Node0 N_ExtractCarInitialfromEquipment_Node0 -- No --> E_ExtractCarInitialfromEquipment
contains valid data"}:::decision N_ExtractCarInitialfromEquipment_Node0_action["The equipment initial should be
moved to the customs car initial
field"]:::main N_ExtractCarInitialfromEquipment_Node0 -- Yes --> N_ExtractCarInitialfromEquipment_Node0_action N_ExtractCarInitialfromEquipment_Node0_action --> E_ExtractCarInitialfromEquipment S_ExtractCarInitialfromEquipment --> N_ExtractCarInitialfromEquipment_Node0 N_ExtractCarInitialfromEquipment_Node0 -- No --> E_ExtractCarInitialfromEquipment
File: GCX015.cbl
GIVEN:
A non-container equipment record is being processed
WHEN:
The equipment initial field contains valid data
THEN:
The equipment initial should be moved to the customs car initial field
β Consolidated Acceptance Criteria
- The equipment number field contains valid data → the equipment number should be extracted and converted to a 6-digit car number format for customs output
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractCarNumberfromEquipment(["Start Step"])
E_ExtractCarNumberfromEquipment(["End Step"])
N_ExtractCarNumberfromEquipment_Node0{"The equipment number field contains
valid data"}:::decision N_ExtractCarNumberfromEquipment_Node0_action["The equipment number should be
extracted and converted to a 6-digit
car number format for customs output"]:::main N_ExtractCarNumberfromEquipment_Node0 -- Yes --> N_ExtractCarNumberfromEquipment_Node0_action N_ExtractCarNumberfromEquipment_Node0_action --> E_ExtractCarNumberfromEquipment S_ExtractCarNumberfromEquipment --> N_ExtractCarNumberfromEquipment_Node0 N_ExtractCarNumberfromEquipment_Node0 -- No --> E_ExtractCarNumberfromEquipment
valid data"}:::decision N_ExtractCarNumberfromEquipment_Node0_action["The equipment number should be
extracted and converted to a 6-digit
car number format for customs output"]:::main N_ExtractCarNumberfromEquipment_Node0 -- Yes --> N_ExtractCarNumberfromEquipment_Node0_action N_ExtractCarNumberfromEquipment_Node0_action --> E_ExtractCarNumberfromEquipment S_ExtractCarNumberfromEquipment --> N_ExtractCarNumberfromEquipment_Node0 N_ExtractCarNumberfromEquipment_Node0 -- No --> E_ExtractCarNumberfromEquipment
File: GCX015.cbl
GIVEN:
A non-container equipment record with equipment number is being processed
WHEN:
The equipment number field contains valid data
THEN:
- The equipment number should be extracted
- Converted to a 6-digit car number format for customs output
β Consolidated Acceptance Criteria
- The next equipment record has a container indicator of 'C' → the current equipment's loaded/empty status should be set to 'L' (Loaded)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_IsNextEquipmentaContainer(["Start Step"])
E_IsNextEquipmentaContainer(["End Step"])
N_IsNextEquipmentaContainer_Node0{"The next equipment record has a
container indicator of C"}:::decision N_IsNextEquipmentaContainer_Node0_action["The current equipment s loadedempty
status should be set to L Loaded"]:::main N_IsNextEquipmentaContainer_Node0 -- Yes --> N_IsNextEquipmentaContainer_Node0_action N_IsNextEquipmentaContainer_Node0_action --> E_IsNextEquipmentaContainer S_IsNextEquipmentaContainer --> N_IsNextEquipmentaContainer_Node0 N_IsNextEquipmentaContainer_Node0 -- No --> E_IsNextEquipmentaContainer
container indicator of C"}:::decision N_IsNextEquipmentaContainer_Node0_action["The current equipment s loadedempty
status should be set to L Loaded"]:::main N_IsNextEquipmentaContainer_Node0 -- Yes --> N_IsNextEquipmentaContainer_Node0_action N_IsNextEquipmentaContainer_Node0_action --> E_IsNextEquipmentaContainer S_IsNextEquipmentaContainer --> N_IsNextEquipmentaContainer_Node0 N_IsNextEquipmentaContainer_Node0 -- No --> E_IsNextEquipmentaContainer
File: GCX015.cbl
GIVEN:
A non-container equipment record is being processed and there is a next equipment record in the sequence
WHEN:
The next equipment record has a container indicator of 'C'
THEN:
The current equipment's loaded/empty status should be set to 'L' (Loaded)
β Consolidated Acceptance Criteria
- The next equipment record is not a container or does not exist → the current equipment's own loaded/empty status indicator should be used for customs reporting
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetLoadedEmptyStatusfromCurrentCar(["Start Step"])
E_GetLoadedEmptyStatusfromCurrentCar(["End Step"])
N_GetLoadedEmptyStatusfromCurrentCar_Node0{"The next equipment record is not a
container or does not exist"}:::decision N_GetLoadedEmptyStatusfromCurrentCar_Node0_action["The current equipment s own
loadedempty status indicator should
be used for customs reporting"]:::main N_GetLoadedEmptyStatusfromCurrentCar_Node0 -- Yes --> N_GetLoadedEmptyStatusfromCurrentCar_Node0_action N_GetLoadedEmptyStatusfromCurrentCar_Node0_action --> E_GetLoadedEmptyStatusfromCurrentCar S_GetLoadedEmptyStatusfromCurrentCar --> N_GetLoadedEmptyStatusfromCurrentCar_Node0 N_GetLoadedEmptyStatusfromCurrentCar_Node0 -- No --> E_GetLoadedEmptyStatusfromCurrentCar
container or does not exist"}:::decision N_GetLoadedEmptyStatusfromCurrentCar_Node0_action["The current equipment s own
loadedempty status indicator should
be used for customs reporting"]:::main N_GetLoadedEmptyStatusfromCurrentCar_Node0 -- Yes --> N_GetLoadedEmptyStatusfromCurrentCar_Node0_action N_GetLoadedEmptyStatusfromCurrentCar_Node0_action --> E_GetLoadedEmptyStatusfromCurrentCar S_GetLoadedEmptyStatusfromCurrentCar --> N_GetLoadedEmptyStatusfromCurrentCar_Node0 N_GetLoadedEmptyStatusfromCurrentCar_Node0 -- No --> E_GetLoadedEmptyStatusfromCurrentCar
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A non-container equipment record is being processed
WHEN:
The next equipment record is not a container or does not exist
THEN:
The current equipment's own loaded/empty status indicator should be used for customs reporting
β Consolidated Acceptance Criteria
- The equipment type is 'LO' → the car kind should be set to 'L' for locomotive
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_EquipmentTypeLO(["Start Step"])
E_EquipmentTypeLO(["End Step"])
N_EquipmentTypeLO_Node0{"The equipment type is LO"}:::decision
N_EquipmentTypeLO_Node0_action["The car kind should be set to L for
locomotive"]:::main N_EquipmentTypeLO_Node0 -- Yes --> N_EquipmentTypeLO_Node0_action N_EquipmentTypeLO_Node0_action --> E_EquipmentTypeLO S_EquipmentTypeLO --> N_EquipmentTypeLO_Node0 N_EquipmentTypeLO_Node0 -- No --> E_EquipmentTypeLO
locomotive"]:::main N_EquipmentTypeLO_Node0 -- Yes --> N_EquipmentTypeLO_Node0_action N_EquipmentTypeLO_Node0_action --> E_EquipmentTypeLO S_EquipmentTypeLO --> N_EquipmentTypeLO_Node0 N_EquipmentTypeLO_Node0 -- No --> E_EquipmentTypeLO
File: GCX015.cbl
GIVEN:
A non-container equipment record is being processed for customs reporting
WHEN:
The equipment type is 'LO'
THEN:
The car kind should be set to 'L' for locomotive
β Consolidated Acceptance Criteria
- The equipment type is 'ET' → the car kind should be set to 'E' for engine
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_EquipmentTypeET(["Start Step"])
E_EquipmentTypeET(["End Step"])
N_EquipmentTypeET_Node0{"The equipment type is ET"}:::decision
N_EquipmentTypeET_Node0_action["The car kind should be set to E for
engine"]:::main N_EquipmentTypeET_Node0 -- Yes --> N_EquipmentTypeET_Node0_action N_EquipmentTypeET_Node0_action --> E_EquipmentTypeET S_EquipmentTypeET --> N_EquipmentTypeET_Node0 N_EquipmentTypeET_Node0 -- No --> E_EquipmentTypeET
engine"]:::main N_EquipmentTypeET_Node0 -- Yes --> N_EquipmentTypeET_Node0_action N_EquipmentTypeET_Node0_action --> E_EquipmentTypeET S_EquipmentTypeET --> N_EquipmentTypeET_Node0 N_EquipmentTypeET_Node0 -- No --> E_EquipmentTypeET
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A non-container equipment record is being processed for customs reporting and the equipment type is not 'LO'
WHEN:
The equipment type is 'ET'
THEN:
The car kind should be set to 'E' for engine
β Consolidated Acceptance Criteria
- The equipment type is neither 'LO' nor 'ET' → the car kind should be set to spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCarKindasSpaces(["Start Step"])
E_SetCarKindasSpaces(["End Step"])
N_SetCarKindasSpaces_Node0{"The equipment type is neither LO
nor ET"}:::decision N_SetCarKindasSpaces_Node0_action["The car kind should be set to
spaces"]:::main N_SetCarKindasSpaces_Node0 -- Yes --> N_SetCarKindasSpaces_Node0_action N_SetCarKindasSpaces_Node0_action --> E_SetCarKindasSpaces S_SetCarKindasSpaces --> N_SetCarKindasSpaces_Node0 N_SetCarKindasSpaces_Node0 -- No --> E_SetCarKindasSpaces
nor ET"}:::decision N_SetCarKindasSpaces_Node0_action["The car kind should be set to
spaces"]:::main N_SetCarKindasSpaces_Node0 -- Yes --> N_SetCarKindasSpaces_Node0_action N_SetCarKindasSpaces_Node0_action --> E_SetCarKindasSpaces S_SetCarKindasSpaces --> N_SetCarKindasSpaces_Node0 N_SetCarKindasSpaces_Node0 -- No --> E_SetCarKindasSpaces
File: GCX015.cbl
GIVEN:
A non-container equipment record is being processed for customs reporting
WHEN:
The equipment type is neither 'LO' nor 'ET'
THEN:
The car kind should be set to spaces
β Consolidated Acceptance Criteria
- The car initial, number, loaded/empty status, and car kind have been determined → the complete car information should be added to the customs output table for transmission
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AddCartoCustomsOutputTable(["Start Step"])
E_AddCartoCustomsOutputTable(["End Step"])
N_AddCartoCustomsOutputTable_Node0{"The car initial, number,
loadedempty status, and car kind
have been determined"}:::decision N_AddCartoCustomsOutputTable_Node0_action["The complete car information should
be added to the customs output table
for transmission"]:::main N_AddCartoCustomsOutputTable_Node0 -- Yes --> N_AddCartoCustomsOutputTable_Node0_action N_AddCartoCustomsOutputTable_Node0_action --> E_AddCartoCustomsOutputTable S_AddCartoCustomsOutputTable --> N_AddCartoCustomsOutputTable_Node0 N_AddCartoCustomsOutputTable_Node0 -- No --> E_AddCartoCustomsOutputTable
loadedempty status, and car kind
have been determined"}:::decision N_AddCartoCustomsOutputTable_Node0_action["The complete car information should
be added to the customs output table
for transmission"]:::main N_AddCartoCustomsOutputTable_Node0 -- Yes --> N_AddCartoCustomsOutputTable_Node0_action N_AddCartoCustomsOutputTable_Node0_action --> E_AddCartoCustomsOutputTable S_AddCartoCustomsOutputTable --> N_AddCartoCustomsOutputTable_Node0 N_AddCartoCustomsOutputTable_Node0 -- No --> E_AddCartoCustomsOutputTable
File: GCX015.cbl
GIVEN:
A non-container equipment record has been processed with all required fields populated
WHEN:
The car initial, number, loaded/empty status, and car kind have been determined
THEN:
The complete car information should be added to the customs output table for transmission
β Consolidated Acceptance Criteria
- The current equipment record processing is complete and there are more equipment records in the train consist → processing should continue with the next equipment record in sequence
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_MoreEquipmenttoProcess(["Start Step"])
E_MoreEquipmenttoProcess(["End Step"])
N_MoreEquipmenttoProcess_Node0{"The current equipment record
processing is complete and there are
more equipment records in the train
consist"}:::decision N_MoreEquipmenttoProcess_Node0_action["Processing should continue with the
next equipment record in sequence"]:::main N_MoreEquipmenttoProcess_Node0 -- Yes --> N_MoreEquipmenttoProcess_Node0_action N_MoreEquipmenttoProcess_Node0_action --> E_MoreEquipmenttoProcess S_MoreEquipmenttoProcess --> N_MoreEquipmenttoProcess_Node0 N_MoreEquipmenttoProcess_Node0 -- No --> E_MoreEquipmenttoProcess
processing is complete and there are
more equipment records in the train
consist"}:::decision N_MoreEquipmenttoProcess_Node0_action["Processing should continue with the
next equipment record in sequence"]:::main N_MoreEquipmenttoProcess_Node0 -- Yes --> N_MoreEquipmenttoProcess_Node0_action N_MoreEquipmenttoProcess_Node0_action --> E_MoreEquipmenttoProcess S_MoreEquipmenttoProcess --> N_MoreEquipmenttoProcess_Node0 N_MoreEquipmenttoProcess_Node0 -- No --> E_MoreEquipmenttoProcess
File: GCX015.cbl
GIVEN:
Equipment records are being processed for AEI customs reporting
WHEN:
- The current equipment record processing is complete
- There are more equipment records in the train consist
THEN:
Processing should continue with the next equipment record in sequence
β Consolidated Acceptance Criteria
- System queries AEI email database using the train's port location as the key → system retrieves list of email recipients associated with that port location
- System receives database error response that is not a simple no-entry condition → system logs database error with SQL code information and continues processing using default Merlin ID
- Retrieving AEI Merlin recipients → extract port information from train security data, call AECWRKTB with 'CUSEMAIL' record type to get email recipients; If successful, set default Merlin ID as from user and populate recipient list from database results; If no entry found, use default Merlin ID for both from and to users; If database error occurs, perform DB2 abend processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetAEIMerlinRecipients(["Start Step"])
E_GetAEIMerlinRecipients(["End Step"])
N_GetAEIMerlinRecipients_Node0{"System queries AEI email database
using the train s port location as
the key"}:::decision N_GetAEIMerlinRecipients_Node0_action["System retrieves list of email
recipients associated with that port
location"]:::main N_GetAEIMerlinRecipients_Node0 -- Yes --> N_GetAEIMerlinRecipients_Node0_action N_GetAEIMerlinRecipients_Node0_action --> E_GetAEIMerlinRecipients S_GetAEIMerlinRecipients --> N_GetAEIMerlinRecipients_Node0 N_GetAEIMerlinRecipients_Node1{"System receives database error
response that is not a simple
no-entry condition"}:::decision N_GetAEIMerlinRecipients_Node1_action["System logs database error with SQL
code information and continues
processing using default Merlin ID"]:::exclusion N_GetAEIMerlinRecipients_Node1 -- Yes -->|Alternative| N_GetAEIMerlinRecipients_Node1_action N_GetAEIMerlinRecipients_Node1_action --> E_GetAEIMerlinRecipients N_GetAEIMerlinRecipients_Node0 -- No --> N_GetAEIMerlinRecipients_Node1 N_GetAEIMerlinRecipients_Node2{"Retrieving AEI Merlin recipients"}:::decision N_GetAEIMerlinRecipients_Node2_action["Extract port information from train
security data, call AECWRKTB with
CUSEMAIL record type to get email
recipients If successful, set
default Merlin ID as from user and
populate recipient list from
database results If no entry found,
use default Merlin ID for both from
and to users If database error
occurs, perform DB2 abend processing"]:::exclusion N_GetAEIMerlinRecipients_Node2 -- Yes -->|Alternative| N_GetAEIMerlinRecipients_Node2_action N_GetAEIMerlinRecipients_Node2_action --> E_GetAEIMerlinRecipients N_GetAEIMerlinRecipients_Node1 -- No --> N_GetAEIMerlinRecipients_Node2 N_GetAEIMerlinRecipients_Node2 -- No --> E_GetAEIMerlinRecipients
using the train s port location as
the key"}:::decision N_GetAEIMerlinRecipients_Node0_action["System retrieves list of email
recipients associated with that port
location"]:::main N_GetAEIMerlinRecipients_Node0 -- Yes --> N_GetAEIMerlinRecipients_Node0_action N_GetAEIMerlinRecipients_Node0_action --> E_GetAEIMerlinRecipients S_GetAEIMerlinRecipients --> N_GetAEIMerlinRecipients_Node0 N_GetAEIMerlinRecipients_Node1{"System receives database error
response that is not a simple
no-entry condition"}:::decision N_GetAEIMerlinRecipients_Node1_action["System logs database error with SQL
code information and continues
processing using default Merlin ID"]:::exclusion N_GetAEIMerlinRecipients_Node1 -- Yes -->|Alternative| N_GetAEIMerlinRecipients_Node1_action N_GetAEIMerlinRecipients_Node1_action --> E_GetAEIMerlinRecipients N_GetAEIMerlinRecipients_Node0 -- No --> N_GetAEIMerlinRecipients_Node1 N_GetAEIMerlinRecipients_Node2{"Retrieving AEI Merlin recipients"}:::decision N_GetAEIMerlinRecipients_Node2_action["Extract port information from train
security data, call AECWRKTB with
CUSEMAIL record type to get email
recipients If successful, set
default Merlin ID as from user and
populate recipient list from
database results If no entry found,
use default Merlin ID for both from
and to users If database error
occurs, perform DB2 abend processing"]:::exclusion N_GetAEIMerlinRecipients_Node2 -- Yes -->|Alternative| N_GetAEIMerlinRecipients_Node2_action N_GetAEIMerlinRecipients_Node2_action --> E_GetAEIMerlinRecipients N_GetAEIMerlinRecipients_Node1 -- No --> N_GetAEIMerlinRecipients_Node2 N_GetAEIMerlinRecipients_Node2 -- No --> E_GetAEIMerlinRecipients
File: GCX015.cbl
GIVEN:
A train requires AEI status notification and train has a port location in SECX field
WHEN:
System queries AEI email database using the train's port location as the key
THEN:
System retrieves list of email recipients associated with that port location
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
AEI email database query fails due to database connection or system error
WHEN:
System receives database error response that is not a simple no-entry condition
THEN:
- System logs database error with sql code information
- Continues processing using default merlin id
File: GCX015.cbl
GIVEN:
AEI status message is prepared for transmission
WHEN:
Retrieving AEI Merlin recipients
THEN:
- Extract port information from train security data, call aecwrktb with 'cusemail' record type to get email recipients; if successful, set default merlin id as from user
- Populate recipient list from database results; if no entry found, use default merlin id for both from
- To users; if database error occurs, perform db2 abend processing
β Consolidated Acceptance Criteria
- System processes the empty or failed query result → system assigns default Merlin ID as both sender and recipient for the status message
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseDefaultMerlinID(["Start Step"])
E_UseDefaultMerlinID(["End Step"])
N_UseDefaultMerlinID_Node0{"System processes the empty or
failed query result"}:::decision N_UseDefaultMerlinID_Node0_action["System assigns default Merlin ID as
both sender and recipient for the
status message"]:::exclusion N_UseDefaultMerlinID_Node0 -- Yes -->|Alternative| N_UseDefaultMerlinID_Node0_action N_UseDefaultMerlinID_Node0_action --> E_UseDefaultMerlinID S_UseDefaultMerlinID --> N_UseDefaultMerlinID_Node0 N_UseDefaultMerlinID_Node0 -- No --> E_UseDefaultMerlinID
failed query result"}:::decision N_UseDefaultMerlinID_Node0_action["System assigns default Merlin ID as
both sender and recipient for the
status message"]:::exclusion N_UseDefaultMerlinID_Node0 -- Yes -->|Alternative| N_UseDefaultMerlinID_Node0_action N_UseDefaultMerlinID_Node0_action --> E_UseDefaultMerlinID S_UseDefaultMerlinID --> N_UseDefaultMerlinID_Node0 N_UseDefaultMerlinID_Node0 -- No --> E_UseDefaultMerlinID
File: GCX015.cbl
GIVEN:
AEI email database query returns no recipients for the train's port location OR database query fails with no-entry status
WHEN:
System processes the empty or failed query result
THEN:
- System assigns default merlin id as both sender
- Recipient for the status message
β Consolidated Acceptance Criteria
- System prepares AEI status message → system formats message subject as 'TRAIN: [train-id] STATUS: [current-status]' and clears message text content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_FormatTrainStatusMessage(["Start Step"])
E_FormatTrainStatusMessage(["End Step"])
N_FormatTrainStatusMessage_Node0{"System prepares AEI status message"}:::decision
N_FormatTrainStatusMessage_Node0_action["System formats message subject as
TRAIN: train-id STATUS:
current-status and clears message
text content"]:::main N_FormatTrainStatusMessage_Node0 -- Yes --> N_FormatTrainStatusMessage_Node0_action N_FormatTrainStatusMessage_Node0_action --> E_FormatTrainStatusMessage S_FormatTrainStatusMessage --> N_FormatTrainStatusMessage_Node0 N_FormatTrainStatusMessage_Node0 -- No --> E_FormatTrainStatusMessage
TRAIN: train-id STATUS:
current-status and clears message
text content"]:::main N_FormatTrainStatusMessage_Node0 -- Yes --> N_FormatTrainStatusMessage_Node0_action N_FormatTrainStatusMessage_Node0_action --> E_FormatTrainStatusMessage S_FormatTrainStatusMessage --> N_FormatTrainStatusMessage_Node0 N_FormatTrainStatusMessage_Node0 -- No --> E_FormatTrainStatusMessage
File: GCX015.cbl
GIVEN:
A train has a valid train ID and current status that needs to be communicated
WHEN:
System prepares AEI status message
THEN:
System formats message subject as 'TRAIN: [train-id] STATUS: [current-status]' and clears message text content
β Consolidated Acceptance Criteria
- System calls Merlin send service with message details → system transmits message and receives confirmation of delivery status
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendMessageviaMerlinSystem(["Start Step"])
E_SendMessageviaMerlinSystem(["End Step"])
N_SendMessageviaMerlinSystem_Node0{"System calls Merlin send service
with message details"}:::decision N_SendMessageviaMerlinSystem_Node0_action["System transmits message and
receives confirmation of delivery
status"]:::main N_SendMessageviaMerlinSystem_Node0 -- Yes --> N_SendMessageviaMerlinSystem_Node0_action N_SendMessageviaMerlinSystem_Node0_action --> E_SendMessageviaMerlinSystem S_SendMessageviaMerlinSystem --> N_SendMessageviaMerlinSystem_Node0 N_SendMessageviaMerlinSystem_Node0 -- No --> E_SendMessageviaMerlinSystem
with message details"}:::decision N_SendMessageviaMerlinSystem_Node0_action["System transmits message and
receives confirmation of delivery
status"]:::main N_SendMessageviaMerlinSystem_Node0 -- Yes --> N_SendMessageviaMerlinSystem_Node0_action N_SendMessageviaMerlinSystem_Node0_action --> E_SendMessageviaMerlinSystem S_SendMessageviaMerlinSystem --> N_SendMessageviaMerlinSystem_Node0 N_SendMessageviaMerlinSystem_Node0 -- No --> E_SendMessageviaMerlinSystem
File: GCX015.cbl
GIVEN:
A formatted train status message with designated recipients
WHEN:
System calls Merlin send service with message details
THEN:
- System transmits message
- Receives confirmation of delivery status
β Consolidated Acceptance Criteria
- System detects send failure → system retries send operation using backup recipient list including AEI9999 and OM01247 as fallback recipients
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_RetrySendtoBackupRecipients(["Start Step"])
E_RetrySendtoBackupRecipients(["End Step"])
N_RetrySendtoBackupRecipients_Node0{"System detects send failure"}:::decision
N_RetrySendtoBackupRecipients_Node0_action["System retries send operation using
backup recipient list including
AEI9999 and OM01247 as fallback
recipients"]:::main N_RetrySendtoBackupRecipients_Node0 -- Yes --> N_RetrySendtoBackupRecipients_Node0_action N_RetrySendtoBackupRecipients_Node0_action --> E_RetrySendtoBackupRecipients S_RetrySendtoBackupRecipients --> N_RetrySendtoBackupRecipients_Node0 N_RetrySendtoBackupRecipients_Node0 -- No --> E_RetrySendtoBackupRecipients
backup recipient list including
AEI9999 and OM01247 as fallback
recipients"]:::main N_RetrySendtoBackupRecipients_Node0 -- Yes --> N_RetrySendtoBackupRecipients_Node0_action N_RetrySendtoBackupRecipients_Node0_action --> E_RetrySendtoBackupRecipients S_RetrySendtoBackupRecipients --> N_RetrySendtoBackupRecipients_Node0 N_RetrySendtoBackupRecipients_Node0 -- No --> E_RetrySendtoBackupRecipients
File: GCX015.cbl
GIVEN:
Primary Merlin message send has failed
WHEN:
System detects send failure
THEN:
- System retries send operation using backup recipient list including aei9999
- Om01247 as fallback recipients
β Consolidated Acceptance Criteria
- System detects final send failure → system logs error message 'SEND TO FILE OF OM01247 FAILED' for operational review
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LogSendFailureError(["Start Step"])
E_LogSendFailureError(["End Step"])
N_LogSendFailureError_Node0{"System detects final send failure"}:::decision
N_LogSendFailureError_Node0_action["System logs error message SEND TO
FILE OF OM01247 FAILED for
operational review"]:::main N_LogSendFailureError_Node0 -- Yes --> N_LogSendFailureError_Node0_action N_LogSendFailureError_Node0_action --> E_LogSendFailureError S_LogSendFailureError --> N_LogSendFailureError_Node0 N_LogSendFailureError_Node0 -- No --> E_LogSendFailureError
FILE OF OM01247 FAILED for
operational review"]:::main N_LogSendFailureError_Node0 -- Yes --> N_LogSendFailureError_Node0_action N_LogSendFailureError_Node0_action --> E_LogSendFailureError S_LogSendFailureError --> N_LogSendFailureError_Node0 N_LogSendFailureError_Node0 -- No --> E_LogSendFailureError
File: GCX015.cbl
GIVEN:
Both primary and backup Merlin message sends have failed
WHEN:
System detects final send failure
THEN:
System logs error message 'SEND TO FILE OF OM01247 FAILED' for operational review
β Consolidated Acceptance Criteria
- The system needs to determine the port for AEI email lookup → the system extracts the first 4 characters of the security code as the port identifier
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractPortfromTrainSecurityCode(["Start Step"])
E_ExtractPortfromTrainSecurityCode(["End Step"])
N_ExtractPortfromTrainSecurityCode_Node0{"The system needs to determine the
port for AEI email lookup"}:::decision N_ExtractPortfromTrainSecurityCode_Node0_action["The system extracts the first 4
characters of the security code as
the port identifier"]:::main N_ExtractPortfromTrainSecurityCode_Node0 -- Yes --> N_ExtractPortfromTrainSecurityCode_Node0_action N_ExtractPortfromTrainSecurityCode_Node0_action --> E_ExtractPortfromTrainSecurityCode S_ExtractPortfromTrainSecurityCode --> N_ExtractPortfromTrainSecurityCode_Node0 N_ExtractPortfromTrainSecurityCode_Node0 -- No --> E_ExtractPortfromTrainSecurityCode
port for AEI email lookup"}:::decision N_ExtractPortfromTrainSecurityCode_Node0_action["The system extracts the first 4
characters of the security code as
the port identifier"]:::main N_ExtractPortfromTrainSecurityCode_Node0 -- Yes --> N_ExtractPortfromTrainSecurityCode_Node0_action N_ExtractPortfromTrainSecurityCode_Node0_action --> E_ExtractPortfromTrainSecurityCode S_ExtractPortfromTrainSecurityCode --> N_ExtractPortfromTrainSecurityCode_Node0 N_ExtractPortfromTrainSecurityCode_Node0 -- No --> E_ExtractPortfromTrainSecurityCode
File: GCX015.cbl
GIVEN:
A train record with security code (SECX) is available
WHEN:
The system needs to determine the port for AEI email lookup
THEN:
The system extracts the first 4 characters of the security code as the port identifier
β Consolidated Acceptance Criteria
- Setting up database query parameters → the system sets record type to 'CUSEMAIL' and uses extracted port as the record key
- The system configures the database lookup parameters → the RECORD-TYPE is set to 'CUSEMAIL' to specify customer email record lookup
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetRecordTypetoCUSEMAIL(["Start Step"])
E_SetRecordTypetoCUSEMAIL(["End Step"])
N_SetRecordTypetoCUSEMAIL_Node0{"Setting up database query
parameters"}:::decision N_SetRecordTypetoCUSEMAIL_Node0_action["The system sets record type to
CUSEMAIL and uses extracted port as
the record key"]:::main N_SetRecordTypetoCUSEMAIL_Node0 -- Yes --> N_SetRecordTypetoCUSEMAIL_Node0_action N_SetRecordTypetoCUSEMAIL_Node0_action --> E_SetRecordTypetoCUSEMAIL S_SetRecordTypetoCUSEMAIL --> N_SetRecordTypetoCUSEMAIL_Node0 N_SetRecordTypetoCUSEMAIL_Node1{"the system configures the database
lookup parameters"}:::decision N_SetRecordTypetoCUSEMAIL_Node1_action["the RECORD-TYPE is set to CUSEMAIL
to specify customer email record
lookup"]:::main N_SetRecordTypetoCUSEMAIL_Node1 -- Yes --> N_SetRecordTypetoCUSEMAIL_Node1_action N_SetRecordTypetoCUSEMAIL_Node1_action --> E_SetRecordTypetoCUSEMAIL N_SetRecordTypetoCUSEMAIL_Node0 -- No --> N_SetRecordTypetoCUSEMAIL_Node1 N_SetRecordTypetoCUSEMAIL_Node1 -- No --> E_SetRecordTypetoCUSEMAIL
parameters"}:::decision N_SetRecordTypetoCUSEMAIL_Node0_action["The system sets record type to
CUSEMAIL and uses extracted port as
the record key"]:::main N_SetRecordTypetoCUSEMAIL_Node0 -- Yes --> N_SetRecordTypetoCUSEMAIL_Node0_action N_SetRecordTypetoCUSEMAIL_Node0_action --> E_SetRecordTypetoCUSEMAIL S_SetRecordTypetoCUSEMAIL --> N_SetRecordTypetoCUSEMAIL_Node0 N_SetRecordTypetoCUSEMAIL_Node1{"the system configures the database
lookup parameters"}:::decision N_SetRecordTypetoCUSEMAIL_Node1_action["the RECORD-TYPE is set to CUSEMAIL
to specify customer email record
lookup"]:::main N_SetRecordTypetoCUSEMAIL_Node1 -- Yes --> N_SetRecordTypetoCUSEMAIL_Node1_action N_SetRecordTypetoCUSEMAIL_Node1_action --> E_SetRecordTypetoCUSEMAIL N_SetRecordTypetoCUSEMAIL_Node0 -- No --> N_SetRecordTypetoCUSEMAIL_Node1 N_SetRecordTypetoCUSEMAIL_Node1 -- No --> E_SetRecordTypetoCUSEMAIL
File: GCX015.cbl
GIVEN:
The system needs to query AEI email database for distribution list
WHEN:
Setting up database query parameters
THEN:
The system sets record type to 'CUSEMAIL' and uses extracted port as the record key
File: GCX015.cbl
GIVEN:
AEI email database query is being prepared
WHEN:
the system configures the database lookup parameters
THEN:
the RECORD-TYPE is set to 'CUSEMAIL' to specify customer email record lookup
β Consolidated Acceptance Criteria
- The system executes the AEI email database query → the system calls AECWRKTB program to retrieve email distribution information
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallAEIEmailDatabaseQuery(["Start Step"])
E_CallAEIEmailDatabaseQuery(["End Step"])
N_CallAEIEmailDatabaseQuery_Node0{"The system executes the AEI email
database query"}:::decision N_CallAEIEmailDatabaseQuery_Node0_action["The system calls AECWRKTB program
to retrieve email distribution
information"]:::main N_CallAEIEmailDatabaseQuery_Node0 -- Yes --> N_CallAEIEmailDatabaseQuery_Node0_action N_CallAEIEmailDatabaseQuery_Node0_action --> E_CallAEIEmailDatabaseQuery S_CallAEIEmailDatabaseQuery --> N_CallAEIEmailDatabaseQuery_Node0 N_CallAEIEmailDatabaseQuery_Node0 -- No --> E_CallAEIEmailDatabaseQuery
database query"}:::decision N_CallAEIEmailDatabaseQuery_Node0_action["The system calls AECWRKTB program
to retrieve email distribution
information"]:::main N_CallAEIEmailDatabaseQuery_Node0 -- Yes --> N_CallAEIEmailDatabaseQuery_Node0_action N_CallAEIEmailDatabaseQuery_Node0_action --> E_CallAEIEmailDatabaseQuery S_CallAEIEmailDatabaseQuery --> N_CallAEIEmailDatabaseQuery_Node0 N_CallAEIEmailDatabaseQuery_Node0 -- No --> E_CallAEIEmailDatabaseQuery
File: GCX015.cbl
GIVEN:
Database query parameters are set with port and record type
WHEN:
The system executes the AEI email database query
THEN:
The system calls AECWRKTB program to retrieve email distribution information
β Consolidated Acceptance Criteria
- Processing the successful query response → the system sets the default Merlin ID as the message sender
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetDefaultMerlinIDasSender(["Start Step"])
E_SetDefaultMerlinIDasSender(["End Step"])
N_SetDefaultMerlinIDasSender_Node0{"Processing the successful query
response"}:::decision N_SetDefaultMerlinIDasSender_Node0_action["The system sets the default Merlin
ID as the message sender"]:::main N_SetDefaultMerlinIDasSender_Node0 -- Yes --> N_SetDefaultMerlinIDasSender_Node0_action N_SetDefaultMerlinIDasSender_Node0_action --> E_SetDefaultMerlinIDasSender S_SetDefaultMerlinIDasSender --> N_SetDefaultMerlinIDasSender_Node0 N_SetDefaultMerlinIDasSender_Node0 -- No --> E_SetDefaultMerlinIDasSender
response"}:::decision N_SetDefaultMerlinIDasSender_Node0_action["The system sets the default Merlin
ID as the message sender"]:::main N_SetDefaultMerlinIDasSender_Node0 -- Yes --> N_SetDefaultMerlinIDasSender_Node0_action N_SetDefaultMerlinIDasSender_Node0_action --> E_SetDefaultMerlinIDasSender S_SetDefaultMerlinIDasSender --> N_SetDefaultMerlinIDasSender_Node0 N_SetDefaultMerlinIDasSender_Node0 -- No --> E_SetDefaultMerlinIDasSender
File: GCX015.cbl
GIVEN:
AEI email database query returns success status
WHEN:
Processing the successful query response
THEN:
The system sets the default Merlin ID as the message sender
β Consolidated Acceptance Criteria
- Processing the retrieved email information → the system iterates through up to 10 email addresses and loads non-blank user IDs into the recipient list
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LoadRetrievedEmailRecipients(["Start Step"])
E_LoadRetrievedEmailRecipients(["End Step"])
N_LoadRetrievedEmailRecipients_Node0{"Processing the retrieved email
information"}:::decision N_LoadRetrievedEmailRecipients_Node0_action["The system iterates through up to
10 email addresses and loads
non-blank user IDs into the
recipient list"]:::main N_LoadRetrievedEmailRecipients_Node0 -- Yes --> N_LoadRetrievedEmailRecipients_Node0_action N_LoadRetrievedEmailRecipients_Node0_action --> E_LoadRetrievedEmailRecipients S_LoadRetrievedEmailRecipients --> N_LoadRetrievedEmailRecipients_Node0 N_LoadRetrievedEmailRecipients_Node0 -- No --> E_LoadRetrievedEmailRecipients
information"}:::decision N_LoadRetrievedEmailRecipients_Node0_action["The system iterates through up to
10 email addresses and loads
non-blank user IDs into the
recipient list"]:::main N_LoadRetrievedEmailRecipients_Node0 -- Yes --> N_LoadRetrievedEmailRecipients_Node0_action N_LoadRetrievedEmailRecipients_Node0_action --> E_LoadRetrievedEmailRecipients S_LoadRetrievedEmailRecipients --> N_LoadRetrievedEmailRecipients_Node0 N_LoadRetrievedEmailRecipients_Node0 -- No --> E_LoadRetrievedEmailRecipients
File: GCX015.cbl
GIVEN:
Database query was successful and returned email data
WHEN:
Processing the retrieved email information
THEN:
- The system iterates through up to 10 email addresses
- Loads non-blank user ids into the recipient list
β Consolidated Acceptance Criteria
- All retrieved email addresses are blank or empty → the system uses the default Merlin ID as both sender and recipient
- The specified port has no email distribution configuration → the system uses the default Merlin ID as both sender and recipient
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseDefaultMerlinIDasRecipient(["Start Step"])
E_UseDefaultMerlinIDasRecipient(["End Step"])
N_UseDefaultMerlinIDasRecipient_Node0{"All retrieved email addresses are
blank or empty"}:::decision N_UseDefaultMerlinIDasRecipient_Node0_action["The system uses the default Merlin
ID as both sender and recipient"]:::main N_UseDefaultMerlinIDasRecipient_Node0 -- Yes --> N_UseDefaultMerlinIDasRecipient_Node0_action N_UseDefaultMerlinIDasRecipient_Node0_action --> E_UseDefaultMerlinIDasRecipient S_UseDefaultMerlinIDasRecipient --> N_UseDefaultMerlinIDasRecipient_Node0 N_UseDefaultMerlinIDasRecipient_Node1{"The specified port has no email
distribution configuration"}:::decision N_UseDefaultMerlinIDasRecipient_Node1_action["The system uses the default Merlin
ID as both sender and recipient"]:::main N_UseDefaultMerlinIDasRecipient_Node1 -- Yes --> N_UseDefaultMerlinIDasRecipient_Node1_action N_UseDefaultMerlinIDasRecipient_Node1_action --> E_UseDefaultMerlinIDasRecipient N_UseDefaultMerlinIDasRecipient_Node0 -- No --> N_UseDefaultMerlinIDasRecipient_Node1 N_UseDefaultMerlinIDasRecipient_Node1 -- No --> E_UseDefaultMerlinIDasRecipient
blank or empty"}:::decision N_UseDefaultMerlinIDasRecipient_Node0_action["The system uses the default Merlin
ID as both sender and recipient"]:::main N_UseDefaultMerlinIDasRecipient_Node0 -- Yes --> N_UseDefaultMerlinIDasRecipient_Node0_action N_UseDefaultMerlinIDasRecipient_Node0_action --> E_UseDefaultMerlinIDasRecipient S_UseDefaultMerlinIDasRecipient --> N_UseDefaultMerlinIDasRecipient_Node0 N_UseDefaultMerlinIDasRecipient_Node1{"The specified port has no email
distribution configuration"}:::decision N_UseDefaultMerlinIDasRecipient_Node1_action["The system uses the default Merlin
ID as both sender and recipient"]:::main N_UseDefaultMerlinIDasRecipient_Node1 -- Yes --> N_UseDefaultMerlinIDasRecipient_Node1_action N_UseDefaultMerlinIDasRecipient_Node1_action --> E_UseDefaultMerlinIDasRecipient N_UseDefaultMerlinIDasRecipient_Node0 -- No --> N_UseDefaultMerlinIDasRecipient_Node1 N_UseDefaultMerlinIDasRecipient_Node1 -- No --> E_UseDefaultMerlinIDasRecipient
File: GCX015.cbl
GIVEN:
Database query was successful but no email recipients were found
WHEN:
All retrieved email addresses are blank or empty
THEN:
- The system uses the default merlin id as both sender
- Recipient
File: GCX015.cbl
GIVEN:
AEI email database query returns no entry found status
WHEN:
The specified port has no email distribution configuration
THEN:
- The system uses the default merlin id as both sender
- Recipient
β Consolidated Acceptance Criteria
- A database error occurs during email lookup → the system sends a DB2 error alert message and uses the default Merlin ID as recipient
- The system encounters a database error → b700-DB2-ABEND procedure is performed and CST-DEFAULT-MERLIN-ID is set as EMI-TO-USERCODE
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendDB2ErrorAlert(["Start Step"])
E_SendDB2ErrorAlert(["End Step"])
N_SendDB2ErrorAlert_Node0{"A database error occurs during
email lookup"}:::decision N_SendDB2ErrorAlert_Node0_action["The system sends a DB2 error alert
message and uses the default Merlin
ID as recipient"]:::exclusion N_SendDB2ErrorAlert_Node0 -- Yes -->|Alternative| N_SendDB2ErrorAlert_Node0_action N_SendDB2ErrorAlert_Node0_action --> E_SendDB2ErrorAlert S_SendDB2ErrorAlert --> N_SendDB2ErrorAlert_Node0 N_SendDB2ErrorAlert_Node1{"the system encounters a database
error"}:::decision N_SendDB2ErrorAlert_Node1_action["B700-DB2-ABEND procedure is
performed and CST-DEFAULT-MERLIN-ID
is set as EMI-TO-USERCODE"]:::exclusion N_SendDB2ErrorAlert_Node1 -- Yes -->|Alternative| N_SendDB2ErrorAlert_Node1_action N_SendDB2ErrorAlert_Node1_action --> E_SendDB2ErrorAlert N_SendDB2ErrorAlert_Node0 -- No --> N_SendDB2ErrorAlert_Node1 N_SendDB2ErrorAlert_Node1 -- No --> E_SendDB2ErrorAlert
email lookup"}:::decision N_SendDB2ErrorAlert_Node0_action["The system sends a DB2 error alert
message and uses the default Merlin
ID as recipient"]:::exclusion N_SendDB2ErrorAlert_Node0 -- Yes -->|Alternative| N_SendDB2ErrorAlert_Node0_action N_SendDB2ErrorAlert_Node0_action --> E_SendDB2ErrorAlert S_SendDB2ErrorAlert --> N_SendDB2ErrorAlert_Node0 N_SendDB2ErrorAlert_Node1{"the system encounters a database
error"}:::decision N_SendDB2ErrorAlert_Node1_action["B700-DB2-ABEND procedure is
performed and CST-DEFAULT-MERLIN-ID
is set as EMI-TO-USERCODE"]:::exclusion N_SendDB2ErrorAlert_Node1 -- Yes -->|Alternative| N_SendDB2ErrorAlert_Node1_action N_SendDB2ErrorAlert_Node1_action --> E_SendDB2ErrorAlert N_SendDB2ErrorAlert_Node0 -- No --> N_SendDB2ErrorAlert_Node1 N_SendDB2ErrorAlert_Node1 -- No --> E_SendDB2ErrorAlert
File: GCX015.cbl
GIVEN:
AEI email database query returns an error status other than no entry found
WHEN:
A database error occurs during email lookup
THEN:
- The system sends a db2 error alert message
- Uses the default merlin id as recipient
File: GCX015.cbl
GIVEN:
AEI email database query returns error code other than CST-AEI-SUCCESS or CST-AEI-NO-ENTRY
WHEN:
the system encounters a database error
THEN:
- B700-db2-abend procedure is performed
- Cst-default-merlin-id is set as emi-to-usercode
β Consolidated Acceptance Criteria
- The system begins the database lookup process → the database work area AELWRKTB is initialized to clear any previous data
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeDatabaseWorkArea(["Start Step"])
E_InitializeDatabaseWorkArea(["End Step"])
N_InitializeDatabaseWorkArea_Node0{"the system begins the database
lookup process"}:::decision N_InitializeDatabaseWorkArea_Node0_action["the database work area AELWRKTB is
initialized to clear any previous
data"]:::main N_InitializeDatabaseWorkArea_Node0 -- Yes --> N_InitializeDatabaseWorkArea_Node0_action N_InitializeDatabaseWorkArea_Node0_action --> E_InitializeDatabaseWorkArea S_InitializeDatabaseWorkArea --> N_InitializeDatabaseWorkArea_Node0 N_InitializeDatabaseWorkArea_Node0 -- No --> E_InitializeDatabaseWorkArea
lookup process"}:::decision N_InitializeDatabaseWorkArea_Node0_action["the database work area AELWRKTB is
initialized to clear any previous
data"]:::main N_InitializeDatabaseWorkArea_Node0 -- Yes --> N_InitializeDatabaseWorkArea_Node0_action N_InitializeDatabaseWorkArea_Node0_action --> E_InitializeDatabaseWorkArea S_InitializeDatabaseWorkArea --> N_InitializeDatabaseWorkArea_Node0 N_InitializeDatabaseWorkArea_Node0 -- No --> E_InitializeDatabaseWorkArea
File: GCX015.cbl
GIVEN:
AEI email database query is requested
WHEN:
the system begins the database lookup process
THEN:
the database work area AELWRKTB is initialized to clear any previous data
β Consolidated Acceptance Criteria
- The system needs to identify the train port for email lookup → the train port is extracted from WS-TRAIN-SECX and moved to the first 4 positions of RECORD-KEY
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ExtractTrainPortfromSecurityCode(["Start Step"])
E_ExtractTrainPortfromSecurityCode(["End Step"])
N_ExtractTrainPortfromSecurityCode_Node0{"the system needs to identify the
train port for email lookup"}:::decision N_ExtractTrainPortfromSecurityCode_Node0_action["the train port is extracted from
WS-TRAIN-SECX and moved to the first
4 positions of RECORD-KEY"]:::main N_ExtractTrainPortfromSecurityCode_Node0 -- Yes --> N_ExtractTrainPortfromSecurityCode_Node0_action N_ExtractTrainPortfromSecurityCode_Node0_action --> E_ExtractTrainPortfromSecurityCode S_ExtractTrainPortfromSecurityCode --> N_ExtractTrainPortfromSecurityCode_Node0 N_ExtractTrainPortfromSecurityCode_Node0 -- No --> E_ExtractTrainPortfromSecurityCode
train port for email lookup"}:::decision N_ExtractTrainPortfromSecurityCode_Node0_action["the train port is extracted from
WS-TRAIN-SECX and moved to the first
4 positions of RECORD-KEY"]:::main N_ExtractTrainPortfromSecurityCode_Node0 -- Yes --> N_ExtractTrainPortfromSecurityCode_Node0_action N_ExtractTrainPortfromSecurityCode_Node0_action --> E_ExtractTrainPortfromSecurityCode S_ExtractTrainPortfromSecurityCode --> N_ExtractTrainPortfromSecurityCode_Node0 N_ExtractTrainPortfromSecurityCode_Node0 -- No --> E_ExtractTrainPortfromSecurityCode
File: GCX015.cbl
GIVEN:
a train record with security code GCWTL-SECX exists
WHEN:
the system needs to identify the train port for email lookup
THEN:
- The train port is extracted from ws-train-secx
- Moved to the first 4 positions of record-key
β Consolidated Acceptance Criteria
- The system executes the database query → aECWRKTB is called with work area, return code, and DB2 SQL code parameters
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallAECWRKTBDatabaseFunction(["Start Step"])
E_CallAECWRKTBDatabaseFunction(["End Step"])
N_CallAECWRKTBDatabaseFunction_Node0{"the system executes the database
query"}:::decision N_CallAECWRKTBDatabaseFunction_Node0_action["AECWRKTB is called with work area,
return code, and DB2 SQL code
parameters"]:::main N_CallAECWRKTBDatabaseFunction_Node0 -- Yes --> N_CallAECWRKTBDatabaseFunction_Node0_action N_CallAECWRKTBDatabaseFunction_Node0_action --> E_CallAECWRKTBDatabaseFunction S_CallAECWRKTBDatabaseFunction --> N_CallAECWRKTBDatabaseFunction_Node0 N_CallAECWRKTBDatabaseFunction_Node0 -- No --> E_CallAECWRKTBDatabaseFunction
query"}:::decision N_CallAECWRKTBDatabaseFunction_Node0_action["AECWRKTB is called with work area,
return code, and DB2 SQL code
parameters"]:::main N_CallAECWRKTBDatabaseFunction_Node0 -- Yes --> N_CallAECWRKTBDatabaseFunction_Node0_action N_CallAECWRKTBDatabaseFunction_Node0_action --> E_CallAECWRKTBDatabaseFunction S_CallAECWRKTBDatabaseFunction --> N_CallAECWRKTBDatabaseFunction_Node0 N_CallAECWRKTBDatabaseFunction_Node0 -- No --> E_CallAECWRKTBDatabaseFunction
File: GCX015.cbl
GIVEN:
database lookup parameters are configured with train port and CUSEMAIL record type
WHEN:
the system executes the database query
THEN:
AECWRKTB is called with work area, return code, and DB2 SQL code parameters
β Consolidated Acceptance Criteria
- The system processes the successful query result → cST-DEFAULT-MERLIN-ID is set as EMI-FROM-USERCODE and email recipients are loaded from CUSEMAIL-USER-ID array
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetDefaultMerlinIDasFromUser(["Start Step"])
E_SetDefaultMerlinIDasFromUser(["End Step"])
N_SetDefaultMerlinIDasFromUser_Node0{"the system processes the successful
query result"}:::decision N_SetDefaultMerlinIDasFromUser_Node0_action["CST-DEFAULT-MERLIN-ID is set as
EMI-FROM-USERCODE and email
recipients are loaded from
CUSEMAIL-USER-ID array"]:::main N_SetDefaultMerlinIDasFromUser_Node0 -- Yes --> N_SetDefaultMerlinIDasFromUser_Node0_action N_SetDefaultMerlinIDasFromUser_Node0_action --> E_SetDefaultMerlinIDasFromUser S_SetDefaultMerlinIDasFromUser --> N_SetDefaultMerlinIDasFromUser_Node0 N_SetDefaultMerlinIDasFromUser_Node0 -- No --> E_SetDefaultMerlinIDasFromUser
query result"}:::decision N_SetDefaultMerlinIDasFromUser_Node0_action["CST-DEFAULT-MERLIN-ID is set as
EMI-FROM-USERCODE and email
recipients are loaded from
CUSEMAIL-USER-ID array"]:::main N_SetDefaultMerlinIDasFromUser_Node0 -- Yes --> N_SetDefaultMerlinIDasFromUser_Node0_action N_SetDefaultMerlinIDasFromUser_Node0_action --> E_SetDefaultMerlinIDasFromUser S_SetDefaultMerlinIDasFromUser --> N_SetDefaultMerlinIDasFromUser_Node0 N_SetDefaultMerlinIDasFromUser_Node0 -- No --> E_SetDefaultMerlinIDasFromUser
File: GCX015.cbl
GIVEN:
AEI email database query returns success code CST-AEI-SUCCESS
WHEN:
the system processes the successful query result
THEN:
- Cst-default-merlin-id is set as emi-from-usercode
- Email recipients are loaded from cusemail-user-id array
β Consolidated Acceptance Criteria
- The system processes the email recipient list → up to 10 non-blank CUSEMAIL-USER-ID entries are moved to EMI-TO-USERCODES array
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_LoadEmailRecipientsfromDatabase(["Start Step"])
E_LoadEmailRecipientsfromDatabase(["End Step"])
N_LoadEmailRecipientsfromDatabase_Node0{"the system processes the email
recipient list"}:::decision N_LoadEmailRecipientsfromDatabase_Node0_action["up to 10 non-blank CUSEMAIL-USER-ID
entries are moved to
EMI-TO-USERCODES array"]:::main N_LoadEmailRecipientsfromDatabase_Node0 -- Yes --> N_LoadEmailRecipientsfromDatabase_Node0_action N_LoadEmailRecipientsfromDatabase_Node0_action --> E_LoadEmailRecipientsfromDatabase S_LoadEmailRecipientsfromDatabase --> N_LoadEmailRecipientsfromDatabase_Node0 N_LoadEmailRecipientsfromDatabase_Node0 -- No --> E_LoadEmailRecipientsfromDatabase
recipient list"}:::decision N_LoadEmailRecipientsfromDatabase_Node0_action["up to 10 non-blank CUSEMAIL-USER-ID
entries are moved to
EMI-TO-USERCODES array"]:::main N_LoadEmailRecipientsfromDatabase_Node0 -- Yes --> N_LoadEmailRecipientsfromDatabase_Node0_action N_LoadEmailRecipientsfromDatabase_Node0_action --> E_LoadEmailRecipientsfromDatabase S_LoadEmailRecipientsfromDatabase --> N_LoadEmailRecipientsfromDatabase_Node0 N_LoadEmailRecipientsfromDatabase_Node0 -- No --> E_LoadEmailRecipientsfromDatabase
File: GCX015.cbl
GIVEN:
database query returned successfully with email user IDs
WHEN:
the system processes the email recipient list
THEN:
up to 10 non-blank CUSEMAIL-USER-ID entries are moved to EMI-TO-USERCODES array
β Consolidated Acceptance Criteria
- The system handles the no entry found condition → cST-DEFAULT-MERLIN-ID is set as both EMI-FROM-USERCODE and EMI-TO-USERCODE
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseDefaultMerlinIDforToUser(["Start Step"])
E_UseDefaultMerlinIDforToUser(["End Step"])
N_UseDefaultMerlinIDforToUser_Node0{"the system handles the no entry
found condition"}:::decision N_UseDefaultMerlinIDforToUser_Node0_action["CST-DEFAULT-MERLIN-ID is set as
both EMI-FROM-USERCODE and
EMI-TO-USERCODE"]:::main N_UseDefaultMerlinIDforToUser_Node0 -- Yes --> N_UseDefaultMerlinIDforToUser_Node0_action N_UseDefaultMerlinIDforToUser_Node0_action --> E_UseDefaultMerlinIDforToUser S_UseDefaultMerlinIDforToUser --> N_UseDefaultMerlinIDforToUser_Node0 N_UseDefaultMerlinIDforToUser_Node0 -- No --> E_UseDefaultMerlinIDforToUser
found condition"}:::decision N_UseDefaultMerlinIDforToUser_Node0_action["CST-DEFAULT-MERLIN-ID is set as
both EMI-FROM-USERCODE and
EMI-TO-USERCODE"]:::main N_UseDefaultMerlinIDforToUser_Node0 -- Yes --> N_UseDefaultMerlinIDforToUser_Node0_action N_UseDefaultMerlinIDforToUser_Node0_action --> E_UseDefaultMerlinIDforToUser S_UseDefaultMerlinIDforToUser --> N_UseDefaultMerlinIDforToUser_Node0 N_UseDefaultMerlinIDforToUser_Node0 -- No --> E_UseDefaultMerlinIDforToUser
File: GCX015.cbl
GIVEN:
AEI email database query returns CST-AEI-NO-ENTRY
WHEN:
the system handles the no entry found condition
THEN:
- Cst-default-merlin-id is set as both emi-from-usercode
- Emi-to-usercode
β Consolidated Acceptance Criteria
- If terminal status message requirements → the train must have ACK status AND AEI send qualification AND enroute already reported status to proceed with terminal messaging
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CheckTerminalStatusConditions(["Start Step"])
E_CheckTerminalStatusConditions(["End Step"])
N_CheckTerminalStatusConditions_Node0{"The system evaluates terminal
status message requirements"}:::decision N_CheckTerminalStatusConditions_Node0_action["The train must have ACK status AND
AEI send qualification AND enroute
already reported status to proceed
with terminal messaging"]:::main N_CheckTerminalStatusConditions_Node0 -- Yes --> N_CheckTerminalStatusConditions_Node0_action N_CheckTerminalStatusConditions_Node0_action --> E_CheckTerminalStatusConditions S_CheckTerminalStatusConditions --> N_CheckTerminalStatusConditions_Node0 N_CheckTerminalStatusConditions_Node0 -- No --> E_CheckTerminalStatusConditions
status message requirements"}:::decision N_CheckTerminalStatusConditions_Node0_action["The train must have ACK status AND
AEI send qualification AND enroute
already reported status to proceed
with terminal messaging"]:::main N_CheckTerminalStatusConditions_Node0 -- Yes --> N_CheckTerminalStatusConditions_Node0_action N_CheckTerminalStatusConditions_Node0_action --> E_CheckTerminalStatusConditions S_CheckTerminalStatusConditions --> N_CheckTerminalStatusConditions_Node0 N_CheckTerminalStatusConditions_Node0 -- No --> E_CheckTerminalStatusConditions
File: GCX015.cbl
GIVEN:
A train record exists in the system
WHEN:
The system evaluates terminal status message requirements
THEN:
- The train must have ack status
- Aei send qualification
- Enroute already reported status to proceed with terminal messaging
β Consolidated Acceptance Criteria
- The system checks the train's acknowledgment status → the train must have ACK status to continue with terminal status processing, otherwise terminate the process
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TrainACKStatus(["Start Step"])
E_TrainACKStatus(["End Step"])
N_TrainACKStatus_Node0{"The system checks the train s
acknowledgment status"}:::decision N_TrainACKStatus_Node0_action["The train must have ACK status to
continue with terminal status
processing, otherwise terminate the
process"]:::exclusion N_TrainACKStatus_Node0 -- Yes -->|Alternative| N_TrainACKStatus_Node0_action N_TrainACKStatus_Node0_action --> E_TrainACKStatus S_TrainACKStatus --> N_TrainACKStatus_Node0 N_TrainACKStatus_Node0 -- No --> E_TrainACKStatus
acknowledgment status"}:::decision N_TrainACKStatus_Node0_action["The train must have ACK status to
continue with terminal status
processing, otherwise terminate the
process"]:::exclusion N_TrainACKStatus_Node0 -- Yes -->|Alternative| N_TrainACKStatus_Node0_action N_TrainACKStatus_Node0_action --> E_TrainACKStatus S_TrainACKStatus --> N_TrainACKStatus_Node0 N_TrainACKStatus_Node0 -- No --> E_TrainACKStatus
File: GCX015.cbl
GIVEN:
A train record is being evaluated for terminal status messaging
WHEN:
The system checks the train's acknowledgment status
THEN:
The train must have ACK status to continue with terminal status processing, otherwise terminate the process
β Consolidated Acceptance Criteria
- If AEI send qualification → the train must have AEI send flag enabled to proceed with terminal status messaging
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AEISendQualified(["Start Step"])
E_AEISendQualified(["End Step"])
N_AEISendQualified_Node0{"The system evaluates AEI send
qualification"}:::decision N_AEISendQualified_Node0_action["The train must have AEI send flag
enabled to proceed with terminal
status messaging"]:::main N_AEISendQualified_Node0 -- Yes --> N_AEISendQualified_Node0_action N_AEISendQualified_Node0_action --> E_AEISendQualified S_AEISendQualified --> N_AEISendQualified_Node0 N_AEISendQualified_Node0 -- No --> E_AEISendQualified
qualification"}:::decision N_AEISendQualified_Node0_action["The train must have AEI send flag
enabled to proceed with terminal
status messaging"]:::main N_AEISendQualified_Node0 -- Yes --> N_AEISendQualified_Node0_action N_AEISendQualified_Node0_action --> E_AEISendQualified S_AEISendQualified --> N_AEISendQualified_Node0 N_AEISendQualified_Node0 -- No --> E_AEISendQualified
File: GCX015.cbl
GIVEN:
A train has ACK status
WHEN:
The system evaluates AEI send qualification
THEN:
The train must have AEI send flag enabled to proceed with terminal status messaging
β Consolidated Acceptance Criteria
- The system checks the enroute reporting status → the train must have enroute already reported status to proceed with terminal status messaging
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_EnrouteAlreadyReported(["Start Step"])
E_EnrouteAlreadyReported(["End Step"])
N_EnrouteAlreadyReported_Node0{"The system checks the enroute
reporting status"}:::decision N_EnrouteAlreadyReported_Node0_action["The train must have enroute already
reported status to proceed with
terminal status messaging"]:::main N_EnrouteAlreadyReported_Node0 -- Yes --> N_EnrouteAlreadyReported_Node0_action N_EnrouteAlreadyReported_Node0_action --> E_EnrouteAlreadyReported S_EnrouteAlreadyReported --> N_EnrouteAlreadyReported_Node0 N_EnrouteAlreadyReported_Node0 -- No --> E_EnrouteAlreadyReported
reporting status"}:::decision N_EnrouteAlreadyReported_Node0_action["The train must have enroute already
reported status to proceed with
terminal status messaging"]:::main N_EnrouteAlreadyReported_Node0 -- Yes --> N_EnrouteAlreadyReported_Node0_action N_EnrouteAlreadyReported_Node0_action --> E_EnrouteAlreadyReported S_EnrouteAlreadyReported --> N_EnrouteAlreadyReported_Node0 N_EnrouteAlreadyReported_Node0 -- No --> E_EnrouteAlreadyReported
File: GCX015.cbl
GIVEN:
A train has ACK status and AEI send qualification
WHEN:
The system checks the enroute reporting status
THEN:
The train must have enroute already reported status to proceed with terminal status messaging
β Consolidated Acceptance Criteria
- The system needs to determine message recipients → the system retrieves the AEI Merlin distribution list using the train's security port information, defaulting to standard recipients if no specific list is found
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetAEIMerlinDistributionList(["Start Step"])
E_GetAEIMerlinDistributionList(["End Step"])
N_GetAEIMerlinDistributionList_Node0{"The system needs to determine
message recipients"}:::decision N_GetAEIMerlinDistributionList_Node0_action["The system retrieves the AEI Merlin
distribution list using the train s
security port information,
defaulting to standard recipients if
no specific list is found"]:::main N_GetAEIMerlinDistributionList_Node0 -- Yes --> N_GetAEIMerlinDistributionList_Node0_action N_GetAEIMerlinDistributionList_Node0_action --> E_GetAEIMerlinDistributionList S_GetAEIMerlinDistributionList --> N_GetAEIMerlinDistributionList_Node0 N_GetAEIMerlinDistributionList_Node0 -- No --> E_GetAEIMerlinDistributionList
message recipients"}:::decision N_GetAEIMerlinDistributionList_Node0_action["The system retrieves the AEI Merlin
distribution list using the train s
security port information,
defaulting to standard recipients if
no specific list is found"]:::main N_GetAEIMerlinDistributionList_Node0 -- Yes --> N_GetAEIMerlinDistributionList_Node0_action N_GetAEIMerlinDistributionList_Node0_action --> E_GetAEIMerlinDistributionList S_GetAEIMerlinDistributionList --> N_GetAEIMerlinDistributionList_Node0 N_GetAEIMerlinDistributionList_Node0 -- No --> E_GetAEIMerlinDistributionList
File: GCX015.cbl
GIVEN:
A train qualifies for terminal status messaging
WHEN:
The system needs to determine message recipients
THEN:
The system retrieves the AEI Merlin distribution list using the train's security port information, defaulting to standard recipients if no specific list is found
β Consolidated Acceptance Criteria
- The system formats the enroute status message → the system creates a standardized enroute message format using the predefined enroute message template
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_FormatEnrouteStatusMessage(["Start Step"])
E_FormatEnrouteStatusMessage(["End Step"])
N_FormatEnrouteStatusMessage_Node0{"The system formats the enroute
status message"}:::decision N_FormatEnrouteStatusMessage_Node0_action["The system creates a standardized
enroute message format using the
predefined enroute message template"]:::main N_FormatEnrouteStatusMessage_Node0 -- Yes --> N_FormatEnrouteStatusMessage_Node0_action N_FormatEnrouteStatusMessage_Node0_action --> E_FormatEnrouteStatusMessage S_FormatEnrouteStatusMessage --> N_FormatEnrouteStatusMessage_Node0 N_FormatEnrouteStatusMessage_Node0 -- No --> E_FormatEnrouteStatusMessage
status message"}:::decision N_FormatEnrouteStatusMessage_Node0_action["The system creates a standardized
enroute message format using the
predefined enroute message template"]:::main N_FormatEnrouteStatusMessage_Node0 -- Yes --> N_FormatEnrouteStatusMessage_Node0_action N_FormatEnrouteStatusMessage_Node0_action --> E_FormatEnrouteStatusMessage S_FormatEnrouteStatusMessage --> N_FormatEnrouteStatusMessage_Node0 N_FormatEnrouteStatusMessage_Node0 -- No --> E_FormatEnrouteStatusMessage
File: GCX015.cbl
GIVEN:
A train qualifies for terminal status messaging and distribution list is retrieved
WHEN:
The system formats the enroute status message
THEN:
The system creates a standardized enroute message format using the predefined enroute message template
β Consolidated Acceptance Criteria
- The system assigns train identification to the message → the system sets the train's customer train ID as the subject identifier in the enroute status message
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTrainIDinMessage(["Start Step"])
E_SetTrainIDinMessage(["End Step"])
N_SetTrainIDinMessage_Node0{"The system assigns train
identification to the message"}:::decision N_SetTrainIDinMessage_Node0_action["The system sets the train s
customer train ID as the subject
identifier in the enroute status
message"]:::main N_SetTrainIDinMessage_Node0 -- Yes --> N_SetTrainIDinMessage_Node0_action N_SetTrainIDinMessage_Node0_action --> E_SetTrainIDinMessage S_SetTrainIDinMessage --> N_SetTrainIDinMessage_Node0 N_SetTrainIDinMessage_Node0 -- No --> E_SetTrainIDinMessage
identification to the message"}:::decision N_SetTrainIDinMessage_Node0_action["The system sets the train s
customer train ID as the subject
identifier in the enroute status
message"]:::main N_SetTrainIDinMessage_Node0 -- Yes --> N_SetTrainIDinMessage_Node0_action N_SetTrainIDinMessage_Node0_action --> E_SetTrainIDinMessage S_SetTrainIDinMessage --> N_SetTrainIDinMessage_Node0 N_SetTrainIDinMessage_Node0 -- No --> E_SetTrainIDinMessage
File: GCX015.cbl
GIVEN:
An enroute status message is formatted
WHEN:
The system assigns train identification to the message
THEN:
The system sets the train's customer train ID as the subject identifier in the enroute status message
β Consolidated Acceptance Criteria
- The system transmits the terminal status message → the system sends the enroute status message through the Merlin messaging system to the designated recipients
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendStatusMessagetoTerminalSystems(["Start Step"])
E_SendStatusMessagetoTerminalSystems(["End Step"])
N_SendStatusMessagetoTerminalSystems_Node0{"The system transmits the terminal
status message"}:::decision N_SendStatusMessagetoTerminalSystems_Node0_action["The system sends the enroute status
message through the Merlin messaging
system to the designated recipients"]:::main N_SendStatusMessagetoTerminalSystems_Node0 -- Yes --> N_SendStatusMessagetoTerminalSystems_Node0_action N_SendStatusMessagetoTerminalSystems_Node0_action --> E_SendStatusMessagetoTerminalSystems S_SendStatusMessagetoTerminalSystems --> N_SendStatusMessagetoTerminalSystems_Node0 N_SendStatusMessagetoTerminalSystems_Node0 -- No --> E_SendStatusMessagetoTerminalSystems
status message"}:::decision N_SendStatusMessagetoTerminalSystems_Node0_action["The system sends the enroute status
message through the Merlin messaging
system to the designated recipients"]:::main N_SendStatusMessagetoTerminalSystems_Node0 -- Yes --> N_SendStatusMessagetoTerminalSystems_Node0_action N_SendStatusMessagetoTerminalSystems_Node0_action --> E_SendStatusMessagetoTerminalSystems S_SendStatusMessagetoTerminalSystems --> N_SendStatusMessagetoTerminalSystems_Node0 N_SendStatusMessagetoTerminalSystems_Node0 -- No --> E_SendStatusMessagetoTerminalSystems
File: GCX015.cbl
GIVEN:
An enroute status message is formatted with train ID and distribution list is available
WHEN:
The system transmits the terminal status message
THEN:
The system sends the enroute status message through the Merlin messaging system to the designated recipients
β Consolidated Acceptance Criteria
- The system checks the train's status for arrival processing eligibility → the train is eligible for arrival processing only if it has both ACK status and ARRIVED-PENDING flag set to true
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CheckTrainStatusConditions(["Start Step"])
E_CheckTrainStatusConditions(["End Step"])
N_CheckTrainStatusConditions_Node0{"The system checks the train s
status for arrival processing
eligibility"}:::decision N_CheckTrainStatusConditions_Node0_action["The train is eligible for arrival
processing only if it has both ACK
status and ARRIVED-PENDING flag set
to true"]:::main N_CheckTrainStatusConditions_Node0 -- Yes --> N_CheckTrainStatusConditions_Node0_action N_CheckTrainStatusConditions_Node0_action --> E_CheckTrainStatusConditions S_CheckTrainStatusConditions --> N_CheckTrainStatusConditions_Node0 N_CheckTrainStatusConditions_Node0 -- No --> E_CheckTrainStatusConditions
status for arrival processing
eligibility"}:::decision N_CheckTrainStatusConditions_Node0_action["The train is eligible for arrival
processing only if it has both ACK
status and ARRIVED-PENDING flag set
to true"]:::main N_CheckTrainStatusConditions_Node0 -- Yes --> N_CheckTrainStatusConditions_Node0_action N_CheckTrainStatusConditions_Node0_action --> E_CheckTrainStatusConditions S_CheckTrainStatusConditions --> N_CheckTrainStatusConditions_Node0 N_CheckTrainStatusConditions_Node0 -- No --> E_CheckTrainStatusConditions
File: GCX015.cbl
GIVEN:
A train record exists in the system
WHEN:
The system checks the train's status for arrival processing eligibility
THEN:
- The train is eligible for arrival processing only if it has both ack status
- Arrived-pending flag set to true
β Consolidated Acceptance Criteria
- The system begins creating the arrival transaction → the train arrival transaction data structure is cleared and prepared for population
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeTrainArrivalTransaction(["Start Step"])
E_InitializeTrainArrivalTransaction(["End Step"])
N_InitializeTrainArrivalTransaction_Node0{"The system begins creating the
arrival transaction"}:::decision N_InitializeTrainArrivalTransaction_Node0_action["The train arrival transaction data
structure is cleared and prepared
for population"]:::main N_InitializeTrainArrivalTransaction_Node0 -- Yes --> N_InitializeTrainArrivalTransaction_Node0_action N_InitializeTrainArrivalTransaction_Node0_action --> E_InitializeTrainArrivalTransaction S_InitializeTrainArrivalTransaction --> N_InitializeTrainArrivalTransaction_Node0 N_InitializeTrainArrivalTransaction_Node0 -- No --> E_InitializeTrainArrivalTransaction
arrival transaction"}:::decision N_InitializeTrainArrivalTransaction_Node0_action["The train arrival transaction data
structure is cleared and prepared
for population"]:::main N_InitializeTrainArrivalTransaction_Node0 -- Yes --> N_InitializeTrainArrivalTransaction_Node0_action N_InitializeTrainArrivalTransaction_Node0_action --> E_InitializeTrainArrivalTransaction S_InitializeTrainArrivalTransaction --> N_InitializeTrainArrivalTransaction_Node0 N_InitializeTrainArrivalTransaction_Node0 -- No --> E_InitializeTrainArrivalTransaction
File: GCX015.cbl
GIVEN:
A train is eligible for arrival processing
WHEN:
The system begins creating the arrival transaction
THEN:
- The train arrival transaction data structure is cleared
- Prepared for population
β Consolidated Acceptance Criteria
- The system sets the transaction type → the action code is set to 'TAR' to indicate train arrival processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetActionCodetoTAR(["Start Step"])
E_SetActionCodetoTAR(["End Step"])
N_SetActionCodetoTAR_Node0{"The system sets the transaction
type"}:::decision N_SetActionCodetoTAR_Node0_action["The action code is set to TAR to
indicate train arrival processing"]:::main N_SetActionCodetoTAR_Node0 -- Yes --> N_SetActionCodetoTAR_Node0_action N_SetActionCodetoTAR_Node0_action --> E_SetActionCodetoTAR S_SetActionCodetoTAR --> N_SetActionCodetoTAR_Node0 N_SetActionCodetoTAR_Node0 -- No --> E_SetActionCodetoTAR
type"}:::decision N_SetActionCodetoTAR_Node0_action["The action code is set to TAR to
indicate train arrival processing"]:::main N_SetActionCodetoTAR_Node0 -- Yes --> N_SetActionCodetoTAR_Node0_action N_SetActionCodetoTAR_Node0_action --> E_SetActionCodetoTAR S_SetActionCodetoTAR --> N_SetActionCodetoTAR_Node0 N_SetActionCodetoTAR_Node0 -- No --> E_SetActionCodetoTAR
File: GCX015.cbl
GIVEN:
A train arrival transaction is being created
WHEN:
The system sets the transaction type
THEN:
The action code is set to 'TAR' to indicate train arrival processing
β Consolidated Acceptance Criteria
- The system needs to timestamp the arrival event → the current machine date and time are captured from the system
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetCurrentSystemDateandTime(["Start Step"])
E_GetCurrentSystemDateandTime(["End Step"])
N_GetCurrentSystemDateandTime_Node0{"The system needs to timestamp the
arrival event"}:::decision N_GetCurrentSystemDateandTime_Node0_action["The current machine date and time
are captured from the system"]:::main N_GetCurrentSystemDateandTime_Node0 -- Yes --> N_GetCurrentSystemDateandTime_Node0_action N_GetCurrentSystemDateandTime_Node0_action --> E_GetCurrentSystemDateandTime S_GetCurrentSystemDateandTime --> N_GetCurrentSystemDateandTime_Node0 N_GetCurrentSystemDateandTime_Node0 -- No --> E_GetCurrentSystemDateandTime
arrival event"}:::decision N_GetCurrentSystemDateandTime_Node0_action["The current machine date and time
are captured from the system"]:::main N_GetCurrentSystemDateandTime_Node0 -- Yes --> N_GetCurrentSystemDateandTime_Node0_action N_GetCurrentSystemDateandTime_Node0_action --> E_GetCurrentSystemDateandTime S_GetCurrentSystemDateandTime --> N_GetCurrentSystemDateandTime_Node0 N_GetCurrentSystemDateandTime_Node0 -- No --> E_GetCurrentSystemDateandTime
File: GCX015.cbl
GIVEN:
A train arrival transaction is being created
WHEN:
The system needs to timestamp the arrival event
THEN:
- The current machine date
- Time are captured from the system
β Consolidated Acceptance Criteria
- The system assigns the event date for the arrival transaction → the event date is set to the current machine date in YYMMDD format
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetEventDatefromMachineDate(["Start Step"])
E_SetEventDatefromMachineDate(["End Step"])
N_SetEventDatefromMachineDate_Node0{"The system assigns the event date
for the arrival transaction"}:::decision N_SetEventDatefromMachineDate_Node0_action["The event date is set to the
current machine date in YYMMDD
format"]:::main N_SetEventDatefromMachineDate_Node0 -- Yes --> N_SetEventDatefromMachineDate_Node0_action N_SetEventDatefromMachineDate_Node0_action --> E_SetEventDatefromMachineDate S_SetEventDatefromMachineDate --> N_SetEventDatefromMachineDate_Node0 N_SetEventDatefromMachineDate_Node0 -- No --> E_SetEventDatefromMachineDate
for the arrival transaction"}:::decision N_SetEventDatefromMachineDate_Node0_action["The event date is set to the
current machine date in YYMMDD
format"]:::main N_SetEventDatefromMachineDate_Node0 -- Yes --> N_SetEventDatefromMachineDate_Node0_action N_SetEventDatefromMachineDate_Node0_action --> E_SetEventDatefromMachineDate S_SetEventDatefromMachineDate --> N_SetEventDatefromMachineDate_Node0 N_SetEventDatefromMachineDate_Node0 -- No --> E_SetEventDatefromMachineDate
File: GCX015.cbl
GIVEN:
The current system date has been captured
WHEN:
The system assigns the event date for the arrival transaction
THEN:
The event date is set to the current machine date in YYMMDD format
β Consolidated Acceptance Criteria
- The system assigns the event time for the arrival transaction → the event time is set to the first 4 digits of the current machine time (HHMM format)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetEventTimefromMachineTime(["Start Step"])
E_SetEventTimefromMachineTime(["End Step"])
N_SetEventTimefromMachineTime_Node0{"The system assigns the event time
for the arrival transaction"}:::decision N_SetEventTimefromMachineTime_Node0_action["The event time is set to the first
4 digits of the current machine time
HHMM format"]:::main N_SetEventTimefromMachineTime_Node0 -- Yes --> N_SetEventTimefromMachineTime_Node0_action N_SetEventTimefromMachineTime_Node0_action --> E_SetEventTimefromMachineTime S_SetEventTimefromMachineTime --> N_SetEventTimefromMachineTime_Node0 N_SetEventTimefromMachineTime_Node0 -- No --> E_SetEventTimefromMachineTime
for the arrival transaction"}:::decision N_SetEventTimefromMachineTime_Node0_action["The event time is set to the first
4 digits of the current machine time
HHMM format"]:::main N_SetEventTimefromMachineTime_Node0 -- Yes --> N_SetEventTimefromMachineTime_Node0_action N_SetEventTimefromMachineTime_Node0_action --> E_SetEventTimefromMachineTime S_SetEventTimefromMachineTime --> N_SetEventTimefromMachineTime_Node0 N_SetEventTimefromMachineTime_Node0 -- No --> E_SetEventTimefromMachineTime
File: GCX015.cbl
GIVEN:
The current system time has been captured
WHEN:
The system assigns the event time for the arrival transaction
THEN:
The event time is set to the first 4 digits of the current machine time (HHMM format)
β Consolidated Acceptance Criteria
- The system creates the arrival transaction → the train identifier in the transaction is set to the US customer train ID from the train record
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTrainIDfromUSCUSTTRAINID(["Start Step"])
E_SetTrainIDfromUSCUSTTRAINID(["End Step"])
N_SetTrainIDfromUSCUSTTRAINID_Node0{"The system creates the arrival
transaction"}:::decision N_SetTrainIDfromUSCUSTTRAINID_Node0_action["The train identifier in the
transaction is set to the US
customer train ID from the train
record"]:::main N_SetTrainIDfromUSCUSTTRAINID_Node0 -- Yes --> N_SetTrainIDfromUSCUSTTRAINID_Node0_action N_SetTrainIDfromUSCUSTTRAINID_Node0_action --> E_SetTrainIDfromUSCUSTTRAINID S_SetTrainIDfromUSCUSTTRAINID --> N_SetTrainIDfromUSCUSTTRAINID_Node0 N_SetTrainIDfromUSCUSTTRAINID_Node0 -- No --> E_SetTrainIDfromUSCUSTTRAINID
transaction"}:::decision N_SetTrainIDfromUSCUSTTRAINID_Node0_action["The train identifier in the
transaction is set to the US
customer train ID from the train
record"]:::main N_SetTrainIDfromUSCUSTTRAINID_Node0 -- Yes --> N_SetTrainIDfromUSCUSTTRAINID_Node0_action N_SetTrainIDfromUSCUSTTRAINID_Node0_action --> E_SetTrainIDfromUSCUSTTRAINID S_SetTrainIDfromUSCUSTTRAINID --> N_SetTrainIDfromUSCUSTTRAINID_Node0 N_SetTrainIDfromUSCUSTTRAINID_Node0 -- No --> E_SetTrainIDfromUSCUSTTRAINID
File: GCX015.cbl
GIVEN:
A train record contains a US customer train ID
WHEN:
The system creates the arrival transaction
THEN:
The train identifier in the transaction is set to the US customer train ID from the train record
β Consolidated Acceptance Criteria
- The system sets the security configuration → the security byte is set to high-value to indicate maximum security level
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetSecurityBytetoHighValue(["Start Step"])
E_SetSecurityBytetoHighValue(["End Step"])
N_SetSecurityBytetoHighValue_Node0{"The system sets the security
configuration"}:::decision N_SetSecurityBytetoHighValue_Node0_action["The security byte is set to
high-value to indicate maximum
security level"]:::main N_SetSecurityBytetoHighValue_Node0 -- Yes --> N_SetSecurityBytetoHighValue_Node0_action N_SetSecurityBytetoHighValue_Node0_action --> E_SetSecurityBytetoHighValue S_SetSecurityBytetoHighValue --> N_SetSecurityBytetoHighValue_Node0 N_SetSecurityBytetoHighValue_Node0 -- No --> E_SetSecurityBytetoHighValue
configuration"}:::decision N_SetSecurityBytetoHighValue_Node0_action["The security byte is set to
high-value to indicate maximum
security level"]:::main N_SetSecurityBytetoHighValue_Node0 -- Yes --> N_SetSecurityBytetoHighValue_Node0_action N_SetSecurityBytetoHighValue_Node0_action --> E_SetSecurityBytetoHighValue S_SetSecurityBytetoHighValue --> N_SetSecurityBytetoHighValue_Node0 N_SetSecurityBytetoHighValue_Node0 -- No --> E_SetSecurityBytetoHighValue
File: GCX015.cbl
GIVEN:
A train arrival transaction is being created
WHEN:
The system sets the security configuration
THEN:
The security byte is set to high-value to indicate maximum security level
β Consolidated Acceptance Criteria
- The system sets the entity type flag → the US-TRAIN flag is set to true to distinguish this from cargo processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetTrainTypeFlag(["Start Step"])
E_SetTrainTypeFlag(["End Step"])
N_SetTrainTypeFlag_Node0{"The system sets the entity type
flag"}:::decision N_SetTrainTypeFlag_Node0_action["The US-TRAIN flag is set to true to
distinguish this from cargo
processing"]:::main N_SetTrainTypeFlag_Node0 -- Yes --> N_SetTrainTypeFlag_Node0_action N_SetTrainTypeFlag_Node0_action --> E_SetTrainTypeFlag S_SetTrainTypeFlag --> N_SetTrainTypeFlag_Node0 N_SetTrainTypeFlag_Node0 -- No --> E_SetTrainTypeFlag
flag"}:::decision N_SetTrainTypeFlag_Node0_action["The US-TRAIN flag is set to true to
distinguish this from cargo
processing"]:::main N_SetTrainTypeFlag_Node0 -- Yes --> N_SetTrainTypeFlag_Node0_action N_SetTrainTypeFlag_Node0_action --> E_SetTrainTypeFlag S_SetTrainTypeFlag --> N_SetTrainTypeFlag_Node0 N_SetTrainTypeFlag_Node0 -- No --> E_SetTrainTypeFlag
File: GCX015.cbl
GIVEN:
A train arrival transaction is being created
WHEN:
The system sets the entity type flag
THEN:
The US-TRAIN flag is set to true to distinguish this from cargo processing
β Consolidated Acceptance Criteria
- The system prepares the message for transmission → the complete GCT1121E message structure is built with all transaction data
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_BuildGCT1121EMessage(["Start Step"])
E_BuildGCT1121EMessage(["End Step"])
N_BuildGCT1121EMessage_Node0{"The system prepares the message for
transmission"}:::decision N_BuildGCT1121EMessage_Node0_action["The complete GCT1121E message
structure is built with all
transaction data"]:::main N_BuildGCT1121EMessage_Node0 -- Yes --> N_BuildGCT1121EMessage_Node0_action N_BuildGCT1121EMessage_Node0_action --> E_BuildGCT1121EMessage S_BuildGCT1121EMessage --> N_BuildGCT1121EMessage_Node0 N_BuildGCT1121EMessage_Node0 -- No --> E_BuildGCT1121EMessage
transmission"}:::decision N_BuildGCT1121EMessage_Node0_action["The complete GCT1121E message
structure is built with all
transaction data"]:::main N_BuildGCT1121EMessage_Node0 -- Yes --> N_BuildGCT1121EMessage_Node0_action N_BuildGCT1121EMessage_Node0_action --> E_BuildGCT1121EMessage S_BuildGCT1121EMessage --> N_BuildGCT1121EMessage_Node0 N_BuildGCT1121EMessage_Node0 -- No --> E_BuildGCT1121EMessage
File: GCX015.cbl
GIVEN:
All train arrival transaction data has been populated
WHEN:
The system prepares the message for transmission
THEN:
The complete GCT1121E message structure is built with all transaction data
β Consolidated Acceptance Criteria
- The system sends the message for processing → the message is transmitted to the designated message queue using the WRITMSGL service
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendTrainArrivalMessagetoQueue(["Start Step"])
E_SendTrainArrivalMessagetoQueue(["End Step"])
N_SendTrainArrivalMessagetoQueue_Node0{"The system sends the message for
processing"}:::decision N_SendTrainArrivalMessagetoQueue_Node0_action["The message is transmitted to the
designated message queue using the
WRITMSGL service"]:::main N_SendTrainArrivalMessagetoQueue_Node0 -- Yes --> N_SendTrainArrivalMessagetoQueue_Node0_action N_SendTrainArrivalMessagetoQueue_Node0_action --> E_SendTrainArrivalMessagetoQueue S_SendTrainArrivalMessagetoQueue --> N_SendTrainArrivalMessagetoQueue_Node0 N_SendTrainArrivalMessagetoQueue_Node0 -- No --> E_SendTrainArrivalMessagetoQueue
processing"}:::decision N_SendTrainArrivalMessagetoQueue_Node0_action["The message is transmitted to the
designated message queue using the
WRITMSGL service"]:::main N_SendTrainArrivalMessagetoQueue_Node0 -- Yes --> N_SendTrainArrivalMessagetoQueue_Node0_action N_SendTrainArrivalMessagetoQueue_Node0_action --> E_SendTrainArrivalMessagetoQueue S_SendTrainArrivalMessagetoQueue --> N_SendTrainArrivalMessagetoQueue_Node0 N_SendTrainArrivalMessagetoQueue_Node0 -- No --> E_SendTrainArrivalMessagetoQueue
File: GCX015.cbl
GIVEN:
A complete train arrival message has been constructed
WHEN:
The system sends the message for processing
THEN:
The message is transmitted to the designated message queue using the WRITMSGL service
β Consolidated Acceptance Criteria
- The system completes the message transmission → the message queue is purged to clean up any temporary message data
- The transmission completes without errors → the message queue should be purged to clean up resources
- The send operation completes without errors (EMI-NO-ERRORS) → the message queue is purged using CIMS with PURG function
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_PurgeMessageQueue(["Start Step"])
E_PurgeMessageQueue(["End Step"])
N_PurgeMessageQueue_Node0{"The system completes the message
transmission"}:::decision N_PurgeMessageQueue_Node0_action["The message queue is purged to
clean up any temporary message data"]:::main N_PurgeMessageQueue_Node0 -- Yes --> N_PurgeMessageQueue_Node0_action N_PurgeMessageQueue_Node0_action --> E_PurgeMessageQueue S_PurgeMessageQueue --> N_PurgeMessageQueue_Node0 N_PurgeMessageQueue_Node1{"The transmission completes without
errors"}:::decision N_PurgeMessageQueue_Node1_action["The message queue should be purged
to clean up resources"]:::main N_PurgeMessageQueue_Node1 -- Yes --> N_PurgeMessageQueue_Node1_action N_PurgeMessageQueue_Node1_action --> E_PurgeMessageQueue N_PurgeMessageQueue_Node0 -- No --> N_PurgeMessageQueue_Node1 N_PurgeMessageQueue_Node2{"The send operation completes
without errors EMI-NO-ERRORS"}:::decision N_PurgeMessageQueue_Node2_action["The message queue is purged using
CIMS with PURG function"]:::main N_PurgeMessageQueue_Node2 -- Yes --> N_PurgeMessageQueue_Node2_action N_PurgeMessageQueue_Node2_action --> E_PurgeMessageQueue N_PurgeMessageQueue_Node1 -- No --> N_PurgeMessageQueue_Node2 N_PurgeMessageQueue_Node2 -- No --> E_PurgeMessageQueue
transmission"}:::decision N_PurgeMessageQueue_Node0_action["The message queue is purged to
clean up any temporary message data"]:::main N_PurgeMessageQueue_Node0 -- Yes --> N_PurgeMessageQueue_Node0_action N_PurgeMessageQueue_Node0_action --> E_PurgeMessageQueue S_PurgeMessageQueue --> N_PurgeMessageQueue_Node0 N_PurgeMessageQueue_Node1{"The transmission completes without
errors"}:::decision N_PurgeMessageQueue_Node1_action["The message queue should be purged
to clean up resources"]:::main N_PurgeMessageQueue_Node1 -- Yes --> N_PurgeMessageQueue_Node1_action N_PurgeMessageQueue_Node1_action --> E_PurgeMessageQueue N_PurgeMessageQueue_Node0 -- No --> N_PurgeMessageQueue_Node1 N_PurgeMessageQueue_Node2{"The send operation completes
without errors EMI-NO-ERRORS"}:::decision N_PurgeMessageQueue_Node2_action["The message queue is purged using
CIMS with PURG function"]:::main N_PurgeMessageQueue_Node2 -- Yes --> N_PurgeMessageQueue_Node2_action N_PurgeMessageQueue_Node2_action --> E_PurgeMessageQueue N_PurgeMessageQueue_Node1 -- No --> N_PurgeMessageQueue_Node2 N_PurgeMessageQueue_Node2 -- No --> E_PurgeMessageQueue
File: GCX015.cbl
GIVEN:
A train arrival message has been sent to the queue
WHEN:
The system completes the message transmission
THEN:
The message queue is purged to clean up any temporary message data
File: GCX015.cbl
GIVEN:
A Merlin message has been successfully transmitted
WHEN:
The transmission completes without errors
THEN:
The message queue should be purged to clean up resources
File: GCX015.cbl
GIVEN:
Secondary Merlin send has been executed
WHEN:
The send operation completes without errors (EMI-NO-ERRORS)
THEN:
The message queue is purged using CIMS with PURG function
β Consolidated Acceptance Criteria
- The system attempts to retrieve the T1 administrative table using table ID 'T1' → the T1 administrative table segment should be loaded for timestamp updates
- The system attempts to retrieve the T1 administrative table using table ID 'T1' → the T1 administrative table segment should be retrieved and made available for timestamp updates
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetT1AdministrativeTable(["Start Step"])
E_GetT1AdministrativeTable(["End Step"])
N_GetT1AdministrativeTable_Node0{"The system attempts to retrieve the
T1 administrative table using table
ID T1"}:::decision N_GetT1AdministrativeTable_Node0_action["The T1 administrative table segment
should be loaded for timestamp
updates"]:::main N_GetT1AdministrativeTable_Node0 -- Yes --> N_GetT1AdministrativeTable_Node0_action N_GetT1AdministrativeTable_Node0_action --> E_GetT1AdministrativeTable S_GetT1AdministrativeTable --> N_GetT1AdministrativeTable_Node0 N_GetT1AdministrativeTable_Node1{"The system attempts to retrieve the
T1 administrative table using table
ID T1"}:::decision N_GetT1AdministrativeTable_Node1_action["The T1 administrative table segment
should be retrieved and made
available for timestamp updates"]:::main N_GetT1AdministrativeTable_Node1 -- Yes --> N_GetT1AdministrativeTable_Node1_action N_GetT1AdministrativeTable_Node1_action --> E_GetT1AdministrativeTable N_GetT1AdministrativeTable_Node0 -- No --> N_GetT1AdministrativeTable_Node1 N_GetT1AdministrativeTable_Node1 -- No --> E_GetT1AdministrativeTable
T1 administrative table using table
ID T1"}:::decision N_GetT1AdministrativeTable_Node0_action["The T1 administrative table segment
should be loaded for timestamp
updates"]:::main N_GetT1AdministrativeTable_Node0 -- Yes --> N_GetT1AdministrativeTable_Node0_action N_GetT1AdministrativeTable_Node0_action --> E_GetT1AdministrativeTable S_GetT1AdministrativeTable --> N_GetT1AdministrativeTable_Node0 N_GetT1AdministrativeTable_Node1{"The system attempts to retrieve the
T1 administrative table using table
ID T1"}:::decision N_GetT1AdministrativeTable_Node1_action["The T1 administrative table segment
should be retrieved and made
available for timestamp updates"]:::main N_GetT1AdministrativeTable_Node1 -- Yes --> N_GetT1AdministrativeTable_Node1_action N_GetT1AdministrativeTable_Node1_action --> E_GetT1AdministrativeTable N_GetT1AdministrativeTable_Node0 -- No --> N_GetT1AdministrativeTable_Node1 N_GetT1AdministrativeTable_Node1 -- No --> E_GetT1AdministrativeTable
File: GCX015.cbl
GIVEN:
A manifest acknowledgment needs to be processed
WHEN:
The system attempts to retrieve the T1 administrative table using table ID 'T1'
THEN:
The T1 administrative table segment should be loaded for timestamp updates
File: GCX015.cbl
GIVEN:
The system needs to update administrative timestamps for acknowledgment processing
WHEN:
The system attempts to retrieve the T1 administrative table using table ID 'T1'
THEN:
- The t1 administrative table segment should be retrieved
- Made available for timestamp updates
β Consolidated Acceptance Criteria
- The T1 administrative table retrieval fails with a non-zero return flag → an error message 'T1 CHECK TABLE ENTRY NOT FOUND' should be sent and processing should terminate
- The T1 table segment cannot be found or accessed → the system must send an error message indicating the table entry was not found and terminate the update process
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendErrorTableNotFound(["Start Step"])
E_SendErrorTableNotFound(["End Step"])
N_SendErrorTableNotFound_Node0{"The T1 administrative table
retrieval fails with a non-zero
return flag"}:::decision N_SendErrorTableNotFound_Node0_action["An error message T1 CHECK TABLE
ENTRY NOT FOUND should be sent and
processing should terminate"]:::exclusion N_SendErrorTableNotFound_Node0 -- Yes -->|Alternative| N_SendErrorTableNotFound_Node0_action N_SendErrorTableNotFound_Node0_action --> E_SendErrorTableNotFound S_SendErrorTableNotFound --> N_SendErrorTableNotFound_Node0 N_SendErrorTableNotFound_Node1{"The T1 table segment cannot be
found or accessed"}:::decision N_SendErrorTableNotFound_Node1_action["The system must send an error
message indicating the table entry
was not found and terminate the
update process"]:::exclusion N_SendErrorTableNotFound_Node1 -- Yes -->|Alternative| N_SendErrorTableNotFound_Node1_action N_SendErrorTableNotFound_Node1_action --> E_SendErrorTableNotFound N_SendErrorTableNotFound_Node0 -- No --> N_SendErrorTableNotFound_Node1 N_SendErrorTableNotFound_Node1 -- No --> E_SendErrorTableNotFound
retrieval fails with a non-zero
return flag"}:::decision N_SendErrorTableNotFound_Node0_action["An error message T1 CHECK TABLE
ENTRY NOT FOUND should be sent and
processing should terminate"]:::exclusion N_SendErrorTableNotFound_Node0 -- Yes -->|Alternative| N_SendErrorTableNotFound_Node0_action N_SendErrorTableNotFound_Node0_action --> E_SendErrorTableNotFound S_SendErrorTableNotFound --> N_SendErrorTableNotFound_Node0 N_SendErrorTableNotFound_Node1{"The T1 table segment cannot be
found or accessed"}:::decision N_SendErrorTableNotFound_Node1_action["The system must send an error
message indicating the table entry
was not found and terminate the
update process"]:::exclusion N_SendErrorTableNotFound_Node1 -- Yes -->|Alternative| N_SendErrorTableNotFound_Node1_action N_SendErrorTableNotFound_Node1_action --> E_SendErrorTableNotFound N_SendErrorTableNotFound_Node0 -- No --> N_SendErrorTableNotFound_Node1 N_SendErrorTableNotFound_Node1 -- No --> E_SendErrorTableNotFound
File: GCX015.cbl
GIVEN:
The system is attempting to update acknowledgment timestamps
WHEN:
The T1 administrative table retrieval fails with a non-zero return flag
THEN:
- An error message 't1 check table entry not found' should be sent
- Processing should terminate
File: GCX015.cbl
GIVEN:
A request to update administrative table T1 is made
WHEN:
The T1 table segment cannot be found or accessed
THEN:
- The system must send an error message indicating the table entry was not found
- Terminate the update process
β Consolidated Acceptance Criteria
- The manifest type code equals 'P' → the current machine date should be recorded in positions 3-6 of T1-309-ACK field, the current machine century should be recorded in positions 1-2 of T1-309-ACK field, and the current machine time (first 4 digits) should be recorded in positions 9-4 of T1-309-ACK field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK(["Start Step"])
E_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK(["End Step"])
N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0{"The manifest type code equals P"}:::decision
N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0_action["The current machine date should be
recorded in positions 3-6 of
T1-309-ACK field, the current
machine century should be recorded
in positions 1-2 of T1-309-ACK
field, and the current machine time
first 4 digits should be recorded in
positions 9-4 of T1-309-ACK field"]:::main N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0 -- Yes --> N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0_action N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0_action --> E_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK S_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK --> N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0 N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0 -- No --> E_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK
recorded in positions 3-6 of
T1-309-ACK field, the current
machine century should be recorded
in positions 1-2 of T1-309-ACK
field, and the current machine time
first 4 digits should be recorded in
positions 9-4 of T1-309-ACK field"]:::main N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0 -- Yes --> N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0_action N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0_action --> E_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK S_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK --> N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0 N_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK_Node0 -- No --> E_UpdatePTypeManifestTimestampRecordCurrentDateTimeinT1309ACK
File: GCX015.cbl
GIVEN:
A manifest acknowledgment is being processed and the T1 administrative table is available
WHEN:
The manifest type code equals 'P'
THEN:
The current machine date should be recorded in positions 3-6 of T1-309-ACK field, the current machine century should be recorded in positions 1-2 of T1-309-ACK field, and the current machine time (first 4 digits) should be recorded in positions 9-4 of T1-309-ACK field
β Consolidated Acceptance Criteria
- The manifest type code equals 'H' → the current machine date should be recorded in positions 3-6 of T1-353-ACK field, the current machine century should be recorded in positions 1-2 of T1-353-ACK field, and the current machine time (first 4 digits) should be recorded in positions 9-4 of T1-353-ACK field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK(["Start Step"])
E_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK(["End Step"])
N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0{"The manifest type code equals H"}:::decision
N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0_action["The current machine date should be
recorded in positions 3-6 of
T1-353-ACK field, the current
machine century should be recorded
in positions 1-2 of T1-353-ACK
field, and the current machine time
first 4 digits should be recorded in
positions 9-4 of T1-353-ACK field"]:::main N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0 -- Yes --> N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0_action N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0_action --> E_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK S_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK --> N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0 N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0 -- No --> E_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK
recorded in positions 3-6 of
T1-353-ACK field, the current
machine century should be recorded
in positions 1-2 of T1-353-ACK
field, and the current machine time
first 4 digits should be recorded in
positions 9-4 of T1-353-ACK field"]:::main N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0 -- Yes --> N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0_action N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0_action --> E_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK S_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK --> N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0 N_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK_Node0 -- No --> E_UpdateHTypeManifestTimestampRecordCurrentDateTimeinT1353ACK
File: GCX015.cbl
GIVEN:
A manifest acknowledgment is being processed and the T1 administrative table is available
WHEN:
The manifest type code equals 'H'
THEN:
The current machine date should be recorded in positions 3-6 of T1-353-ACK field, the current machine century should be recorded in positions 1-2 of T1-353-ACK field, and the current machine time (first 4 digits) should be recorded in positions 9-4 of T1-353-ACK field
β Consolidated Acceptance Criteria
- The manifest type code equals 'S' → the current machine date should be recorded in positions 3-6 of T1-358-ACK field, the current machine century should be recorded in positions 1-2 of T1-358-ACK field, and the current machine time (first 4 digits) should be recorded in positions 9-4 of T1-358-ACK field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK(["Start Step"])
E_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK(["End Step"])
N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0{"The manifest type code equals S"}:::decision
N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0_action["The current machine date should be
recorded in positions 3-6 of
T1-358-ACK field, the current
machine century should be recorded
in positions 1-2 of T1-358-ACK
field, and the current machine time
first 4 digits should be recorded in
positions 9-4 of T1-358-ACK field"]:::main N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0 -- Yes --> N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0_action N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0_action --> E_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK S_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK --> N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0 N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0 -- No --> E_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK
recorded in positions 3-6 of
T1-358-ACK field, the current
machine century should be recorded
in positions 1-2 of T1-358-ACK
field, and the current machine time
first 4 digits should be recorded in
positions 9-4 of T1-358-ACK field"]:::main N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0 -- Yes --> N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0_action N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0_action --> E_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK S_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK --> N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0 N_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK_Node0 -- No --> E_UpdateSTypeManifestTimestampRecordCurrentDateTimeinT1358ACK
File: GCX015.cbl
GIVEN:
A manifest acknowledgment is being processed and the T1 administrative table is available
WHEN:
The manifest type code equals 'S'
THEN:
The current machine date should be recorded in positions 3-6 of T1-358-ACK field, the current machine century should be recorded in positions 1-2 of T1-358-ACK field, and the current machine time (first 4 digits) should be recorded in positions 9-4 of T1-358-ACK field
β Consolidated Acceptance Criteria
- The timestamp update process is complete → the updated T1 administrative table segment should be saved using the REPL function code to persist the changes
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SaveUpdatedAdministrativeTable(["Start Step"])
E_SaveUpdatedAdministrativeTable(["End Step"])
N_SaveUpdatedAdministrativeTable_Node0{"The timestamp update process is
complete"}:::decision N_SaveUpdatedAdministrativeTable_Node0_action["The updated T1 administrative table
segment should be saved using the
REPL function code to persist the
changes"]:::main N_SaveUpdatedAdministrativeTable_Node0 -- Yes --> N_SaveUpdatedAdministrativeTable_Node0_action N_SaveUpdatedAdministrativeTable_Node0_action --> E_SaveUpdatedAdministrativeTable S_SaveUpdatedAdministrativeTable --> N_SaveUpdatedAdministrativeTable_Node0 N_SaveUpdatedAdministrativeTable_Node0 -- No --> E_SaveUpdatedAdministrativeTable
complete"}:::decision N_SaveUpdatedAdministrativeTable_Node0_action["The updated T1 administrative table
segment should be saved using the
REPL function code to persist the
changes"]:::main N_SaveUpdatedAdministrativeTable_Node0 -- Yes --> N_SaveUpdatedAdministrativeTable_Node0_action N_SaveUpdatedAdministrativeTable_Node0_action --> E_SaveUpdatedAdministrativeTable S_SaveUpdatedAdministrativeTable --> N_SaveUpdatedAdministrativeTable_Node0 N_SaveUpdatedAdministrativeTable_Node0 -- No --> E_SaveUpdatedAdministrativeTable
File: GCX015.cbl
GIVEN:
Acknowledgment timestamps have been updated in the T1 administrative table segment
WHEN:
The timestamp update process is complete
THEN:
The updated T1 administrative table segment should be saved using the REPL function code to persist the changes
β Consolidated Acceptance Criteria
- The system attempts to retrieve the T1 table segment → the system must verify the table is found and accessible for updates
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetT1TableSegment(["Start Step"])
E_GetT1TableSegment(["End Step"])
N_GetT1TableSegment_Node0{"The system attempts to retrieve the
T1 table segment"}:::decision N_GetT1TableSegment_Node0_action["The system must verify the table is
found and accessible for updates"]:::main N_GetT1TableSegment_Node0 -- Yes --> N_GetT1TableSegment_Node0_action N_GetT1TableSegment_Node0_action --> E_GetT1TableSegment S_GetT1TableSegment --> N_GetT1TableSegment_Node0 N_GetT1TableSegment_Node0 -- No --> E_GetT1TableSegment
T1 table segment"}:::decision N_GetT1TableSegment_Node0_action["The system must verify the table is
found and accessible for updates"]:::main N_GetT1TableSegment_Node0 -- Yes --> N_GetT1TableSegment_Node0_action N_GetT1TableSegment_Node0_action --> E_GetT1TableSegment S_GetT1TableSegment --> N_GetT1TableSegment_Node0 N_GetT1TableSegment_Node0 -- No --> E_GetT1TableSegment
File: GCX015.cbl
GIVEN:
A request to update administrative table T1 is initiated
WHEN:
The system attempts to retrieve the T1 table segment
THEN:
- The system must verify the table is found
- Accessible for updates
β Consolidated Acceptance Criteria
- If the manifest type code from the message → the system must identify whether it is P-type, H-type, or S-type manifest to route to appropriate timestamp update
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ManifestType(["Start Step"])
E_ManifestType(["End Step"])
N_ManifestType_Node0{"The system evaluates the manifest
type code from the message"}:::decision N_ManifestType_Node0_action["The system must identify whether it
is P-type, H-type, or S-type
manifest to route to appropriate
timestamp update"]:::main N_ManifestType_Node0 -- Yes --> N_ManifestType_Node0_action N_ManifestType_Node0_action --> E_ManifestType S_ManifestType --> N_ManifestType_Node0 N_ManifestType_Node0 -- No --> E_ManifestType
type code from the message"}:::decision N_ManifestType_Node0_action["The system must identify whether it
is P-type, H-type, or S-type
manifest to route to appropriate
timestamp update"]:::main N_ManifestType_Node0 -- Yes --> N_ManifestType_Node0_action N_ManifestType_Node0_action --> E_ManifestType S_ManifestType --> N_ManifestType_Node0 N_ManifestType_Node0 -- No --> E_ManifestType
File: GCX015.cbl
GIVEN:
A manifest message is being processed for administrative table updates
WHEN:
The system evaluates the manifest type code from the message
THEN:
The system must identify whether it is P-type, H-type, or S-type manifest to route to appropriate timestamp update
β Consolidated Acceptance Criteria
- The system updates the T1 administrative table → the system must set the T1-309-ACK field with the current system date and time (century, date, and time components)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdatePTypeManifestTimestamp(["Start Step"])
E_UpdatePTypeManifestTimestamp(["End Step"])
N_UpdatePTypeManifestTimestamp_Node0{"The system updates the T1
administrative table"}:::decision N_UpdatePTypeManifestTimestamp_Node0_action["The system must set the T1-309-ACK
field with the current system date
and time century, date, and time
components"]:::main N_UpdatePTypeManifestTimestamp_Node0 -- Yes --> N_UpdatePTypeManifestTimestamp_Node0_action N_UpdatePTypeManifestTimestamp_Node0_action --> E_UpdatePTypeManifestTimestamp S_UpdatePTypeManifestTimestamp --> N_UpdatePTypeManifestTimestamp_Node0 N_UpdatePTypeManifestTimestamp_Node0 -- No --> E_UpdatePTypeManifestTimestamp
administrative table"}:::decision N_UpdatePTypeManifestTimestamp_Node0_action["The system must set the T1-309-ACK
field with the current system date
and time century, date, and time
components"]:::main N_UpdatePTypeManifestTimestamp_Node0 -- Yes --> N_UpdatePTypeManifestTimestamp_Node0_action N_UpdatePTypeManifestTimestamp_Node0_action --> E_UpdatePTypeManifestTimestamp S_UpdatePTypeManifestTimestamp --> N_UpdatePTypeManifestTimestamp_Node0 N_UpdatePTypeManifestTimestamp_Node0 -- No --> E_UpdatePTypeManifestTimestamp
File: GCX015.cbl
GIVEN:
A P-type manifest message has been processed successfully
WHEN:
The system updates the T1 administrative table
THEN:
- The system must set the t1-309-ack field with the current system date
- Time (century, date, and time components)
β Consolidated Acceptance Criteria
- The system updates the T1 administrative table → the system must set the T1-353-ACK field with the current system date and time (century, date, and time components)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdateHTypeManifestTimestamp(["Start Step"])
E_UpdateHTypeManifestTimestamp(["End Step"])
N_UpdateHTypeManifestTimestamp_Node0{"The system updates the T1
administrative table"}:::decision N_UpdateHTypeManifestTimestamp_Node0_action["The system must set the T1-353-ACK
field with the current system date
and time century, date, and time
components"]:::main N_UpdateHTypeManifestTimestamp_Node0 -- Yes --> N_UpdateHTypeManifestTimestamp_Node0_action N_UpdateHTypeManifestTimestamp_Node0_action --> E_UpdateHTypeManifestTimestamp S_UpdateHTypeManifestTimestamp --> N_UpdateHTypeManifestTimestamp_Node0 N_UpdateHTypeManifestTimestamp_Node0 -- No --> E_UpdateHTypeManifestTimestamp
administrative table"}:::decision N_UpdateHTypeManifestTimestamp_Node0_action["The system must set the T1-353-ACK
field with the current system date
and time century, date, and time
components"]:::main N_UpdateHTypeManifestTimestamp_Node0 -- Yes --> N_UpdateHTypeManifestTimestamp_Node0_action N_UpdateHTypeManifestTimestamp_Node0_action --> E_UpdateHTypeManifestTimestamp S_UpdateHTypeManifestTimestamp --> N_UpdateHTypeManifestTimestamp_Node0 N_UpdateHTypeManifestTimestamp_Node0 -- No --> E_UpdateHTypeManifestTimestamp
File: GCX015.cbl
GIVEN:
An H-type manifest message has been processed successfully
WHEN:
The system updates the T1 administrative table
THEN:
- The system must set the t1-353-ack field with the current system date
- Time (century, date, and time components)
β Consolidated Acceptance Criteria
- The system updates the T1 administrative table → the system must set the T1-358-ACK field with the current system date and time (century, date, and time components)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UpdateSTypeManifestTimestamp(["Start Step"])
E_UpdateSTypeManifestTimestamp(["End Step"])
N_UpdateSTypeManifestTimestamp_Node0{"The system updates the T1
administrative table"}:::decision N_UpdateSTypeManifestTimestamp_Node0_action["The system must set the T1-358-ACK
field with the current system date
and time century, date, and time
components"]:::main N_UpdateSTypeManifestTimestamp_Node0 -- Yes --> N_UpdateSTypeManifestTimestamp_Node0_action N_UpdateSTypeManifestTimestamp_Node0_action --> E_UpdateSTypeManifestTimestamp S_UpdateSTypeManifestTimestamp --> N_UpdateSTypeManifestTimestamp_Node0 N_UpdateSTypeManifestTimestamp_Node0 -- No --> E_UpdateSTypeManifestTimestamp
administrative table"}:::decision N_UpdateSTypeManifestTimestamp_Node0_action["The system must set the T1-358-ACK
field with the current system date
and time century, date, and time
components"]:::main N_UpdateSTypeManifestTimestamp_Node0 -- Yes --> N_UpdateSTypeManifestTimestamp_Node0_action N_UpdateSTypeManifestTimestamp_Node0_action --> E_UpdateSTypeManifestTimestamp S_UpdateSTypeManifestTimestamp --> N_UpdateSTypeManifestTimestamp_Node0 N_UpdateSTypeManifestTimestamp_Node0 -- No --> E_UpdateSTypeManifestTimestamp
File: GCX015.cbl
GIVEN:
An S-type manifest message has been processed successfully
WHEN:
The system updates the T1 administrative table
THEN:
- The system must set the t1-358-ack field with the current system date
- Time (century, date, and time components)
β Consolidated Acceptance Criteria
- The system completes the timestamp update process → the system must save the modified T1 table segment back to the administrative table storage
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SaveUpdatedT1TableSegment(["Start Step"])
E_SaveUpdatedT1TableSegment(["End Step"])
N_SaveUpdatedT1TableSegment_Node0{"The system completes the timestamp
update process"}:::decision N_SaveUpdatedT1TableSegment_Node0_action["The system must save the modified
T1 table segment back to the
administrative table storage"]:::main N_SaveUpdatedT1TableSegment_Node0 -- Yes --> N_SaveUpdatedT1TableSegment_Node0_action N_SaveUpdatedT1TableSegment_Node0_action --> E_SaveUpdatedT1TableSegment S_SaveUpdatedT1TableSegment --> N_SaveUpdatedT1TableSegment_Node0 N_SaveUpdatedT1TableSegment_Node0 -- No --> E_SaveUpdatedT1TableSegment
update process"}:::decision N_SaveUpdatedT1TableSegment_Node0_action["The system must save the modified
T1 table segment back to the
administrative table storage"]:::main N_SaveUpdatedT1TableSegment_Node0 -- Yes --> N_SaveUpdatedT1TableSegment_Node0_action N_SaveUpdatedT1TableSegment_Node0_action --> E_SaveUpdatedT1TableSegment S_SaveUpdatedT1TableSegment --> N_SaveUpdatedT1TableSegment_Node0 N_SaveUpdatedT1TableSegment_Node0 -- No --> E_SaveUpdatedT1TableSegment
File: GCX015.cbl
GIVEN:
The T1 administrative table segment has been updated with manifest acknowledgment timestamps
WHEN:
The system completes the timestamp update process
THEN:
The system must save the modified T1 table segment back to the administrative table storage
β Consolidated Acceptance Criteria
- The system needs to send error notifications → prepare error report message with processing results and error information for transmission to Merlin system
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_PrepareErrorReportMessage(["Start Step"])
E_PrepareErrorReportMessage(["End Step"])
N_PrepareErrorReportMessage_Node0{"The system needs to send error
notifications"}:::decision N_PrepareErrorReportMessage_Node0_action["Prepare error report message with
processing results and error
information for transmission to
Merlin system"]:::exclusion N_PrepareErrorReportMessage_Node0 -- Yes -->|Alternative| N_PrepareErrorReportMessage_Node0_action N_PrepareErrorReportMessage_Node0_action --> E_PrepareErrorReportMessage S_PrepareErrorReportMessage --> N_PrepareErrorReportMessage_Node0 N_PrepareErrorReportMessage_Node0 -- No --> E_PrepareErrorReportMessage
notifications"}:::decision N_PrepareErrorReportMessage_Node0_action["Prepare error report message with
processing results and error
information for transmission to
Merlin system"]:::exclusion N_PrepareErrorReportMessage_Node0 -- Yes -->|Alternative| N_PrepareErrorReportMessage_Node0_action N_PrepareErrorReportMessage_Node0_action --> E_PrepareErrorReportMessage S_PrepareErrorReportMessage --> N_PrepareErrorReportMessage_Node0 N_PrepareErrorReportMessage_Node0 -- No --> E_PrepareErrorReportMessage
File: GCX015.cbl
GIVEN:
An error condition has been detected during message processing
WHEN:
The system needs to send error notifications
THEN:
- Prepare error report message with processing results
- Error information for transmission to merlin system
β Consolidated Acceptance Criteria
- Setting up primary Merlin recipients → set from user code to 'OM01247', set primary recipient to 'OM01247', and configure subject line with Merlin subject information
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetPrimaryMerlinRecipients(["Start Step"])
E_SetPrimaryMerlinRecipients(["End Step"])
N_SetPrimaryMerlinRecipients_Node0{"Setting up primary Merlin
recipients"}:::decision N_SetPrimaryMerlinRecipients_Node0_action["Set from user code to OM01247 , set
primary recipient to OM01247 , and
configure subject line with Merlin
subject information"]:::main N_SetPrimaryMerlinRecipients_Node0 -- Yes --> N_SetPrimaryMerlinRecipients_Node0_action N_SetPrimaryMerlinRecipients_Node0_action --> E_SetPrimaryMerlinRecipients S_SetPrimaryMerlinRecipients --> N_SetPrimaryMerlinRecipients_Node0 N_SetPrimaryMerlinRecipients_Node0 -- No --> E_SetPrimaryMerlinRecipients
recipients"}:::decision N_SetPrimaryMerlinRecipients_Node0_action["Set from user code to OM01247 , set
primary recipient to OM01247 , and
configure subject line with Merlin
subject information"]:::main N_SetPrimaryMerlinRecipients_Node0 -- Yes --> N_SetPrimaryMerlinRecipients_Node0_action N_SetPrimaryMerlinRecipients_Node0_action --> E_SetPrimaryMerlinRecipients S_SetPrimaryMerlinRecipients --> N_SetPrimaryMerlinRecipients_Node0 N_SetPrimaryMerlinRecipients_Node0 -- No --> E_SetPrimaryMerlinRecipients
File: GCX015.cbl
GIVEN:
Error report message is prepared for transmission
WHEN:
Setting up primary Merlin recipients
THEN:
Set from user code to 'OM01247', set primary recipient to 'OM01247', and configure subject line with Merlin subject information
β Consolidated Acceptance Criteria
- Transmitting to primary Merlin destination → call EMCSEND2 service with configured parameters including from user code, destination, recipients, subject, and error report content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendtoPrimaryMerlinDestination(["Start Step"])
E_SendtoPrimaryMerlinDestination(["End Step"])
N_SendtoPrimaryMerlinDestination_Node0{"Transmitting to primary Merlin
destination"}:::decision N_SendtoPrimaryMerlinDestination_Node0_action["Call EMCSEND2 service with
configured parameters including from
user code, destination, recipients,
subject, and error report content"]:::main N_SendtoPrimaryMerlinDestination_Node0 -- Yes --> N_SendtoPrimaryMerlinDestination_Node0_action N_SendtoPrimaryMerlinDestination_Node0_action --> E_SendtoPrimaryMerlinDestination S_SendtoPrimaryMerlinDestination --> N_SendtoPrimaryMerlinDestination_Node0 N_SendtoPrimaryMerlinDestination_Node0 -- No --> E_SendtoPrimaryMerlinDestination
destination"}:::decision N_SendtoPrimaryMerlinDestination_Node0_action["Call EMCSEND2 service with
configured parameters including from
user code, destination, recipients,
subject, and error report content"]:::main N_SendtoPrimaryMerlinDestination_Node0 -- Yes --> N_SendtoPrimaryMerlinDestination_Node0_action N_SendtoPrimaryMerlinDestination_Node0_action --> E_SendtoPrimaryMerlinDestination S_SendtoPrimaryMerlinDestination --> N_SendtoPrimaryMerlinDestination_Node0 N_SendtoPrimaryMerlinDestination_Node0 -- No --> E_SendtoPrimaryMerlinDestination
File: GCX015.cbl
GIVEN:
Primary Merlin recipients are configured and error report is prepared
WHEN:
Transmitting to primary Merlin destination
THEN:
Call EMCSEND2 service with configured parameters including from user code, destination, recipients, subject, and error report content
β Consolidated Acceptance Criteria
- Checking transmission success status → if EMI-NO-ERRORS condition is true, consider transmission successful, otherwise handle as failure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendSuccessful(["Start Step"])
E_SendSuccessful(["End Step"])
N_SendSuccessful_Node0{"Checking transmission success
status"}:::decision N_SendSuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider transmission successful,
otherwise handle as failure"]:::main N_SendSuccessful_Node0 -- Yes --> N_SendSuccessful_Node0_action N_SendSuccessful_Node0_action --> E_SendSuccessful S_SendSuccessful --> N_SendSuccessful_Node0 N_SendSuccessful_Node0 -- No --> E_SendSuccessful
status"}:::decision N_SendSuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider transmission successful,
otherwise handle as failure"]:::main N_SendSuccessful_Node0 -- Yes --> N_SendSuccessful_Node0_action N_SendSuccessful_Node0_action --> E_SendSuccessful S_SendSuccessful --> N_SendSuccessful_Node0 N_SendSuccessful_Node0 -- No --> E_SendSuccessful
File: GCX015.cbl
GIVEN:
Primary Merlin transmission has been attempted
WHEN:
Checking transmission success status
THEN:
If EMI-NO-ERRORS condition is true, consider transmission successful, otherwise handle as failure
β Consolidated Acceptance Criteria
- Handling send failure conditions → if EMI-FROM-NOT-FOUND, set error message 'EMI - INVALID MERLIN FROM' and perform abend; If EMI-TO-OR-COPY-NOT-FOUND, set error message 'EMI - INVALID MERLIN TO OR COPY' and perform abend; If EMI-FILENAME-INVALID, set error message 'EMI - INVALID MERLIN FILENAME' and perform abend
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleSendFailure(["Start Step"])
E_HandleSendFailure(["End Step"])
N_HandleSendFailure_Node0{"Handling send failure conditions"}:::decision
N_HandleSendFailure_Node0_action["If EMI-FROM-NOT-FOUND, set error
message EMI - INVALID MERLIN FROM
and perform abend If
EMI-TO-OR-COPY-NOT-FOUND, set error
message EMI - INVALID MERLIN TO OR
COPY and perform abend If
EMI-FILENAME-INVALID, set error
message EMI - INVALID MERLIN
FILENAME and perform abend"]:::exclusion N_HandleSendFailure_Node0 -- Yes -->|Alternative| N_HandleSendFailure_Node0_action N_HandleSendFailure_Node0_action --> E_HandleSendFailure S_HandleSendFailure --> N_HandleSendFailure_Node0 N_HandleSendFailure_Node0 -- No --> E_HandleSendFailure
message EMI - INVALID MERLIN FROM
and perform abend If
EMI-TO-OR-COPY-NOT-FOUND, set error
message EMI - INVALID MERLIN TO OR
COPY and perform abend If
EMI-FILENAME-INVALID, set error
message EMI - INVALID MERLIN
FILENAME and perform abend"]:::exclusion N_HandleSendFailure_Node0 -- Yes -->|Alternative| N_HandleSendFailure_Node0_action N_HandleSendFailure_Node0_action --> E_HandleSendFailure S_HandleSendFailure --> N_HandleSendFailure_Node0 N_HandleSendFailure_Node0 -- No --> E_HandleSendFailure
File: GCX015.cbl
GIVEN:
Primary Merlin transmission has failed
WHEN:
Handling send failure conditions
THEN:
If EMI-FROM-NOT-FOUND, set error message 'EMI - INVALID MERLIN FROM' and perform abend; If EMI-TO-OR-COPY-NOT-FOUND, set error message 'EMI - INVALID MERLIN TO OR COPY' and perform abend; If EMI-FILENAME-INVALID, set error message 'EMI - INVALID MERLIN FILENAME' and perform abend
β Consolidated Acceptance Criteria
- Setting up administrative recipients for secondary transmission → clear existing recipient codes, set primary administrative recipient to GCSTBRT-AD-DC-P-MERLIN-1 value, and set copy recipient to GCSTBRT-AD-DC-P-MERLIN-5 value
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetAdministrativeRecipients(["Start Step"])
E_SetAdministrativeRecipients(["End Step"])
N_SetAdministrativeRecipients_Node0{"Setting up administrative
recipients for secondary
transmission"}:::decision N_SetAdministrativeRecipients_Node0_action["Clear existing recipient codes, set
primary administrative recipient to
GCSTBRT-AD-DC-P-MERLIN-1 value, and
set copy recipient to
GCSTBRT-AD-DC-P-MERLIN-5 value"]:::main N_SetAdministrativeRecipients_Node0 -- Yes --> N_SetAdministrativeRecipients_Node0_action N_SetAdministrativeRecipients_Node0_action --> E_SetAdministrativeRecipients S_SetAdministrativeRecipients --> N_SetAdministrativeRecipients_Node0 N_SetAdministrativeRecipients_Node0 -- No --> E_SetAdministrativeRecipients
recipients for secondary
transmission"}:::decision N_SetAdministrativeRecipients_Node0_action["Clear existing recipient codes, set
primary administrative recipient to
GCSTBRT-AD-DC-P-MERLIN-1 value, and
set copy recipient to
GCSTBRT-AD-DC-P-MERLIN-5 value"]:::main N_SetAdministrativeRecipients_Node0 -- Yes --> N_SetAdministrativeRecipients_Node0_action N_SetAdministrativeRecipients_Node0_action --> E_SetAdministrativeRecipients S_SetAdministrativeRecipients --> N_SetAdministrativeRecipients_Node0 N_SetAdministrativeRecipients_Node0 -- No --> E_SetAdministrativeRecipients
File: GCX015.cbl
GIVEN:
Primary Merlin transmission processing is complete
WHEN:
Setting up administrative recipients for secondary transmission
THEN:
Clear existing recipient codes, set primary administrative recipient to GCSTBRT-AD-DC-P-MERLIN-1 value, and set copy recipient to GCSTBRT-AD-DC-P-MERLIN-5 value
β Consolidated Acceptance Criteria
- Transmitting to administrative Merlin destination → call EMCSEND2 service with administrative destination filename (EMI-DESTINATION-FILENAME2) and configured administrative recipients
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendtoAdministrativeDestination(["Start Step"])
E_SendtoAdministrativeDestination(["End Step"])
N_SendtoAdministrativeDestination_Node0{"Transmitting to administrative
Merlin destination"}:::decision N_SendtoAdministrativeDestination_Node0_action["Call EMCSEND2 service with
administrative destination filename
EMI-DESTINATION-FILENAME2 and
configured administrative recipients"]:::main N_SendtoAdministrativeDestination_Node0 -- Yes --> N_SendtoAdministrativeDestination_Node0_action N_SendtoAdministrativeDestination_Node0_action --> E_SendtoAdministrativeDestination S_SendtoAdministrativeDestination --> N_SendtoAdministrativeDestination_Node0 N_SendtoAdministrativeDestination_Node0 -- No --> E_SendtoAdministrativeDestination
Merlin destination"}:::decision N_SendtoAdministrativeDestination_Node0_action["Call EMCSEND2 service with
administrative destination filename
EMI-DESTINATION-FILENAME2 and
configured administrative recipients"]:::main N_SendtoAdministrativeDestination_Node0 -- Yes --> N_SendtoAdministrativeDestination_Node0_action N_SendtoAdministrativeDestination_Node0_action --> E_SendtoAdministrativeDestination S_SendtoAdministrativeDestination --> N_SendtoAdministrativeDestination_Node0 N_SendtoAdministrativeDestination_Node0 -- No --> E_SendtoAdministrativeDestination
File: GCX015.cbl
GIVEN:
Administrative recipients are configured
WHEN:
Transmitting to administrative Merlin destination
THEN:
Call EMCSEND2 service with administrative destination filename (EMI-DESTINATION-FILENAME2) and configured administrative recipients
β Consolidated Acceptance Criteria
- Checking administrative transmission success status → if EMI-NO-ERRORS condition is true, consider administrative transmission successful, otherwise handle as failure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AdminSendSuccessful(["Start Step"])
E_AdminSendSuccessful(["End Step"])
N_AdminSendSuccessful_Node0{"Checking administrative
transmission success status"}:::decision N_AdminSendSuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider administrative transmission
successful, otherwise handle as
failure"]:::main N_AdminSendSuccessful_Node0 -- Yes --> N_AdminSendSuccessful_Node0_action N_AdminSendSuccessful_Node0_action --> E_AdminSendSuccessful S_AdminSendSuccessful --> N_AdminSendSuccessful_Node0 N_AdminSendSuccessful_Node0 -- No --> E_AdminSendSuccessful
transmission success status"}:::decision N_AdminSendSuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider administrative transmission
successful, otherwise handle as
failure"]:::main N_AdminSendSuccessful_Node0 -- Yes --> N_AdminSendSuccessful_Node0_action N_AdminSendSuccessful_Node0_action --> E_AdminSendSuccessful S_AdminSendSuccessful --> N_AdminSendSuccessful_Node0 N_AdminSendSuccessful_Node0 -- No --> E_AdminSendSuccessful
File: GCX015.cbl
GIVEN:
Administrative Merlin transmission has been attempted
WHEN:
Checking administrative transmission success status
THEN:
If EMI-NO-ERRORS condition is true, consider administrative transmission successful, otherwise handle as failure
β Consolidated Acceptance Criteria
- Handling administrative send failure conditions → if EMI-FROM-NOT-FOUND, set error message 'EMI - INVALID MERLIN FROM' and perform abend; If EMI-TO-OR-COPY-NOT-FOUND, set error message 'EMI - INVALID MERLIN TO OR COPY' and perform abend; If EMI-FILENAME-INVALID, set error message 'EMI - INVALID MERLIN FILENAME' and perform abend
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_RetrywithFallbackRecipients(["Start Step"])
E_RetrywithFallbackRecipients(["End Step"])
N_RetrywithFallbackRecipients_Node0{"Handling administrative send
failure conditions"}:::decision N_RetrywithFallbackRecipients_Node0_action["If EMI-FROM-NOT-FOUND, set error
message EMI - INVALID MERLIN FROM
and perform abend If
EMI-TO-OR-COPY-NOT-FOUND, set error
message EMI - INVALID MERLIN TO OR
COPY and perform abend If
EMI-FILENAME-INVALID, set error
message EMI - INVALID MERLIN
FILENAME and perform abend"]:::exclusion N_RetrywithFallbackRecipients_Node0 -- Yes -->|Alternative| N_RetrywithFallbackRecipients_Node0_action N_RetrywithFallbackRecipients_Node0_action --> E_RetrywithFallbackRecipients S_RetrywithFallbackRecipients --> N_RetrywithFallbackRecipients_Node0 N_RetrywithFallbackRecipients_Node0 -- No --> E_RetrywithFallbackRecipients
failure conditions"}:::decision N_RetrywithFallbackRecipients_Node0_action["If EMI-FROM-NOT-FOUND, set error
message EMI - INVALID MERLIN FROM
and perform abend If
EMI-TO-OR-COPY-NOT-FOUND, set error
message EMI - INVALID MERLIN TO OR
COPY and perform abend If
EMI-FILENAME-INVALID, set error
message EMI - INVALID MERLIN
FILENAME and perform abend"]:::exclusion N_RetrywithFallbackRecipients_Node0 -- Yes -->|Alternative| N_RetrywithFallbackRecipients_Node0_action N_RetrywithFallbackRecipients_Node0_action --> E_RetrywithFallbackRecipients S_RetrywithFallbackRecipients --> N_RetrywithFallbackRecipients_Node0 N_RetrywithFallbackRecipients_Node0 -- No --> E_RetrywithFallbackRecipients
File: GCX015.cbl
GIVEN:
Administrative Merlin transmission has failed
WHEN:
Handling administrative send failure conditions
THEN:
If EMI-FROM-NOT-FOUND, set error message 'EMI - INVALID MERLIN FROM' and perform abend; If EMI-TO-OR-COPY-NOT-FOUND, set error message 'EMI - INVALID MERLIN TO OR COPY' and perform abend; If EMI-FILENAME-INVALID, set error message 'EMI - INVALID MERLIN FILENAME' and perform abend
β Consolidated Acceptance Criteria
- Preparing AEI status message → format subject line with 'TRAIN: ' followed by train ID and ' STATUS: ' followed by current status, then prepare message for Merlin transmission
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_PrepareAEIStatusMessage(["Start Step"])
E_PrepareAEIStatusMessage(["End Step"])
N_PrepareAEIStatusMessage_Node0{"Preparing AEI status message"}:::decision
N_PrepareAEIStatusMessage_Node0_action["Format subject line with TRAIN:
followed by train ID and STATUS:
followed by current status, then
prepare message for Merlin
transmission"]:::main N_PrepareAEIStatusMessage_Node0 -- Yes --> N_PrepareAEIStatusMessage_Node0_action N_PrepareAEIStatusMessage_Node0_action --> E_PrepareAEIStatusMessage S_PrepareAEIStatusMessage --> N_PrepareAEIStatusMessage_Node0 N_PrepareAEIStatusMessage_Node0 -- No --> E_PrepareAEIStatusMessage
followed by train ID and STATUS:
followed by current status, then
prepare message for Merlin
transmission"]:::main N_PrepareAEIStatusMessage_Node0 -- Yes --> N_PrepareAEIStatusMessage_Node0_action N_PrepareAEIStatusMessage_Node0_action --> E_PrepareAEIStatusMessage S_PrepareAEIStatusMessage --> N_PrepareAEIStatusMessage_Node0 N_PrepareAEIStatusMessage_Node0 -- No --> E_PrepareAEIStatusMessage
File: GCX015.cbl
GIVEN:
Train processing is complete and AEI send flag is set
WHEN:
Preparing AEI status message
THEN:
Format subject line with 'TRAIN: ' followed by train ID and ' STATUS: ' followed by current status, then prepare message for Merlin transmission
β Consolidated Acceptance Criteria
- Transmitting AEI status to Merlin → call EMCSEND3 service with AEI recipients, formatted subject line, and message content for transmission
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendAEIStatustoMerlin(["Start Step"])
E_SendAEIStatustoMerlin(["End Step"])
N_SendAEIStatustoMerlin_Node0{"Transmitting AEI status to Merlin"}:::decision
N_SendAEIStatustoMerlin_Node0_action["Call EMCSEND3 service with AEI
recipients, formatted subject line,
and message content for transmission"]:::main N_SendAEIStatustoMerlin_Node0 -- Yes --> N_SendAEIStatustoMerlin_Node0_action N_SendAEIStatustoMerlin_Node0_action --> E_SendAEIStatustoMerlin S_SendAEIStatustoMerlin --> N_SendAEIStatustoMerlin_Node0 N_SendAEIStatustoMerlin_Node0 -- No --> E_SendAEIStatustoMerlin
recipients, formatted subject line,
and message content for transmission"]:::main N_SendAEIStatustoMerlin_Node0 -- Yes --> N_SendAEIStatustoMerlin_Node0_action N_SendAEIStatustoMerlin_Node0_action --> E_SendAEIStatustoMerlin S_SendAEIStatustoMerlin --> N_SendAEIStatustoMerlin_Node0 N_SendAEIStatustoMerlin_Node0 -- No --> E_SendAEIStatustoMerlin
File: GCX015.cbl
GIVEN:
AEI Merlin recipients are retrieved and status message is prepared
WHEN:
Transmitting AEI status to Merlin
THEN:
Call EMCSEND3 service with AEI recipients, formatted subject line, and message content for transmission
β Consolidated Acceptance Criteria
- Checking AEI transmission success status → if EMI-NO-ERRORS condition is true, consider AEI transmission successful, otherwise handle as failure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AEISendSuccessful(["Start Step"])
E_AEISendSuccessful(["End Step"])
N_AEISendSuccessful_Node0{"Checking AEI transmission success
status"}:::decision N_AEISendSuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider AEI transmission
successful, otherwise handle as
failure"]:::main N_AEISendSuccessful_Node0 -- Yes --> N_AEISendSuccessful_Node0_action N_AEISendSuccessful_Node0_action --> E_AEISendSuccessful S_AEISendSuccessful --> N_AEISendSuccessful_Node0 N_AEISendSuccessful_Node0 -- No --> E_AEISendSuccessful
status"}:::decision N_AEISendSuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider AEI transmission
successful, otherwise handle as
failure"]:::main N_AEISendSuccessful_Node0 -- Yes --> N_AEISendSuccessful_Node0_action N_AEISendSuccessful_Node0_action --> E_AEISendSuccessful S_AEISendSuccessful --> N_AEISendSuccessful_Node0 N_AEISendSuccessful_Node0 -- No --> E_AEISendSuccessful
File: GCX015.cbl
GIVEN:
AEI status transmission has been attempted
WHEN:
Checking AEI transmission success status
THEN:
If EMI-NO-ERRORS condition is true, consider AEI transmission successful, otherwise handle as failure
β Consolidated Acceptance Criteria
- Retrying AEI send with fallback recipients → clear existing recipients, set fallback recipients to 'AEI9999' and 'OM01247', retry EMCSEND3 call with fallback configuration
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_RetryAEISendwithFallbacks(["Start Step"])
E_RetryAEISendwithFallbacks(["End Step"])
N_RetryAEISendwithFallbacks_Node0{"Retrying AEI send with fallback
recipients"}:::decision N_RetryAEISendwithFallbacks_Node0_action["Clear existing recipients, set
fallback recipients to AEI9999 and
OM01247 , retry EMCSEND3 call with
fallback configuration"]:::main N_RetryAEISendwithFallbacks_Node0 -- Yes --> N_RetryAEISendwithFallbacks_Node0_action N_RetryAEISendwithFallbacks_Node0_action --> E_RetryAEISendwithFallbacks S_RetryAEISendwithFallbacks --> N_RetryAEISendwithFallbacks_Node0 N_RetryAEISendwithFallbacks_Node0 -- No --> E_RetryAEISendwithFallbacks
recipients"}:::decision N_RetryAEISendwithFallbacks_Node0_action["Clear existing recipients, set
fallback recipients to AEI9999 and
OM01247 , retry EMCSEND3 call with
fallback configuration"]:::main N_RetryAEISendwithFallbacks_Node0 -- Yes --> N_RetryAEISendwithFallbacks_Node0_action N_RetryAEISendwithFallbacks_Node0_action --> E_RetryAEISendwithFallbacks S_RetryAEISendwithFallbacks --> N_RetryAEISendwithFallbacks_Node0 N_RetryAEISendwithFallbacks_Node0 -- No --> E_RetryAEISendwithFallbacks
File: GCX015.cbl
GIVEN:
AEI status transmission has failed
WHEN:
Retrying AEI send with fallback recipients
THEN:
Clear existing recipients, set fallback recipients to 'AEI9999' and 'OM01247', retry EMCSEND3 call with fallback configuration
β Consolidated Acceptance Criteria
- Checking AEI retry success status → if EMI-NO-ERRORS condition is true, consider retry successful; If still failing, set error message 'SEND TO FILE OF OM01247 FAILED' and call CERR for error handling
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_AEIRetrySuccessful(["Start Step"])
E_AEIRetrySuccessful(["End Step"])
N_AEIRetrySuccessful_Node0{"Checking AEI retry success status"}:::decision
N_AEIRetrySuccessful_Node0_action["If EMI-NO-ERRORS condition is true,
consider retry successful If still
failing, set error message SEND TO
FILE OF OM01247 FAILED and call CERR
for error handling"]:::main N_AEIRetrySuccessful_Node0 -- Yes --> N_AEIRetrySuccessful_Node0_action N_AEIRetrySuccessful_Node0_action --> E_AEIRetrySuccessful S_AEIRetrySuccessful --> N_AEIRetrySuccessful_Node0 N_AEIRetrySuccessful_Node0 -- No --> E_AEIRetrySuccessful
consider retry successful If still
failing, set error message SEND TO
FILE OF OM01247 FAILED and call CERR
for error handling"]:::main N_AEIRetrySuccessful_Node0 -- Yes --> N_AEIRetrySuccessful_Node0_action N_AEIRetrySuccessful_Node0_action --> E_AEIRetrySuccessful S_AEIRetrySuccessful --> N_AEIRetrySuccessful_Node0 N_AEIRetrySuccessful_Node0 -- No --> E_AEIRetrySuccessful
File: GCX015.cbl
GIVEN:
AEI retry transmission has been attempted with fallback recipients
WHEN:
Checking AEI retry success status
THEN:
If EMI-NO-ERRORS condition is true, consider retry successful; If still failing, set error message 'SEND TO FILE OF OM01247 FAILED' and call CERR for error handling
β Consolidated Acceptance Criteria
- Setting up primary transmission parameters → the from user code should be set to OM01247 for sender identification
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetMerlinFromUserCodetoOM01247(["Start Step"])
E_SetMerlinFromUserCodetoOM01247(["End Step"])
N_SetMerlinFromUserCodetoOM01247_Node0{"Setting up primary transmission
parameters"}:::decision N_SetMerlinFromUserCodetoOM01247_Node0_action["The from user code should be set to
OM01247 for sender identification"]:::main N_SetMerlinFromUserCodetoOM01247_Node0 -- Yes --> N_SetMerlinFromUserCodetoOM01247_Node0_action N_SetMerlinFromUserCodetoOM01247_Node0_action --> E_SetMerlinFromUserCodetoOM01247 S_SetMerlinFromUserCodetoOM01247 --> N_SetMerlinFromUserCodetoOM01247_Node0 N_SetMerlinFromUserCodetoOM01247_Node0 -- No --> E_SetMerlinFromUserCodetoOM01247
parameters"}:::decision N_SetMerlinFromUserCodetoOM01247_Node0_action["The from user code should be set to
OM01247 for sender identification"]:::main N_SetMerlinFromUserCodetoOM01247_Node0 -- Yes --> N_SetMerlinFromUserCodetoOM01247_Node0_action N_SetMerlinFromUserCodetoOM01247_Node0_action --> E_SetMerlinFromUserCodetoOM01247 S_SetMerlinFromUserCodetoOM01247 --> N_SetMerlinFromUserCodetoOM01247_Node0 N_SetMerlinFromUserCodetoOM01247_Node0 -- No --> E_SetMerlinFromUserCodetoOM01247
File: GCX015.cbl
GIVEN:
An error report needs to be transmitted via Merlin system
WHEN:
Setting up primary transmission parameters
THEN:
The from user code should be set to OM01247 for sender identification
β Consolidated Acceptance Criteria
- Setting primary recipient information → the primary to user code should be set to OM01247
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetPrimaryToUserCodetoOM01247(["Start Step"])
E_SetPrimaryToUserCodetoOM01247(["End Step"])
N_SetPrimaryToUserCodetoOM01247_Node0{"Setting primary recipient
information"}:::decision N_SetPrimaryToUserCodetoOM01247_Node0_action["The primary to user code should be
set to OM01247"]:::main N_SetPrimaryToUserCodetoOM01247_Node0 -- Yes --> N_SetPrimaryToUserCodetoOM01247_Node0_action N_SetPrimaryToUserCodetoOM01247_Node0_action --> E_SetPrimaryToUserCodetoOM01247 S_SetPrimaryToUserCodetoOM01247 --> N_SetPrimaryToUserCodetoOM01247_Node0 N_SetPrimaryToUserCodetoOM01247_Node0 -- No --> E_SetPrimaryToUserCodetoOM01247
information"}:::decision N_SetPrimaryToUserCodetoOM01247_Node0_action["The primary to user code should be
set to OM01247"]:::main N_SetPrimaryToUserCodetoOM01247_Node0 -- Yes --> N_SetPrimaryToUserCodetoOM01247_Node0_action N_SetPrimaryToUserCodetoOM01247_Node0_action --> E_SetPrimaryToUserCodetoOM01247 S_SetPrimaryToUserCodetoOM01247 --> N_SetPrimaryToUserCodetoOM01247_Node0 N_SetPrimaryToUserCodetoOM01247_Node0 -- No --> E_SetPrimaryToUserCodetoOM01247
File: GCX015.cbl
GIVEN:
Error report transmission is being configured
WHEN:
Setting primary recipient information
THEN:
The primary to user code should be set to OM01247
β Consolidated Acceptance Criteria
- Setting the message subject → the subject should be assigned from the Merlin subject field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetSubjectfromMerlinSubject(["Start Step"])
E_SetSubjectfromMerlinSubject(["End Step"])
N_SetSubjectfromMerlinSubject_Node0{"Setting the message subject"}:::decision
N_SetSubjectfromMerlinSubject_Node0_action["The subject should be assigned from
the Merlin subject field"]:::main N_SetSubjectfromMerlinSubject_Node0 -- Yes --> N_SetSubjectfromMerlinSubject_Node0_action N_SetSubjectfromMerlinSubject_Node0_action --> E_SetSubjectfromMerlinSubject S_SetSubjectfromMerlinSubject --> N_SetSubjectfromMerlinSubject_Node0 N_SetSubjectfromMerlinSubject_Node0 -- No --> E_SetSubjectfromMerlinSubject
the Merlin subject field"]:::main N_SetSubjectfromMerlinSubject_Node0 -- Yes --> N_SetSubjectfromMerlinSubject_Node0_action N_SetSubjectfromMerlinSubject_Node0_action --> E_SetSubjectfromMerlinSubject S_SetSubjectfromMerlinSubject --> N_SetSubjectfromMerlinSubject_Node0 N_SetSubjectfromMerlinSubject_Node0 -- No --> E_SetSubjectfromMerlinSubject
File: GCX015.cbl
GIVEN:
Error report is being prepared for transmission
WHEN:
Setting the message subject
THEN:
The subject should be assigned from the Merlin subject field
β Consolidated Acceptance Criteria
- Initiating primary send operation → eMCSEND2 should be called with configured parameters to transmit the error report
- Executing the message transmission → the EMCSEND2 service should be called with all message parameters
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallEMCSEND2forPrimarySend(["Start Step"])
E_CallEMCSEND2forPrimarySend(["End Step"])
N_CallEMCSEND2forPrimarySend_Node0{"Initiating primary send operation"}:::decision
N_CallEMCSEND2forPrimarySend_Node0_action["EMCSEND2 should be called with
configured parameters to transmit
the error report"]:::main N_CallEMCSEND2forPrimarySend_Node0 -- Yes --> N_CallEMCSEND2forPrimarySend_Node0_action N_CallEMCSEND2forPrimarySend_Node0_action --> E_CallEMCSEND2forPrimarySend S_CallEMCSEND2forPrimarySend --> N_CallEMCSEND2forPrimarySend_Node0 N_CallEMCSEND2forPrimarySend_Node1{"Executing the message transmission"}:::decision N_CallEMCSEND2forPrimarySend_Node1_action["The EMCSEND2 service should be
called with all message parameters"]:::main N_CallEMCSEND2forPrimarySend_Node1 -- Yes --> N_CallEMCSEND2forPrimarySend_Node1_action N_CallEMCSEND2forPrimarySend_Node1_action --> E_CallEMCSEND2forPrimarySend N_CallEMCSEND2forPrimarySend_Node0 -- No --> N_CallEMCSEND2forPrimarySend_Node1 N_CallEMCSEND2forPrimarySend_Node1 -- No --> E_CallEMCSEND2forPrimarySend
configured parameters to transmit
the error report"]:::main N_CallEMCSEND2forPrimarySend_Node0 -- Yes --> N_CallEMCSEND2forPrimarySend_Node0_action N_CallEMCSEND2forPrimarySend_Node0_action --> E_CallEMCSEND2forPrimarySend S_CallEMCSEND2forPrimarySend --> N_CallEMCSEND2forPrimarySend_Node0 N_CallEMCSEND2forPrimarySend_Node1{"Executing the message transmission"}:::decision N_CallEMCSEND2forPrimarySend_Node1_action["The EMCSEND2 service should be
called with all message parameters"]:::main N_CallEMCSEND2forPrimarySend_Node1 -- Yes --> N_CallEMCSEND2forPrimarySend_Node1_action N_CallEMCSEND2forPrimarySend_Node1_action --> E_CallEMCSEND2forPrimarySend N_CallEMCSEND2forPrimarySend_Node0 -- No --> N_CallEMCSEND2forPrimarySend_Node1 N_CallEMCSEND2forPrimarySend_Node1 -- No --> E_CallEMCSEND2forPrimarySend
File: GCX015.cbl
GIVEN:
Error report is formatted and ready for transmission
WHEN:
Initiating primary send operation
THEN:
EMCSEND2 should be called with configured parameters to transmit the error report
File: GCX015.cbl
GIVEN:
A Merlin message has been fully configured with sender, recipient, and subject
WHEN:
Executing the message transmission
THEN:
The EMCSEND2 service should be called with all message parameters
β Consolidated Acceptance Criteria
- Setting up secondary recipient information → the to user code should be retrieved from admin table field GCSTBRT-AD-DC-P-MERLIN-1
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetToUserCodefromAdminTableMERLIN1(["Start Step"])
E_SetToUserCodefromAdminTableMERLIN1(["End Step"])
N_SetToUserCodefromAdminTableMERLIN1_Node0{"Setting up secondary recipient
information"}:::decision N_SetToUserCodefromAdminTableMERLIN1_Node0_action["The to user code should be
retrieved from admin table field
GCSTBRT-AD-DC-P-MERLIN-1"]:::main N_SetToUserCodefromAdminTableMERLIN1_Node0 -- Yes --> N_SetToUserCodefromAdminTableMERLIN1_Node0_action N_SetToUserCodefromAdminTableMERLIN1_Node0_action --> E_SetToUserCodefromAdminTableMERLIN1 S_SetToUserCodefromAdminTableMERLIN1 --> N_SetToUserCodefromAdminTableMERLIN1_Node0 N_SetToUserCodefromAdminTableMERLIN1_Node0 -- No --> E_SetToUserCodefromAdminTableMERLIN1
information"}:::decision N_SetToUserCodefromAdminTableMERLIN1_Node0_action["The to user code should be
retrieved from admin table field
GCSTBRT-AD-DC-P-MERLIN-1"]:::main N_SetToUserCodefromAdminTableMERLIN1_Node0 -- Yes --> N_SetToUserCodefromAdminTableMERLIN1_Node0_action N_SetToUserCodefromAdminTableMERLIN1_Node0_action --> E_SetToUserCodefromAdminTableMERLIN1 S_SetToUserCodefromAdminTableMERLIN1 --> N_SetToUserCodefromAdminTableMERLIN1_Node0 N_SetToUserCodefromAdminTableMERLIN1_Node0 -- No --> E_SetToUserCodefromAdminTableMERLIN1
File: GCX015.cbl
GIVEN:
Primary transmission was successful and secondary transmission is required
WHEN:
Setting up secondary recipient information
THEN:
The to user code should be retrieved from admin table field GCSTBRT-AD-DC-P-MERLIN-1
β Consolidated Acceptance Criteria
- Setting copy recipient information → the copy user code should be retrieved from admin table field GCSTBRT-AD-DC-P-MERLIN-5
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetCopyUserCodefromAdminTableMERLIN5(["Start Step"])
E_SetCopyUserCodefromAdminTableMERLIN5(["End Step"])
N_SetCopyUserCodefromAdminTableMERLIN5_Node0{"Setting copy recipient information"}:::decision
N_SetCopyUserCodefromAdminTableMERLIN5_Node0_action["The copy user code should be
retrieved from admin table field
GCSTBRT-AD-DC-P-MERLIN-5"]:::main N_SetCopyUserCodefromAdminTableMERLIN5_Node0 -- Yes --> N_SetCopyUserCodefromAdminTableMERLIN5_Node0_action N_SetCopyUserCodefromAdminTableMERLIN5_Node0_action --> E_SetCopyUserCodefromAdminTableMERLIN5 S_SetCopyUserCodefromAdminTableMERLIN5 --> N_SetCopyUserCodefromAdminTableMERLIN5_Node0 N_SetCopyUserCodefromAdminTableMERLIN5_Node0 -- No --> E_SetCopyUserCodefromAdminTableMERLIN5
retrieved from admin table field
GCSTBRT-AD-DC-P-MERLIN-5"]:::main N_SetCopyUserCodefromAdminTableMERLIN5_Node0 -- Yes --> N_SetCopyUserCodefromAdminTableMERLIN5_Node0_action N_SetCopyUserCodefromAdminTableMERLIN5_Node0_action --> E_SetCopyUserCodefromAdminTableMERLIN5 S_SetCopyUserCodefromAdminTableMERLIN5 --> N_SetCopyUserCodefromAdminTableMERLIN5_Node0 N_SetCopyUserCodefromAdminTableMERLIN5_Node0 -- No --> E_SetCopyUserCodefromAdminTableMERLIN5
File: GCX015.cbl
GIVEN:
Secondary transmission is being configured
WHEN:
Setting copy recipient information
THEN:
The copy user code should be retrieved from admin table field GCSTBRT-AD-DC-P-MERLIN-5
β Consolidated Acceptance Criteria
- Configuring destination parameters → the destination filename should be set to EMI-DESTINATION-FILENAME2
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_UseAlternativeDestinationFilename(["Start Step"])
E_UseAlternativeDestinationFilename(["End Step"])
N_UseAlternativeDestinationFilename_Node0{"Configuring destination parameters"}:::decision
N_UseAlternativeDestinationFilename_Node0_action["The destination filename should be
set to EMI-DESTINATION-FILENAME2"]:::main N_UseAlternativeDestinationFilename_Node0 -- Yes --> N_UseAlternativeDestinationFilename_Node0_action N_UseAlternativeDestinationFilename_Node0_action --> E_UseAlternativeDestinationFilename S_UseAlternativeDestinationFilename --> N_UseAlternativeDestinationFilename_Node0 N_UseAlternativeDestinationFilename_Node0 -- No --> E_UseAlternativeDestinationFilename
set to EMI-DESTINATION-FILENAME2"]:::main N_UseAlternativeDestinationFilename_Node0 -- Yes --> N_UseAlternativeDestinationFilename_Node0_action N_UseAlternativeDestinationFilename_Node0_action --> E_UseAlternativeDestinationFilename S_UseAlternativeDestinationFilename --> N_UseAlternativeDestinationFilename_Node0 N_UseAlternativeDestinationFilename_Node0 -- No --> E_UseAlternativeDestinationFilename
File: GCX015.cbl
GIVEN:
Secondary transmission is being set up
WHEN:
Configuring destination parameters
THEN:
The destination filename should be set to EMI-DESTINATION-FILENAME2
β Consolidated Acceptance Criteria
- Initiating secondary send operation → eMCSEND2 should be called with alternative destination and recipient configuration
- The secondary Merlin send is executed → eMCSEND2 service is called with configured parameters including from user, destination file, recipients, subject, and message content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CallEMCSEND2forSecondarySend(["Start Step"])
E_CallEMCSEND2forSecondarySend(["End Step"])
N_CallEMCSEND2forSecondarySend_Node0{"Initiating secondary send operation"}:::decision
N_CallEMCSEND2forSecondarySend_Node0_action["EMCSEND2 should be called with
alternative destination and
recipient configuration"]:::main N_CallEMCSEND2forSecondarySend_Node0 -- Yes --> N_CallEMCSEND2forSecondarySend_Node0_action N_CallEMCSEND2forSecondarySend_Node0_action --> E_CallEMCSEND2forSecondarySend S_CallEMCSEND2forSecondarySend --> N_CallEMCSEND2forSecondarySend_Node0 N_CallEMCSEND2forSecondarySend_Node1{"The secondary Merlin send is
executed"}:::decision N_CallEMCSEND2forSecondarySend_Node1_action["EMCSEND2 service is called with
configured parameters including from
user, destination file, recipients,
subject, and message content"]:::main N_CallEMCSEND2forSecondarySend_Node1 -- Yes --> N_CallEMCSEND2forSecondarySend_Node1_action N_CallEMCSEND2forSecondarySend_Node1_action --> E_CallEMCSEND2forSecondarySend N_CallEMCSEND2forSecondarySend_Node0 -- No --> N_CallEMCSEND2forSecondarySend_Node1 N_CallEMCSEND2forSecondarySend_Node1 -- No --> E_CallEMCSEND2forSecondarySend
alternative destination and
recipient configuration"]:::main N_CallEMCSEND2forSecondarySend_Node0 -- Yes --> N_CallEMCSEND2forSecondarySend_Node0_action N_CallEMCSEND2forSecondarySend_Node0_action --> E_CallEMCSEND2forSecondarySend S_CallEMCSEND2forSecondarySend --> N_CallEMCSEND2forSecondarySend_Node0 N_CallEMCSEND2forSecondarySend_Node1{"The secondary Merlin send is
executed"}:::decision N_CallEMCSEND2forSecondarySend_Node1_action["EMCSEND2 service is called with
configured parameters including from
user, destination file, recipients,
subject, and message content"]:::main N_CallEMCSEND2forSecondarySend_Node1 -- Yes --> N_CallEMCSEND2forSecondarySend_Node1_action N_CallEMCSEND2forSecondarySend_Node1_action --> E_CallEMCSEND2forSecondarySend N_CallEMCSEND2forSecondarySend_Node0 -- No --> N_CallEMCSEND2forSecondarySend_Node1 N_CallEMCSEND2forSecondarySend_Node1 -- No --> E_CallEMCSEND2forSecondarySend
File: GCX015.cbl
GIVEN:
Secondary transmission parameters are configured
WHEN:
Initiating secondary send operation
THEN:
- Emcsend2 should be called with alternative destination
- Recipient configuration
File: GCX015.cbl
GIVEN:
All secondary send parameters are configured
WHEN:
The secondary Merlin send is executed
THEN:
EMCSEND2 service is called with configured parameters including from user, destination file, recipients, subject, and message content
β Consolidated Acceptance Criteria
- Evaluating the failure type → if EMI-FROM-NOT-FOUND then set error message to 'EMI - INVALID MERLIN FROM', if EMI-TO-OR-COPY-NOT-FOUND then set error message to 'EMI - INVALID MERLIN TO OR COPY', if EMI-FILENAME-INVALID then set error message to 'EMI - INVALID MERLIN FILENAME', and perform abend procedure
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleSendFailureError(["Start Step"])
E_HandleSendFailureError(["End Step"])
N_HandleSendFailureError_Node0{"Evaluating the failure type"}:::decision
N_HandleSendFailureError_Node0_action["If EMI-FROM-NOT-FOUND then set
error message to EMI - INVALID
MERLIN FROM , if
EMI-TO-OR-COPY-NOT-FOUND then set
error message to EMI - INVALID
MERLIN TO OR COPY , if
EMI-FILENAME-INVALID then set error
message to EMI - INVALID MERLIN
FILENAME , and perform abend
procedure"]:::exclusion N_HandleSendFailureError_Node0 -- Yes -->|Alternative| N_HandleSendFailureError_Node0_action N_HandleSendFailureError_Node0_action --> E_HandleSendFailureError S_HandleSendFailureError --> N_HandleSendFailureError_Node0 N_HandleSendFailureError_Node0 -- No --> E_HandleSendFailureError
error message to EMI - INVALID
MERLIN FROM , if
EMI-TO-OR-COPY-NOT-FOUND then set
error message to EMI - INVALID
MERLIN TO OR COPY , if
EMI-FILENAME-INVALID then set error
message to EMI - INVALID MERLIN
FILENAME , and perform abend
procedure"]:::exclusion N_HandleSendFailureError_Node0 -- Yes -->|Alternative| N_HandleSendFailureError_Node0_action N_HandleSendFailureError_Node0_action --> E_HandleSendFailureError S_HandleSendFailureError --> N_HandleSendFailureError_Node0 N_HandleSendFailureError_Node0 -- No --> E_HandleSendFailureError
File: GCX015.cbl
GIVEN:
Error report transmission has failed
WHEN:
Evaluating the failure type
THEN:
If EMI-FROM-NOT-FOUND then set error message to 'EMI - INVALID MERLIN FROM', if EMI-TO-OR-COPY-NOT-FOUND then set error message to 'EMI - INVALID MERLIN TO OR COPY', if EMI-FILENAME-INVALID then set error message to 'EMI - INVALID MERLIN FILENAME', and perform abend procedure
β Consolidated Acceptance Criteria
- Setting up the primary message transmission → the from user code should be set to OM01247
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetFromUsertoOM01247(["Start Step"])
E_SetFromUsertoOM01247(["End Step"])
N_SetFromUsertoOM01247_Node0{"Setting up the primary message
transmission"}:::decision N_SetFromUsertoOM01247_Node0_action["The from user code should be set to
OM01247"]:::main N_SetFromUsertoOM01247_Node0 -- Yes --> N_SetFromUsertoOM01247_Node0_action N_SetFromUsertoOM01247_Node0_action --> E_SetFromUsertoOM01247 S_SetFromUsertoOM01247 --> N_SetFromUsertoOM01247_Node0 N_SetFromUsertoOM01247_Node0 -- No --> E_SetFromUsertoOM01247
transmission"}:::decision N_SetFromUsertoOM01247_Node0_action["The from user code should be set to
OM01247"]:::main N_SetFromUsertoOM01247_Node0 -- Yes --> N_SetFromUsertoOM01247_Node0_action N_SetFromUsertoOM01247_Node0_action --> E_SetFromUsertoOM01247 S_SetFromUsertoOM01247 --> N_SetFromUsertoOM01247_Node0 N_SetFromUsertoOM01247_Node0 -- No --> E_SetFromUsertoOM01247
File: GCX015.cbl
GIVEN:
A Merlin message needs to be sent
WHEN:
Setting up the primary message transmission
THEN:
The from user code should be set to OM01247
β Consolidated Acceptance Criteria
- Setting up the message recipient → the to user code should be set to OM01247
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetToUsertoOM01247(["Start Step"])
E_SetToUsertoOM01247(["End Step"])
N_SetToUsertoOM01247_Node0{"Setting up the message recipient"}:::decision
N_SetToUsertoOM01247_Node0_action["The to user code should be set to
OM01247"]:::main N_SetToUsertoOM01247_Node0 -- Yes --> N_SetToUsertoOM01247_Node0_action N_SetToUsertoOM01247_Node0_action --> E_SetToUsertoOM01247 S_SetToUsertoOM01247 --> N_SetToUsertoOM01247_Node0 N_SetToUsertoOM01247_Node0 -- No --> E_SetToUsertoOM01247
OM01247"]:::main N_SetToUsertoOM01247_Node0 -- Yes --> N_SetToUsertoOM01247_Node0_action N_SetToUsertoOM01247_Node0_action --> E_SetToUsertoOM01247 S_SetToUsertoOM01247 --> N_SetToUsertoOM01247_Node0 N_SetToUsertoOM01247_Node0 -- No --> E_SetToUsertoOM01247
File: GCX015.cbl
GIVEN:
A Merlin message sender has been configured
WHEN:
Setting up the message recipient
THEN:
The to user code should be set to OM01247
β Consolidated Acceptance Criteria
- Setting the message subject → the subject should be set to the predefined Merlin subject content
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetSubjecttoMerlinSubject(["Start Step"])
E_SetSubjecttoMerlinSubject(["End Step"])
N_SetSubjecttoMerlinSubject_Node0{"Setting the message subject"}:::decision
N_SetSubjecttoMerlinSubject_Node0_action["The subject should be set to the
predefined Merlin subject content"]:::main N_SetSubjecttoMerlinSubject_Node0 -- Yes --> N_SetSubjecttoMerlinSubject_Node0_action N_SetSubjecttoMerlinSubject_Node0_action --> E_SetSubjecttoMerlinSubject S_SetSubjecttoMerlinSubject --> N_SetSubjecttoMerlinSubject_Node0 N_SetSubjecttoMerlinSubject_Node0 -- No --> E_SetSubjecttoMerlinSubject
predefined Merlin subject content"]:::main N_SetSubjecttoMerlinSubject_Node0 -- Yes --> N_SetSubjecttoMerlinSubject_Node0_action N_SetSubjecttoMerlinSubject_Node0_action --> E_SetSubjecttoMerlinSubject S_SetSubjecttoMerlinSubject --> N_SetSubjecttoMerlinSubject_Node0 N_SetSubjecttoMerlinSubject_Node0 -- No --> E_SetSubjecttoMerlinSubject
File: GCX015.cbl
GIVEN:
A Merlin message has been configured with sender and recipient
WHEN:
Setting the message subject
THEN:
The subject should be set to the predefined Merlin subject content
β Consolidated Acceptance Criteria
- The failure is due to an invalid sender user identification → an invalid Merlin sender error message should be generated and the process should terminate abnormally
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendInvalidFromUserError(["Start Step"])
E_SendInvalidFromUserError(["End Step"])
N_SendInvalidFromUserError_Node0{"The failure is due to an invalid
sender user identification"}:::decision N_SendInvalidFromUserError_Node0_action["An invalid Merlin sender error
message should be generated and the
process should terminate abnormally"]:::exclusion N_SendInvalidFromUserError_Node0 -- Yes -->|Alternative| N_SendInvalidFromUserError_Node0_action N_SendInvalidFromUserError_Node0_action --> E_SendInvalidFromUserError S_SendInvalidFromUserError --> N_SendInvalidFromUserError_Node0 N_SendInvalidFromUserError_Node0 -- No --> E_SendInvalidFromUserError
sender user identification"}:::decision N_SendInvalidFromUserError_Node0_action["An invalid Merlin sender error
message should be generated and the
process should terminate abnormally"]:::exclusion N_SendInvalidFromUserError_Node0 -- Yes -->|Alternative| N_SendInvalidFromUserError_Node0_action N_SendInvalidFromUserError_Node0_action --> E_SendInvalidFromUserError S_SendInvalidFromUserError --> N_SendInvalidFromUserError_Node0 N_SendInvalidFromUserError_Node0 -- No --> E_SendInvalidFromUserError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A Merlin message transmission has failed
WHEN:
The failure is due to an invalid sender user identification
THEN:
- An invalid merlin sender error message should be generated
- The process should terminate abnormally
β Consolidated Acceptance Criteria
- The failure is due to an invalid recipient or copy user identification → an invalid Merlin recipient or copy user error message should be generated and the process should terminate abnormally
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendInvalidToCopyUserError(["Start Step"])
E_SendInvalidToCopyUserError(["End Step"])
N_SendInvalidToCopyUserError_Node0{"The failure is due to an invalid
recipient or copy user
identification"}:::decision N_SendInvalidToCopyUserError_Node0_action["An invalid Merlin recipient or copy
user error message should be
generated and the process should
terminate abnormally"]:::exclusion N_SendInvalidToCopyUserError_Node0 -- Yes -->|Alternative| N_SendInvalidToCopyUserError_Node0_action N_SendInvalidToCopyUserError_Node0_action --> E_SendInvalidToCopyUserError S_SendInvalidToCopyUserError --> N_SendInvalidToCopyUserError_Node0 N_SendInvalidToCopyUserError_Node0 -- No --> E_SendInvalidToCopyUserError
recipient or copy user
identification"}:::decision N_SendInvalidToCopyUserError_Node0_action["An invalid Merlin recipient or copy
user error message should be
generated and the process should
terminate abnormally"]:::exclusion N_SendInvalidToCopyUserError_Node0 -- Yes -->|Alternative| N_SendInvalidToCopyUserError_Node0_action N_SendInvalidToCopyUserError_Node0_action --> E_SendInvalidToCopyUserError S_SendInvalidToCopyUserError --> N_SendInvalidToCopyUserError_Node0 N_SendInvalidToCopyUserError_Node0 -- No --> E_SendInvalidToCopyUserError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A Merlin message transmission has failed
WHEN:
The failure is due to an invalid recipient or copy user identification
THEN:
- An invalid merlin recipient or copy user error message should be generated
- The process should terminate abnormally
β Consolidated Acceptance Criteria
- The failure is due to an invalid filename → an invalid Merlin filename error message should be generated and the process should terminate abnormally
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SendInvalidFilenameError(["Start Step"])
E_SendInvalidFilenameError(["End Step"])
N_SendInvalidFilenameError_Node0{"The failure is due to an invalid
filename"}:::decision N_SendInvalidFilenameError_Node0_action["An invalid Merlin filename error
message should be generated and the
process should terminate abnormally"]:::exclusion N_SendInvalidFilenameError_Node0 -- Yes -->|Alternative| N_SendInvalidFilenameError_Node0_action N_SendInvalidFilenameError_Node0_action --> E_SendInvalidFilenameError S_SendInvalidFilenameError --> N_SendInvalidFilenameError_Node0 N_SendInvalidFilenameError_Node0 -- No --> E_SendInvalidFilenameError
filename"}:::decision N_SendInvalidFilenameError_Node0_action["An invalid Merlin filename error
message should be generated and the
process should terminate abnormally"]:::exclusion N_SendInvalidFilenameError_Node0 -- Yes -->|Alternative| N_SendInvalidFilenameError_Node0_action N_SendInvalidFilenameError_Node0_action --> E_SendInvalidFilenameError S_SendInvalidFilenameError --> N_SendInvalidFilenameError_Node0 N_SendInvalidFilenameError_Node0 -- No --> E_SendInvalidFilenameError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
A Merlin message transmission has failed
WHEN:
The failure is due to an invalid filename
THEN:
- An invalid merlin filename error message should be generated
- The process should terminate abnormally
β Consolidated Acceptance Criteria
- The system prepares to set up alternative recipients → all recipient user code fields are cleared to spaces
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_InitializeSecondaryRecipients(["Start Step"])
E_InitializeSecondaryRecipients(["End Step"])
N_InitializeSecondaryRecipients_Node0{"The system prepares to set up
alternative recipients"}:::decision N_InitializeSecondaryRecipients_Node0_action["All recipient user code fields are
cleared to spaces"]:::main N_InitializeSecondaryRecipients_Node0 -- Yes --> N_InitializeSecondaryRecipients_Node0_action N_InitializeSecondaryRecipients_Node0_action --> E_InitializeSecondaryRecipients S_InitializeSecondaryRecipients --> N_InitializeSecondaryRecipients_Node0 N_InitializeSecondaryRecipients_Node0 -- No --> E_InitializeSecondaryRecipients
alternative recipients"}:::decision N_InitializeSecondaryRecipients_Node0_action["All recipient user code fields are
cleared to spaces"]:::main N_InitializeSecondaryRecipients_Node0 -- Yes --> N_InitializeSecondaryRecipients_Node0_action N_InitializeSecondaryRecipients_Node0_action --> E_InitializeSecondaryRecipients S_InitializeSecondaryRecipients --> N_InitializeSecondaryRecipients_Node0 N_InitializeSecondaryRecipients_Node0 -- No --> E_InitializeSecondaryRecipients
File: GCX015.cbl
GIVEN:
A secondary Merlin send process is initiated
WHEN:
The system prepares to set up alternative recipients
THEN:
All recipient user code fields are cleared to spaces
β Consolidated Acceptance Criteria
- The from user needs to be established → the primary Merlin ID 'OM01247' is set as the from user code
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetPrimaryMerlinIDasFromUser(["Start Step"])
E_SetPrimaryMerlinIDasFromUser(["End Step"])
N_SetPrimaryMerlinIDasFromUser_Node0{"The from user needs to be
established"}:::decision N_SetPrimaryMerlinIDasFromUser_Node0_action["The primary Merlin ID OM01247 is
set as the from user code"]:::main N_SetPrimaryMerlinIDasFromUser_Node0 -- Yes --> N_SetPrimaryMerlinIDasFromUser_Node0_action N_SetPrimaryMerlinIDasFromUser_Node0_action --> E_SetPrimaryMerlinIDasFromUser S_SetPrimaryMerlinIDasFromUser --> N_SetPrimaryMerlinIDasFromUser_Node0 N_SetPrimaryMerlinIDasFromUser_Node0 -- No --> E_SetPrimaryMerlinIDasFromUser
established"}:::decision N_SetPrimaryMerlinIDasFromUser_Node0_action["The primary Merlin ID OM01247 is
set as the from user code"]:::main N_SetPrimaryMerlinIDasFromUser_Node0 -- Yes --> N_SetPrimaryMerlinIDasFromUser_Node0_action N_SetPrimaryMerlinIDasFromUser_Node0_action --> E_SetPrimaryMerlinIDasFromUser S_SetPrimaryMerlinIDasFromUser --> N_SetPrimaryMerlinIDasFromUser_Node0 N_SetPrimaryMerlinIDasFromUser_Node0 -- No --> E_SetPrimaryMerlinIDasFromUser
File: GCX015.cbl
GIVEN:
Secondary Merlin send is being configured
WHEN:
The from user needs to be established
THEN:
The primary Merlin ID 'OM01247' is set as the from user code
β Consolidated Acceptance Criteria
- Administrative table recipients need to be assigned → primary recipient is set from admin table DC-P-MERLIN-1 field and copy recipient is set from admin table DC-P-MERLIN-5 field
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_GetAdminTableRecipients(["Start Step"])
E_GetAdminTableRecipients(["End Step"])
N_GetAdminTableRecipients_Node0{"Administrative table recipients
need to be assigned"}:::decision N_GetAdminTableRecipients_Node0_action["Primary recipient is set from admin
table DC-P-MERLIN-1 field and copy
recipient is set from admin table
DC-P-MERLIN-5 field"]:::main N_GetAdminTableRecipients_Node0 -- Yes --> N_GetAdminTableRecipients_Node0_action N_GetAdminTableRecipients_Node0_action --> E_GetAdminTableRecipients S_GetAdminTableRecipients --> N_GetAdminTableRecipients_Node0 N_GetAdminTableRecipients_Node0 -- No --> E_GetAdminTableRecipients
need to be assigned"}:::decision N_GetAdminTableRecipients_Node0_action["Primary recipient is set from admin
table DC-P-MERLIN-1 field and copy
recipient is set from admin table
DC-P-MERLIN-5 field"]:::main N_GetAdminTableRecipients_Node0 -- Yes --> N_GetAdminTableRecipients_Node0_action N_GetAdminTableRecipients_Node0_action --> E_GetAdminTableRecipients S_GetAdminTableRecipients --> N_GetAdminTableRecipients_Node0 N_GetAdminTableRecipients_Node0 -- No --> E_GetAdminTableRecipients
File: GCX015.cbl
GIVEN:
Secondary Merlin send requires recipient configuration
WHEN:
Administrative table recipients need to be assigned
THEN:
- Primary recipient is set from admin table dc-p-merlin-1 field
- Copy recipient is set from admin table dc-p-merlin-5 field
β Consolidated Acceptance Criteria
- Destination file needs to be specified → the secondary destination filename (EMI-DESTINATION-FILENAME2) is used for message delivery
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetSecondaryDestinationFile(["Start Step"])
E_SetSecondaryDestinationFile(["End Step"])
N_SetSecondaryDestinationFile_Node0{"Destination file needs to be
specified"}:::decision N_SetSecondaryDestinationFile_Node0_action["The secondary destination filename
EMI-DESTINATION-FILENAME2 is used
for message delivery"]:::main N_SetSecondaryDestinationFile_Node0 -- Yes --> N_SetSecondaryDestinationFile_Node0_action N_SetSecondaryDestinationFile_Node0_action --> E_SetSecondaryDestinationFile S_SetSecondaryDestinationFile --> N_SetSecondaryDestinationFile_Node0 N_SetSecondaryDestinationFile_Node0 -- No --> E_SetSecondaryDestinationFile
specified"}:::decision N_SetSecondaryDestinationFile_Node0_action["The secondary destination filename
EMI-DESTINATION-FILENAME2 is used
for message delivery"]:::main N_SetSecondaryDestinationFile_Node0 -- Yes --> N_SetSecondaryDestinationFile_Node0_action N_SetSecondaryDestinationFile_Node0_action --> E_SetSecondaryDestinationFile S_SetSecondaryDestinationFile --> N_SetSecondaryDestinationFile_Node0 N_SetSecondaryDestinationFile_Node0 -- No --> E_SetSecondaryDestinationFile
File: GCX015.cbl
GIVEN:
Secondary Merlin send is being configured
WHEN:
Destination file needs to be specified
THEN:
The secondary destination filename (EMI-DESTINATION-FILENAME2) is used for message delivery
β Consolidated Acceptance Criteria
- The send fails due to invalid from user (EMI-FROM-NOT-FOUND) → system abend is triggered with error message 'EMI - INVALID MERLIN FROM'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleFromUserNotFoundError(["Start Step"])
E_HandleFromUserNotFoundError(["End Step"])
N_HandleFromUserNotFoundError_Node0{"The send fails due to invalid from
user EMI-FROM-NOT-FOUND"}:::decision N_HandleFromUserNotFoundError_Node0_action["System abend is triggered with
error message EMI - INVALID MERLIN
FROM"]:::exclusion N_HandleFromUserNotFoundError_Node0 -- Yes -->|Alternative| N_HandleFromUserNotFoundError_Node0_action N_HandleFromUserNotFoundError_Node0_action --> E_HandleFromUserNotFoundError S_HandleFromUserNotFoundError --> N_HandleFromUserNotFoundError_Node0 N_HandleFromUserNotFoundError_Node0 -- No --> E_HandleFromUserNotFoundError
user EMI-FROM-NOT-FOUND"}:::decision N_HandleFromUserNotFoundError_Node0_action["System abend is triggered with
error message EMI - INVALID MERLIN
FROM"]:::exclusion N_HandleFromUserNotFoundError_Node0 -- Yes -->|Alternative| N_HandleFromUserNotFoundError_Node0_action N_HandleFromUserNotFoundError_Node0_action --> E_HandleFromUserNotFoundError S_HandleFromUserNotFoundError --> N_HandleFromUserNotFoundError_Node0 N_HandleFromUserNotFoundError_Node0 -- No --> E_HandleFromUserNotFoundError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
Secondary Merlin send has been executed
WHEN:
The send fails due to invalid from user (EMI-FROM-NOT-FOUND)
THEN:
System abend is triggered with error message 'EMI - INVALID MERLIN FROM'
β Consolidated Acceptance Criteria
- The send fails due to invalid recipient or copy user (EMI-TO-OR-COPY-NOT-FOUND) → system abend is triggered with error message 'EMI - INVALID MERLIN TO OR COPY'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleToCopyUserNotFoundError(["Start Step"])
E_HandleToCopyUserNotFoundError(["End Step"])
N_HandleToCopyUserNotFoundError_Node0{"The send fails due to invalid
recipient or copy user
EMI-TO-OR-COPY-NOT-FOUND"}:::decision N_HandleToCopyUserNotFoundError_Node0_action["System abend is triggered with
error message EMI - INVALID MERLIN
TO OR COPY"]:::exclusion N_HandleToCopyUserNotFoundError_Node0 -- Yes -->|Alternative| N_HandleToCopyUserNotFoundError_Node0_action N_HandleToCopyUserNotFoundError_Node0_action --> E_HandleToCopyUserNotFoundError S_HandleToCopyUserNotFoundError --> N_HandleToCopyUserNotFoundError_Node0 N_HandleToCopyUserNotFoundError_Node0 -- No --> E_HandleToCopyUserNotFoundError
recipient or copy user
EMI-TO-OR-COPY-NOT-FOUND"}:::decision N_HandleToCopyUserNotFoundError_Node0_action["System abend is triggered with
error message EMI - INVALID MERLIN
TO OR COPY"]:::exclusion N_HandleToCopyUserNotFoundError_Node0 -- Yes -->|Alternative| N_HandleToCopyUserNotFoundError_Node0_action N_HandleToCopyUserNotFoundError_Node0_action --> E_HandleToCopyUserNotFoundError S_HandleToCopyUserNotFoundError --> N_HandleToCopyUserNotFoundError_Node0 N_HandleToCopyUserNotFoundError_Node0 -- No --> E_HandleToCopyUserNotFoundError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
Secondary Merlin send has been executed
WHEN:
The send fails due to invalid recipient or copy user (EMI-TO-OR-COPY-NOT-FOUND)
THEN:
System abend is triggered with error message 'EMI - INVALID MERLIN TO OR COPY'
β Consolidated Acceptance Criteria
- The send fails due to invalid filename (EMI-FILENAME-INVALID) → system abend is triggered with error message 'EMI - INVALID MERLIN FILENAME'
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleInvalidFilenameError(["Start Step"])
E_HandleInvalidFilenameError(["End Step"])
N_HandleInvalidFilenameError_Node0{"The send fails due to invalid
filename EMI-FILENAME-INVALID"}:::decision N_HandleInvalidFilenameError_Node0_action["System abend is triggered with
error message EMI - INVALID MERLIN
FILENAME"]:::exclusion N_HandleInvalidFilenameError_Node0 -- Yes -->|Alternative| N_HandleInvalidFilenameError_Node0_action N_HandleInvalidFilenameError_Node0_action --> E_HandleInvalidFilenameError S_HandleInvalidFilenameError --> N_HandleInvalidFilenameError_Node0 N_HandleInvalidFilenameError_Node0 -- No --> E_HandleInvalidFilenameError
filename EMI-FILENAME-INVALID"}:::decision N_HandleInvalidFilenameError_Node0_action["System abend is triggered with
error message EMI - INVALID MERLIN
FILENAME"]:::exclusion N_HandleInvalidFilenameError_Node0 -- Yes -->|Alternative| N_HandleInvalidFilenameError_Node0_action N_HandleInvalidFilenameError_Node0_action --> E_HandleInvalidFilenameError S_HandleInvalidFilenameError --> N_HandleInvalidFilenameError_Node0 N_HandleInvalidFilenameError_Node0 -- No --> E_HandleInvalidFilenameError
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
Secondary Merlin send has been executed
WHEN:
The send fails due to invalid filename (EMI-FILENAME-INVALID)
THEN:
System abend is triggered with error message 'EMI - INVALID MERLIN FILENAME'
β Consolidated Acceptance Criteria
- System initiates message queue closure → message queue handle is closed and queue resources are released
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CloseMessageQueueHandle(["Start Step"])
E_CloseMessageQueueHandle(["End Step"])
N_CloseMessageQueueHandle_Node0{"System initiates message queue
closure"}:::decision N_CloseMessageQueueHandle_Node0_action["Message queue handle is closed and
queue resources are released"]:::main N_CloseMessageQueueHandle_Node0 -- Yes --> N_CloseMessageQueueHandle_Node0_action N_CloseMessageQueueHandle_Node0_action --> E_CloseMessageQueueHandle S_CloseMessageQueueHandle --> N_CloseMessageQueueHandle_Node0 N_CloseMessageQueueHandle_Node0 -- No --> E_CloseMessageQueueHandle
closure"}:::decision N_CloseMessageQueueHandle_Node0_action["Message queue handle is closed and
queue resources are released"]:::main N_CloseMessageQueueHandle_Node0 -- Yes --> N_CloseMessageQueueHandle_Node0_action N_CloseMessageQueueHandle_Node0_action --> E_CloseMessageQueueHandle S_CloseMessageQueueHandle --> N_CloseMessageQueueHandle_Node0 N_CloseMessageQueueHandle_Node0 -- No --> E_CloseMessageQueueHandle
File: GCX015.cbl
GIVEN:
Message processing is complete and message queue handle exists
WHEN:
System initiates message queue closure
THEN:
- Message queue handle is closed
- Queue resources are released
β Consolidated Acceptance Criteria
- Queue closure fails with error condition → system captures error details and initiates error handling process
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleQueueCloseError(["Start Step"])
E_HandleQueueCloseError(["End Step"])
N_HandleQueueCloseError_Node0{"Queue closure fails with error
condition"}:::decision N_HandleQueueCloseError_Node0_action["System captures error details and
initiates error handling process"]:::exclusion N_HandleQueueCloseError_Node0 -- Yes -->|Alternative| N_HandleQueueCloseError_Node0_action N_HandleQueueCloseError_Node0_action --> E_HandleQueueCloseError S_HandleQueueCloseError --> N_HandleQueueCloseError_Node0 N_HandleQueueCloseError_Node0 -- No --> E_HandleQueueCloseError
condition"}:::decision N_HandleQueueCloseError_Node0_action["System captures error details and
initiates error handling process"]:::exclusion N_HandleQueueCloseError_Node0 -- Yes -->|Alternative| N_HandleQueueCloseError_Node0_action N_HandleQueueCloseError_Node0_action --> E_HandleQueueCloseError S_HandleQueueCloseError --> N_HandleQueueCloseError_Node0 N_HandleQueueCloseError_Node0 -- No --> E_HandleQueueCloseError
File: GCX015.cbl
GIVEN:
Message queue closure is attempted
WHEN:
Queue closure fails with error condition
THEN:
- System captures error details
- Initiates error handling process
β Consolidated Acceptance Criteria
- System initiates disconnection from MQ manager → connection to MQ manager is terminated and messaging resources are freed
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_DisconnectfromMQManager(["Start Step"])
E_DisconnectfromMQManager(["End Step"])
N_DisconnectfromMQManager_Node0{"System initiates disconnection from
MQ manager"}:::decision N_DisconnectfromMQManager_Node0_action["Connection to MQ manager is
terminated and messaging resources
are freed"]:::main N_DisconnectfromMQManager_Node0 -- Yes --> N_DisconnectfromMQManager_Node0_action N_DisconnectfromMQManager_Node0_action --> E_DisconnectfromMQManager S_DisconnectfromMQManager --> N_DisconnectfromMQManager_Node0 N_DisconnectfromMQManager_Node0 -- No --> E_DisconnectfromMQManager
MQ manager"}:::decision N_DisconnectfromMQManager_Node0_action["Connection to MQ manager is
terminated and messaging resources
are freed"]:::main N_DisconnectfromMQManager_Node0 -- Yes --> N_DisconnectfromMQManager_Node0_action N_DisconnectfromMQManager_Node0_action --> E_DisconnectfromMQManager S_DisconnectfromMQManager --> N_DisconnectfromMQManager_Node0 N_DisconnectfromMQManager_Node0 -- No --> E_DisconnectfromMQManager
File: GCX015.cbl
GIVEN:
Message queue handle has been closed successfully
WHEN:
System initiates disconnection from MQ manager
THEN:
- Connection to mq manager is terminated
- Messaging resources are freed
β Consolidated Acceptance Criteria
- Disconnection fails with error condition → system captures error details and initiates error handling process
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_HandleDisconnectError(["Start Step"])
E_HandleDisconnectError(["End Step"])
N_HandleDisconnectError_Node0{"Disconnection fails with error
condition"}:::decision N_HandleDisconnectError_Node0_action["System captures error details and
initiates error handling process"]:::exclusion N_HandleDisconnectError_Node0 -- Yes -->|Alternative| N_HandleDisconnectError_Node0_action N_HandleDisconnectError_Node0_action --> E_HandleDisconnectError S_HandleDisconnectError --> N_HandleDisconnectError_Node0 N_HandleDisconnectError_Node0 -- No --> E_HandleDisconnectError
condition"}:::decision N_HandleDisconnectError_Node0_action["System captures error details and
initiates error handling process"]:::exclusion N_HandleDisconnectError_Node0 -- Yes -->|Alternative| N_HandleDisconnectError_Node0_action N_HandleDisconnectError_Node0_action --> E_HandleDisconnectError S_HandleDisconnectError --> N_HandleDisconnectError_Node0 N_HandleDisconnectError_Node0 -- No --> E_HandleDisconnectError
File: GCX015.cbl
GIVEN:
MQ manager disconnection is attempted
WHEN:
Disconnection fails with error condition
THEN:
- System captures error details
- Initiates error handling process
β Consolidated Acceptance Criteria
- Error handling determines the error is unrecoverable → system performs abnormal termination with error details
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SystemAbend(["Start Step"])
E_SystemAbend(["End Step"])
N_SystemAbend_Node0{"Error handling determines the error
is unrecoverable"}:::decision N_SystemAbend_Node0_action["System performs abnormal
termination with error details"]:::exclusion N_SystemAbend_Node0 -- Yes -->|Alternative| N_SystemAbend_Node0_action N_SystemAbend_Node0_action --> E_SystemAbend S_SystemAbend --> N_SystemAbend_Node0 N_SystemAbend_Node0 -- No --> E_SystemAbend
is unrecoverable"}:::decision N_SystemAbend_Node0_action["System performs abnormal
termination with error details"]:::exclusion N_SystemAbend_Node0 -- Yes -->|Alternative| N_SystemAbend_Node0_action N_SystemAbend_Node0_action --> E_SystemAbend S_SystemAbend --> N_SystemAbend_Node0 N_SystemAbend_Node0 -- No --> E_SystemAbend
File: GCX015.cbl
GIVEN:
MQ close or disconnect operation has failed
WHEN:
Error handling determines the error is unrecoverable
THEN:
System performs abnormal termination with error details
β Consolidated Acceptance Criteria
- The M10 segment reference number equals 'TRAINCPRSTESTTRAIN0000000000' or 'CARGOCPRS940000000000' → the system should clear the message array, set the end processing flag to true, and terminate message processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_CheckReferenceNumber(["Start Step"])
E_CheckReferenceNumber(["End Step"])
N_CheckReferenceNumber_Node0{"The M10 segment reference number
equals TRAINCPRSTESTTRAIN0000000000
or CARGOCPRS940000000000"}:::decision N_CheckReferenceNumber_Node0_action["The system should clear the message
array, set the end processing flag
to true, and terminate message
processing"]:::exclusion N_CheckReferenceNumber_Node0 -- Yes -->|Alternative| N_CheckReferenceNumber_Node0_action N_CheckReferenceNumber_Node0_action --> E_CheckReferenceNumber S_CheckReferenceNumber --> N_CheckReferenceNumber_Node0 N_CheckReferenceNumber_Node0 -- No --> E_CheckReferenceNumber
equals TRAINCPRSTESTTRAIN0000000000
or CARGOCPRS940000000000"}:::decision N_CheckReferenceNumber_Node0_action["The system should clear the message
array, set the end processing flag
to true, and terminate message
processing"]:::exclusion N_CheckReferenceNumber_Node0 -- Yes -->|Alternative| N_CheckReferenceNumber_Node0_action N_CheckReferenceNumber_Node0_action --> E_CheckReferenceNumber S_CheckReferenceNumber --> N_CheckReferenceNumber_Node0 N_CheckReferenceNumber_Node0 -- No --> E_CheckReferenceNumber
File: GCX015.cbl
GIVEN:
A message segment is being processed and it is identified as an M10 segment type
WHEN:
The M10 segment reference number equals 'TRAINCPRSTESTTRAIN0000000000' or 'CARGOCPRS940000000000'
THEN:
The system should clear the message array, set the end processing flag to true, and terminate message processing
β Consolidated Acceptance Criteria
- The test message handling is complete → the system should set WS-END-FOUND to true to indicate end of processing
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SetEndProcessingFlag(["Start Step"])
E_SetEndProcessingFlag(["End Step"])
N_SetEndProcessingFlag_Node0{"The test message handling is
complete"}:::decision N_SetEndProcessingFlag_Node0_action["The system should set WS-END-FOUND
to true to indicate end of
processing"]:::main N_SetEndProcessingFlag_Node0 -- Yes --> N_SetEndProcessingFlag_Node0_action N_SetEndProcessingFlag_Node0_action --> E_SetEndProcessingFlag S_SetEndProcessingFlag --> N_SetEndProcessingFlag_Node0 N_SetEndProcessingFlag_Node0 -- No --> E_SetEndProcessingFlag
complete"}:::decision N_SetEndProcessingFlag_Node0_action["The system should set WS-END-FOUND
to true to indicate end of
processing"]:::main N_SetEndProcessingFlag_Node0 -- Yes --> N_SetEndProcessingFlag_Node0_action N_SetEndProcessingFlag_Node0_action --> E_SetEndProcessingFlag S_SetEndProcessingFlag --> N_SetEndProcessingFlag_Node0 N_SetEndProcessingFlag_Node0 -- No --> E_SetEndProcessingFlag
File: GCX015.cbl
GIVEN:
A special test message has been processed and the message array has been cleared
WHEN:
The test message handling is complete
THEN:
The system should set WS-END-FOUND to true to indicate end of processing
β Consolidated Acceptance Criteria
- The T1 administrative table retrieval fails and return flag is not equal to '0' → the system should log an error message 'T1 CHECK TABLE ENTRY NOT FOUND' and terminate the timestamp update process
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_TableFoundLogErrorTableNotFound(["Start Step"])
E_TableFoundLogErrorTableNotFound(["End Step"])
N_TableFoundLogErrorTableNotFound_Node0{"The T1 administrative table
retrieval fails and return flag is
not equal to 0"}:::decision N_TableFoundLogErrorTableNotFound_Node0_action["The system should log an error
message T1 CHECK TABLE ENTRY NOT
FOUND and terminate the timestamp
update process"]:::exclusion N_TableFoundLogErrorTableNotFound_Node0 -- Yes -->|Alternative| N_TableFoundLogErrorTableNotFound_Node0_action N_TableFoundLogErrorTableNotFound_Node0_action --> E_TableFoundLogErrorTableNotFound S_TableFoundLogErrorTableNotFound --> N_TableFoundLogErrorTableNotFound_Node0 N_TableFoundLogErrorTableNotFound_Node0 -- No --> E_TableFoundLogErrorTableNotFound
retrieval fails and return flag is
not equal to 0"}:::decision N_TableFoundLogErrorTableNotFound_Node0_action["The system should log an error
message T1 CHECK TABLE ENTRY NOT
FOUND and terminate the timestamp
update process"]:::exclusion N_TableFoundLogErrorTableNotFound_Node0 -- Yes -->|Alternative| N_TableFoundLogErrorTableNotFound_Node0_action N_TableFoundLogErrorTableNotFound_Node0_action --> E_TableFoundLogErrorTableNotFound S_TableFoundLogErrorTableNotFound --> N_TableFoundLogErrorTableNotFound_Node0 N_TableFoundLogErrorTableNotFound_Node0 -- No --> E_TableFoundLogErrorTableNotFound
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The system is attempting to retrieve the T1 administrative table for timestamp updates
WHEN:
- The t1 administrative table retrieval fails
- Return flag is not equal to '0'
THEN:
The system should log an error message 'T1 CHECK TABLE ENTRY NOT FOUND' and terminate the timestamp update process
β Consolidated Acceptance Criteria
- The manifest type code equals 'P' → the system should update the 309 ACK timestamp with current system date (positions 3-6), current century (positions 1-2), and current system time (positions 9-4)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ManifestTypePUpdate309ACKTimestamp(["Start Step"])
E_ManifestTypePUpdate309ACKTimestamp(["End Step"])
N_ManifestTypePUpdate309ACKTimestamp_Node0{"The manifest type code equals P"}:::decision
N_ManifestTypePUpdate309ACKTimestamp_Node0_action["The system should update the 309
ACK timestamp with current system
date positions 3-6, current century
positions 1-2, and current system
time positions 9-4"]:::main N_ManifestTypePUpdate309ACKTimestamp_Node0 -- Yes --> N_ManifestTypePUpdate309ACKTimestamp_Node0_action N_ManifestTypePUpdate309ACKTimestamp_Node0_action --> E_ManifestTypePUpdate309ACKTimestamp S_ManifestTypePUpdate309ACKTimestamp --> N_ManifestTypePUpdate309ACKTimestamp_Node0 N_ManifestTypePUpdate309ACKTimestamp_Node0 -- No --> E_ManifestTypePUpdate309ACKTimestamp
ACK timestamp with current system
date positions 3-6, current century
positions 1-2, and current system
time positions 9-4"]:::main N_ManifestTypePUpdate309ACKTimestamp_Node0 -- Yes --> N_ManifestTypePUpdate309ACKTimestamp_Node0_action N_ManifestTypePUpdate309ACKTimestamp_Node0_action --> E_ManifestTypePUpdate309ACKTimestamp S_ManifestTypePUpdate309ACKTimestamp --> N_ManifestTypePUpdate309ACKTimestamp_Node0 N_ManifestTypePUpdate309ACKTimestamp_Node0 -- No --> E_ManifestTypePUpdate309ACKTimestamp
File: GCX015.cbl
GIVEN:
The T1 administrative table is available and a manifest transaction is being processed
WHEN:
The manifest type code equals 'P'
THEN:
The system should update the 309 ACK timestamp with current system date (positions 3-6), current century (positions 1-2), and current system time (positions 9-4)
β Consolidated Acceptance Criteria
- The manifest type code equals 'H' → the system should update the 353 ACK timestamp with current system date (positions 3-6), current century (positions 1-2), and current system time (positions 9-4)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ManifestTypeHUpdate353ACKTimestamp(["Start Step"])
E_ManifestTypeHUpdate353ACKTimestamp(["End Step"])
N_ManifestTypeHUpdate353ACKTimestamp_Node0{"The manifest type code equals H"}:::decision
N_ManifestTypeHUpdate353ACKTimestamp_Node0_action["The system should update the 353
ACK timestamp with current system
date positions 3-6, current century
positions 1-2, and current system
time positions 9-4"]:::main N_ManifestTypeHUpdate353ACKTimestamp_Node0 -- Yes --> N_ManifestTypeHUpdate353ACKTimestamp_Node0_action N_ManifestTypeHUpdate353ACKTimestamp_Node0_action --> E_ManifestTypeHUpdate353ACKTimestamp S_ManifestTypeHUpdate353ACKTimestamp --> N_ManifestTypeHUpdate353ACKTimestamp_Node0 N_ManifestTypeHUpdate353ACKTimestamp_Node0 -- No --> E_ManifestTypeHUpdate353ACKTimestamp
ACK timestamp with current system
date positions 3-6, current century
positions 1-2, and current system
time positions 9-4"]:::main N_ManifestTypeHUpdate353ACKTimestamp_Node0 -- Yes --> N_ManifestTypeHUpdate353ACKTimestamp_Node0_action N_ManifestTypeHUpdate353ACKTimestamp_Node0_action --> E_ManifestTypeHUpdate353ACKTimestamp S_ManifestTypeHUpdate353ACKTimestamp --> N_ManifestTypeHUpdate353ACKTimestamp_Node0 N_ManifestTypeHUpdate353ACKTimestamp_Node0 -- No --> E_ManifestTypeHUpdate353ACKTimestamp
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The T1 administrative table is available and a manifest transaction is being processed with manifest type not equal to 'P'
WHEN:
The manifest type code equals 'H'
THEN:
The system should update the 353 ACK timestamp with current system date (positions 3-6), current century (positions 1-2), and current system time (positions 9-4)
β Consolidated Acceptance Criteria
- The manifest type code equals 'S' → the system should update the 358 ACK timestamp with current system date (positions 3-6), current century (positions 1-2), and current system time (positions 9-4)
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_ManifestTypeSUpdate358ACKTimestamp(["Start Step"])
E_ManifestTypeSUpdate358ACKTimestamp(["End Step"])
N_ManifestTypeSUpdate358ACKTimestamp_Node0{"The manifest type code equals S"}:::decision
N_ManifestTypeSUpdate358ACKTimestamp_Node0_action["The system should update the 358
ACK timestamp with current system
date positions 3-6, current century
positions 1-2, and current system
time positions 9-4"]:::main N_ManifestTypeSUpdate358ACKTimestamp_Node0 -- Yes --> N_ManifestTypeSUpdate358ACKTimestamp_Node0_action N_ManifestTypeSUpdate358ACKTimestamp_Node0_action --> E_ManifestTypeSUpdate358ACKTimestamp S_ManifestTypeSUpdate358ACKTimestamp --> N_ManifestTypeSUpdate358ACKTimestamp_Node0 N_ManifestTypeSUpdate358ACKTimestamp_Node0 -- No --> E_ManifestTypeSUpdate358ACKTimestamp
ACK timestamp with current system
date positions 3-6, current century
positions 1-2, and current system
time positions 9-4"]:::main N_ManifestTypeSUpdate358ACKTimestamp_Node0 -- Yes --> N_ManifestTypeSUpdate358ACKTimestamp_Node0_action N_ManifestTypeSUpdate358ACKTimestamp_Node0_action --> E_ManifestTypeSUpdate358ACKTimestamp S_ManifestTypeSUpdate358ACKTimestamp --> N_ManifestTypeSUpdate358ACKTimestamp_Node0 N_ManifestTypeSUpdate358ACKTimestamp_Node0 -- No --> E_ManifestTypeSUpdate358ACKTimestamp
File: GCX015.cbl
Exclusion / Alternative Path
GIVEN:
The T1 administrative table is available and a manifest transaction is being processed with manifest type not equal to 'P' or 'H'
WHEN:
The manifest type code equals 'S'
THEN:
The system should update the 358 ACK timestamp with current system date (positions 3-6), current century (positions 1-2), and current system time (positions 9-4)
β Consolidated Acceptance Criteria
- All timestamp updates are complete → the system should save the updated T1 table segment back to the administrative table using replace function
Step Micro-Flow Sequence
flowchart TD
classDef main fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
classDef exclusion fill:#fadbd8,stroke:#e74c3c,stroke-width:2px,color:#c0392b;
classDef decision fill:#e9f7ef,stroke:#27ae60,stroke-width:2px;
S_SaveUpdatedTimestampstoT1Table(["Start Step"])
E_SaveUpdatedTimestampstoT1Table(["End Step"])
N_SaveUpdatedTimestampstoT1Table_Node0{"All timestamp updates are complete"}:::decision
N_SaveUpdatedTimestampstoT1Table_Node0_action["The system should save the updated
T1 table segment back to the
administrative table using replace
function"]:::main N_SaveUpdatedTimestampstoT1Table_Node0 -- Yes --> N_SaveUpdatedTimestampstoT1Table_Node0_action N_SaveUpdatedTimestampstoT1Table_Node0_action --> E_SaveUpdatedTimestampstoT1Table S_SaveUpdatedTimestampstoT1Table --> N_SaveUpdatedTimestampstoT1Table_Node0 N_SaveUpdatedTimestampstoT1Table_Node0 -- No --> E_SaveUpdatedTimestampstoT1Table
T1 table segment back to the
administrative table using replace
function"]:::main N_SaveUpdatedTimestampstoT1Table_Node0 -- Yes --> N_SaveUpdatedTimestampstoT1Table_Node0_action N_SaveUpdatedTimestampstoT1Table_Node0_action --> E_SaveUpdatedTimestampstoT1Table S_SaveUpdatedTimestampstoT1Table --> N_SaveUpdatedTimestampstoT1Table_Node0 N_SaveUpdatedTimestampstoT1Table_Node0 -- No --> E_SaveUpdatedTimestampstoT1Table
File: GCX015.cbl
GIVEN:
The T1 administrative table has been retrieved and acknowledgment timestamps have been updated based on manifest type
WHEN:
All timestamp updates are complete
THEN:
The system should save the updated T1 table segment back to the administrative table using replace function