File size: 53,679 Bytes
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
44cddac
8f4d2d0
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
44cddac
 
 
 
8f4d2d0
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
44cddac
8f4d2d0
 
 
44cddac
 
 
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44cddac
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44cddac
 
8f4d2d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
# EuNEx Process Diagram

## End-to-End Order Flow (Optiq-style)

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                              EXTERNAL CLIENTS                                      β”‚
 β”‚                     FIX 5.0 SP2 / SBE Binary Protocol                              β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚
                                  β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  OEGActor  (Core 0)                                    ← Optiq: OEG/OEActorβ”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
 β”‚ β”‚  β€’ Accepts NewOrder / Cancel / Modify requests                              β”‚   β”‚
 β”‚ β”‚  β€’ Validates session, routes by SymbolIndex β†’ correct MECoreActor        β”‚   β”‚
 β”‚ β”‚  β€’ Sends ExecutionReports back to client (ack, fill, reject)                β”‚   β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                  β”‚ NewOrderEvent / CancelOrderEvent / ModifyOrderEvent
                                  β”‚ (Simplx Event::Pipe β€” lock-free cross-core delivery)
                                  β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  MECoreActor  (Core 1)  β€” one per symbol      ← Optiq: LogicalCoreActor + Bookβ”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
 β”‚ β”‚                        RECOVERY CAUSE                                       β”‚   β”‚
 β”‚ β”‚  RecoveryProxy.cause(persistenceId, order, callback)                        β”‚   β”‚
 β”‚ β”‚  β€’ Persists incoming event to FragmentStore (β†’ Kafka in production)          β”‚   β”‚
 β”‚ β”‚  β€’ Assigns chainId + sequence for IACA tracking                             β”‚   β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
 β”‚                                    β–Ό                                               β”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
 β”‚ β”‚                        MATCHING ENGINE                                      β”‚   β”‚
 β”‚ β”‚  Book.newOrder() / cancelOrder() / modifyOrder()                       β”‚   β”‚
 β”‚ β”‚  β€’ Price-time priority matching (std::map<Price, std::deque<Order>>)        β”‚   β”‚
 β”‚ β”‚  β€’ FOK: reject if insufficient liquidity                                    β”‚   β”‚
 β”‚ β”‚  β€’ IOC: fill what's available, cancel remainder                             β”‚   β”‚
 β”‚ β”‚  β€’ Market: match at any price, never rests on book                          β”‚   β”‚
 β”‚ β”‚  β€’ Multi-level sweep across price levels                                    β”‚   β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
 β”‚        β”‚                                                 β”‚                         β”‚
 β”‚        β–Ό                                                 β–Ό                         β”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
 β”‚ β”‚  IACA CAUSE        β”‚                    β”‚  RECOVERY EFFECT (Master only)    β”‚   β”‚
 β”‚ β”‚  IacaFragment:     β”‚                    β”‚  RecoveryProxy.effect(callback)   β”‚   β”‚
 β”‚ β”‚  β€’ BOOK root frag  β”‚                    β”‚  β€’ Sends ExecReport β†’ OEG  β”‚   β”‚
 β”‚ β”‚  β€’ ACK child frag  β”‚                    β”‚  β€’ Sends TradeEvent β†’ MarketData β”‚   β”‚
 β”‚ β”‚  β€’ TRADE child fragβ”‚                    β”‚  β€’ Sends BookUpdate β†’ MarketData β”‚   β”‚
 β”‚ β”‚  (nextCount check) β”‚                    β”‚  β€’ Mirror skips all effects      β”‚   β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
 β”‚          β”‚                                          β”‚          β”‚                   β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚                                          β”‚          β”‚
            β–Ό                                          β”‚          β”‚
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚          β”‚
 β”‚  IacaAggregator          β”‚                          β”‚          β”‚
 β”‚  ← Optiq: IacaActor      β”‚                          β”‚          β”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚                          β”‚          β”‚
 β”‚ β”‚ Collects fragments   β”‚ β”‚                          β”‚          β”‚
 β”‚ β”‚ per chainId          β”‚ β”‚                          β”‚          β”‚
 β”‚ β”‚ Detects completion   β”‚ β”‚                          β”‚          β”‚
 β”‚ β”‚ (sum nextCount ==    β”‚ β”‚                          β”‚          β”‚
 β”‚ β”‚  total fragments -1) β”‚ β”‚                          β”‚          β”‚
 β”‚ β”‚ Fires handler β†’      β”‚ β”‚                          β”‚          β”‚
 β”‚ β”‚ IA SBE message       β”‚ β”‚                          β”‚          β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚                          β”‚          β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚          β”‚
            β”‚ IA message                               β”‚          β”‚
            β–Ό                                          β”‚          β”‚
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  Future: IDS / PTB /     β”‚              β”‚  MDGActor  (Core 2)              β”‚
 β”‚  SATURN / Clearing       β”‚              β”‚  ← Optiq: MDLimitLogicalCoreHandler     β”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚              β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
 β”‚ β”‚ IDS: Intraday Data   β”‚ β”‚              β”‚ β”‚ β€’ Maintains BBO snapshot per sym  β”‚   β”‚
 β”‚ β”‚ PTB: Post-Trade Bus  β”‚ β”‚              β”‚ β”‚ β€’ Stores recent trades            β”‚   β”‚
 β”‚ β”‚ SATURN: ARM reportingβ”‚ β”‚              β”‚ β”‚ β€’ Publishes BookUpdateEvent       β”‚   β”‚
 β”‚ β”‚ Clearing: LCH/CC&G   β”‚ β”‚              β”‚ β”‚   (bestBid, bestAsk, depths)      β”‚   β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚              β”‚ β”‚ β†’ Future: multicast SBE feed      β”‚   β”‚
 β”‚  (not yet implemented)   β”‚              β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

## Master / Mirror High Availability

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚           MASTER NODE                   β”‚     β”‚         MIRROR NODE             β”‚
 β”‚                                         β”‚     β”‚                                 β”‚
 β”‚  RecoveryProxy(isMaster=true)           β”‚     β”‚  RecoveryProxy(isMaster=false)  β”‚
 β”‚                                         β”‚     β”‚                                 β”‚
 β”‚  cause() β†’ persist + run callback  βœ“    β”‚     β”‚  cause() β†’ persist + callback βœ“β”‚
 β”‚  effect() β†’ execute side-effects   βœ“    │────▢│  effect() β†’ SKIP (no-op)   βœ—   β”‚
 β”‚  recoveryEffect() β†’ SKIP          βœ—    β”‚     β”‚  recoveryEffect() β†’ execute βœ“  β”‚
 β”‚                                         β”‚     β”‚                                 β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚  β”‚ FragmentStore (shared memory)   │────┼─────┼─▢│ Same FragmentStore        β”‚  β”‚
 β”‚  β”‚ β†’ Kafka topic in production     β”‚    β”‚     β”‚  β”‚ (Kafka consumer replay)   β”‚  β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                  On failover: Mirror becomes Master,
                                                  replays FragmentStore, resumes effects
```

## IACA Fragment Chain Example (Buy order that matches)

```
 Chain #42: BUY 60 @ 50.00 (matches resting SELL 100 @ 50.00)

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  Fragment 1 (ROOT)          β”‚
 β”‚  origin: BOOK:1:seq         β”‚
 β”‚  previousOrigin: null       β”‚
 β”‚  causeId: NEW_ORDER_BUY     β”‚
 β”‚  nextCount: 2               │──────┐
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
          β”‚                            β”‚
          β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚  2 children expected
          β–Ό               β–Ό            β”‚  2 children found β†’ COMPLETE
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
 β”‚ Fragment 2  β”‚  β”‚ Fragment 3  β”‚     β”‚
 β”‚ ACK_DATA    β”‚  β”‚ TRADE_DATA  β”‚     β”‚
 β”‚ prev: ROOT  β”‚  β”‚ prev: ROOT  β”‚     β”‚
 β”‚ nextCount: 0β”‚  β”‚ nextCount: 0β”‚     β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                       β”‚
 sum(nextCount) = 2 + 0 + 0 = 2  β”€β”€β”€β”€β”€β”˜
 total fragments = 3
 complete when: sum == total - 1  βœ“ (2 == 3-1)
           β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Handler fires:          β”‚
 β”‚ NewOrderHandler β†’       β”‚
 β”‚ Generate IA SBE message β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

## Component Mapping: StockEx β†’ EuNEx β†’ Optiq Production

```
 StockEx (Python/Kafka)          EuNEx (C++/Simplx shim)         Optiq (Production)
 ═══════════════════════         ═══════════════════════          ══════════════════

 fix_oeg_server.py         ───▢  OEGActor                  ───▢  OEActor (FIX/SBE)
   Kafka 'orders' topic    ───▢    Event::Pipe              ───▢    Simplx cross-core
   session mgmt            ───▢    submitNewOrder()          ───▢    FIX 5.0 SP2 acceptor

 matcher.py                ───▢  MECoreActor                ───▢  LogicalCoreActor
   match_order()           ───▢    Book::newOrder()          ───▢    RecoveryCauseβ†’IACAβ†’Book
   handle_cancel()         ───▢    Book::cancelOrder()       ───▢    CancelOrderData
   handle_amend()          ───▢    Book::modifyOrder()       ───▢    ModifyOrderData
   Kafka 'trades' topic    ───▢    TradeEvent via Pipe       ───▢    IACA fragment chain

 dashboard.py (SSE)        ───▢  MDGActor                   ───▢  MDLimitLogicalCoreHandler
   /orderbook/<sym>        ───▢    BookUpdateEvent           ───▢    PublishLimitUpdateRequest
   /trades                 ───▢    TradeEvent list           ───▢    IAβ†’SBE multicast

 database.py (SQLite)      ───▢  RecoveryProxy (memory)     ───▢  RecoveryProxy β†’ Kafka
   save_trade()            ───▢    FragmentStore::append()   ───▢    PersistenceAgent produce

 (none)                    ───▢  IacaAggregator             ───▢  IacaAggregatorActor
                           ───▢    FragmentChain             ───▢    CoherentFragmentChain
                           ───▢    FragmentHandler           ───▢    FastNewOrderHandler

 (none)                    ───▢  (future)                   ───▢  SATURN/ARM
 (none)                    ───▢  (future)                   ───▢  IDS (Intraday Data)
 (none)                    ───▢  (future)                   ───▢  PTB (Post-Trade Bus)
 (none)                    ───▢  (future)                   ───▢  Clearing (LCH/CC&G)
```

## Data Flow Summary

```
 1. Client ──FIX/SBE──▢ OEGActor ──Event::Pipe──▢ MECoreActor
                              β–²                              β”‚
                              β”‚                              β”œβ”€ RecoveryProxy.cause() β†’ FragmentStore
                              β”‚                              β”œβ”€ Book.match()
                              β”‚                              β”œβ”€ IACA fragments β†’ IacaAggregator
                              β”‚                              β”‚
                 ExecReport β—€β”€β”˜                              β”œβ”€ effect() [Master only]:
                                                             β”‚    β”œβ”€ ExecReport β†’ OEG β†’ Client
                                                             β”‚    β”œβ”€ TradeEvent β†’ MDGActor
                                                             β”‚    └─ BookUpdate β†’ MDGActor
                                                             β”‚
                                                             └─ IacaAggregator
                                                                  └─ complete chain β†’ IA message
                                                                       └─ (future) IDS/PTB/SATURN
```

---

## Future Expansion: Full Optiq Production Topology

The diagram below shows the complete Optiq production trade path (from `Trades paths.drawio`
and the Optiq Overview/SATURN presentations) with EuNEx components mapped where they exist
and `[FUTURE]` markers where implementation is needed.

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                             TRADING MEMBERS (Clients)                                   β”‚
 β”‚               FIX 5.0 SP2 / SBE / TCS OTC / SATURN Web / EMS / DAS                     β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚              β”‚                      β”‚                   β”‚
             β–Ό              β–Ό                      β–Ό                   β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  OEG.n.BOTH   β”‚  β”‚  TCS.IN/OUT  β”‚    β”‚  SATURN Web/API  β”‚  β”‚  EMS / DAS     β”‚
 β”‚  (OEG   β”‚  β”‚  [FUTURE]    β”‚    β”‚  [FUTURE]        β”‚  β”‚  [FUTURE]      β”‚
 β”‚   Actor) βœ“    β”‚  β”‚  Trade       β”‚    β”‚  External trade  β”‚  β”‚  Execution     β”‚
 β”‚               β”‚  β”‚  Capture     β”‚    β”‚  declarations    β”‚  β”‚  Mgmt System   β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  Service     β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚          β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
         β”‚ ord             β”‚ Trade Decl          β”‚
         β–Ό                 β–Ό                     β”‚
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  ME / Trading Chain                                                                    β”‚
 β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚ β”‚  Book / LogCore#n  (MECoreActor) βœ“                                              β”‚  β”‚
 β”‚ β”‚                                                                                    β”‚  β”‚
 β”‚ β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚  β”‚
 β”‚ β”‚  β”‚ Recovery Cause  β”‚  β”‚ Matching Engine β”‚  β”‚ IACA Inside     β”‚                    β”‚  β”‚
 β”‚ β”‚  β”‚ (RecoveryProxy  β”‚  β”‚ (Book) βœ“   β”‚  β”‚ (IacaAggregator β”‚                    β”‚  β”‚
 β”‚ β”‚  β”‚  β†’ Kafka) βœ“     β”‚  β”‚                 β”‚  β”‚  partial) βœ“     β”‚                    β”‚  β”‚
 β”‚ β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚  β”‚
 β”‚ β”‚           β”‚                    β”‚                     β”‚                              β”‚  β”‚
 β”‚ β”‚           β–Ό                    β–Ό                     β–Ό                              β”‚  β”‚
 β”‚ β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                      β”‚  β”‚
 β”‚ β”‚  β”‚         Kafka Bus (KFK)  [FUTURE β€” currently in-memory]  β”‚                      β”‚  β”‚
 β”‚ β”‚  β””β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                      β”‚  β”‚
 β”‚ β””β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚      β”‚      β”‚      β”‚      β”‚      β”‚      β”‚      β”‚
          β–Ό      β–Ό      β–Ό      β–Ό      β–Ό      β–Ό      β–Ό      β–Ό
```

### Downstream Consumers from Kafka Bus

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Kafka Topics ──────────────────────────────────────────────────────┐
 β”‚  recovery+audit trail β”‚ MktUpdt,FullTradeInfo β”‚ Trade Fill β”‚ IACA fragments       β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚               β”‚          β”‚            β”‚     β”‚     β”‚          β”‚
         β–Ό               β–Ό          β”‚            β”‚     β”‚     β”‚          β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚            β”‚     β”‚     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  PE DB       β”‚ β”‚ MDG         β”‚   β”‚            β”‚     β”‚     β”‚  β”‚ IACA FINISH      β”‚
 β”‚ [FUTURE]     β”‚ β”‚(MarketData  β”‚   β”‚            β”‚     β”‚     β”‚  β”‚ [FUTURE]         β”‚
 β”‚ Persistence  β”‚ β”‚ Actor) βœ“    β”‚   β”‚            β”‚     β”‚     β”‚  β”‚ Completes chains β”‚
 β”‚ Engine DB    β”‚ β”‚             β”‚   β”‚            β”‚     β”‚     β”‚  β”‚ β†’ IA SBE messagesβ”‚
 β”‚ (order state β”‚ β”‚ Multicast   β”‚   β”‚            β”‚     β”‚     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
 β”‚  snapshots)  β”‚ β”‚ SBE feed    β”‚   β”‚            β”‚     β”‚     β”‚           β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ [FUTURE]    β”‚   β”‚            β”‚     β”‚     β”‚           β–Ό
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚            β”‚     β”‚     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                    β–Ό            β”‚     β”‚     β”‚  β”‚ IACA COPY        β”‚
                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚     β”‚     β”‚  β”‚ [FUTURE]         β”‚
                          β”‚ IDS              β”‚   β”‚     β”‚     β”‚  β”‚ Copy to members  β”‚
                          β”‚ [FUTURE]         β”‚   β”‚     β”‚     β”‚  β”‚ (DropCopy/DCG)   β”‚
                          β”‚ Intraday Data    β”‚   β”‚     β”‚     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚ Service          β”‚   β”‚     β”‚     β”‚
                          β”‚ (files to        β”‚   β”‚     β”‚     β”‚
                          β”‚  regulators)     β”‚   β”‚     β”‚     β”‚
                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚     β”‚     β”‚
                                                 β–Ό     β”‚     β”‚
                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚     β”‚
                                    β”‚ PTB            β”‚ β”‚     β”‚
                                    β”‚ [FUTURE]       β”‚ β”‚     β”‚
                                    β”‚ Post-Trade Box β”‚ β”‚     β”‚
                                    β”‚ (admin,        β”‚ β”‚     β”‚
                                    β”‚  resilience)   β”‚ β”‚     β”‚
                                    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚     β”‚
                                            β”‚          β”‚     β”‚
                                            β–Ό          β–Ό     β–Ό
                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                              β”‚         CLEARING  [FUTURE]                 β”‚
                              β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                              β”‚ β”‚ EuroCCP  β”‚ β”‚ LCH Ltd  β”‚ β”‚ SIX Xclear β”‚  β”‚
                              β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                              β”‚     Enxt Clearing ← PTB2EC               β”‚
                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Future Expansion: Trading Phases & Order Types

Based on the Euronext Trading Manual (Notice 4-01, Dec 2025).

### Trading Day Phases (not yet implemented in EuNEx)

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                    CONTINUOUS TRADING DAY LIFECYCLE                              β”‚
 β”‚                                                                                 β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚  β”‚ Pre-opening β”‚  β”‚ Opening  β”‚  β”‚     Main       β”‚  β”‚Pre-close β”‚  β”‚Closing β”‚  β”‚
 β”‚  β”‚ Call Phase  │──▢│Uncrossing│──▢│   Trading     │──▢│Call Phase│──▢│Uncross β”‚  β”‚
 β”‚  β”‚             β”‚  β”‚          β”‚  β”‚   Session      β”‚  β”‚          β”‚  β”‚        β”‚  β”‚
 β”‚  β”‚ Orders      β”‚  β”‚ Book     β”‚  β”‚ Continuous     β”‚  β”‚ Orders   β”‚  β”‚ Max    β”‚  β”‚
 β”‚  β”‚ accumulate, β”‚  β”‚ frozen,  β”‚  β”‚ matching,      β”‚  β”‚ accum.,  β”‚  β”‚ exec.  β”‚  β”‚
 β”‚  β”‚ IOP calc'd  β”‚  β”‚ IOP β†’    β”‚  β”‚ price-time     β”‚  β”‚ no       β”‚  β”‚ price  β”‚  β”‚
 β”‚  β”‚ continuouslyβ”‚  β”‚ opening  β”‚  β”‚ priority       β”‚  β”‚ trades   β”‚  β”‚ algo   β”‚  β”‚
 β”‚  β”‚             β”‚  β”‚ price    β”‚  β”‚                β”‚  β”‚          β”‚  β”‚        β”‚  β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β”‚
 β”‚                                                                        β”‚       β”‚
 β”‚                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚       β”‚
 β”‚                   β”‚ AVD Orders     β”‚    β”‚ Trading-at-Last     β”‚β—€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
 β”‚                   β”‚ [FUTURE]       β”‚    β”‚ [FUTURE]            β”‚                β”‚
 β”‚                   β”‚ Auction Volume β”‚    β”‚ Trade only at TAL   β”‚                β”‚
 β”‚                   β”‚ Discovery β€”    β”‚    β”‚ price (= last trade β”‚                β”‚
 β”‚                   β”‚ after each     β”‚    β”‚ or closing price)   β”‚                β”‚
 β”‚                   β”‚ uncrossing     β”‚    β”‚                     β”‚                β”‚
 β”‚                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### Order Types Roadmap

```
 Currently Implemented (EuNEx)          To Be Added
 ═══════════════════════════            ═════════════════════════════════════════

 βœ“ Limit orders                        β–‘ Market-to-Limit orders
 βœ“ Market orders (IOC)                    (converted to limit at best opposite)
 βœ“ IOC (Immediate or Cancel)           β–‘ Stop-Market orders
 βœ“ FOK (Fill or Kill)                     (triggered when price crosses stop)
 βœ“ Day validity                        β–‘ Stop-Limit orders
 βœ“ Cancel order                           (stop trigger + limit price)
 βœ“ Modify order                        β–‘ Primary Pegged orders
                                           (pegged to BBO, auto-reprice)
                                        β–‘ Mid-Point orders
                                           (pegged to mid of BBO spread)
                                        β–‘ Iceberg orders
                                           (displayed qty + hidden reserve)
                                        β–‘ AVD orders (Auction Volume Discovery)
                                           (fill imbalance after uncrossing)
                                        β–‘ GTD / GTC validity
                                           (Good Till Date / Good Till Cancel)
                                        β–‘ VFU / VFCU validity
                                           (Valid For Uncrossing / Closing Uncr.)
```

### Uncrossing Algorithm (Opening / Closing)

```
 [FUTURE] Uncrossing price determination algorithm:

 Step 1: Maximum Execution Principle
         Find price P that maximizes executable volume

 Step 2: Minimum Surplus
         If tie β†’ pick P with smallest order imbalance

 Step 3: Reference Price
         If still tie β†’ pick P closest to previous reference price

 Step 4: Market Pressure
         If still tie β†’ pick higher P if buy surplus, lower if sell surplus

 Currently EuNEx uses continuous matching only.
 Uncrossing requires:
   β€’ TradingPhaseManager actor
   β€’ Theoretical Opening Price (IOP) calculation
   β€’ Book freeze during uncrossing
   β€’ AVD order processing after uncrossing
```

### Price Collars & Reservations

```
 [FUTURE] Price protection mechanisms:

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  DYNAMIC COLLARS                                          β”‚
 β”‚  Based on last traded price Β± threshold %                 β”‚
 β”‚  Breach β†’ order rejected or book reserved                 β”‚
 β”‚                                                           β”‚
 β”‚  STATIC COLLARS                                           β”‚
 β”‚  Based on reference price Β± wider threshold %             β”‚
 β”‚  Breach during continuous β†’ reservation + uncrossing      β”‚
 β”‚                                                           β”‚
 β”‚  RESERVATION                                              β”‚
 β”‚  Book frozen, enters call phase                           β”‚
 β”‚  Duration: configurable per trading group                 β”‚
 β”‚  After reservation β†’ uncrossing to resume trading         β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Future Expansion: Segments & Partitions

From the Optiq Architecture presentation.

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                    OPTIQ SEGMENTS                                   β”‚
 β”‚                                                                     β”‚
 β”‚  Cash                              Derivatives                      β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”       β”‚
 β”‚  β”‚ EQU β”‚ β”‚ ETF β”‚ β”‚ FXI β”‚ β”‚ WAR β”‚  β”‚ EQD β”‚ β”‚ IDD β”‚ β”‚ CMO β”‚       β”‚
 β”‚  β”‚Equitβ”‚ β”‚Trackβ”‚ β”‚Bondsβ”‚ β”‚Warr β”‚  β”‚Eq.  β”‚ β”‚Indexβ”‚ β”‚Commoβ”‚       β”‚
 β”‚  β”‚ies  β”‚ β”‚ers  β”‚ β”‚Debt β”‚ β”‚ants β”‚  β”‚Derivβ”‚ β”‚Derivβ”‚ β”‚dity β”‚       β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜       β”‚
 β”‚                                                                     β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”                                                           β”‚
 β”‚  β”‚ BLK β”‚  Block β€” large trades off main book                       β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”˜                                                           β”‚
 β”‚                                                                     β”‚
 β”‚  Each segment has:                                                  β”‚
 β”‚    β€’ Own OEG instances (OEG.n.BOTH)                                β”‚
 β”‚    β€’ Own ME partitions                                              β”‚
 β”‚    β€’ Own MDG multicast channels                                     β”‚
 β”‚                                                                     β”‚
 β”‚  EuNEx currently: single segment, single partition                  β”‚
 β”‚  [FUTURE] Multi-segment support via SegmentManager actor            β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                    PARTITIONS (Horizontal Scalability)               β”‚
 β”‚                                                                     β”‚
 β”‚  1 Partition = 1 Machine = 1 TRNODE                                β”‚
 β”‚                                                                     β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
 β”‚  β”‚ Partition 1β”‚  β”‚ Partition 2β”‚  β”‚ Partition 3β”‚  β”‚ Partition 4β”‚   β”‚
 β”‚  β”‚ Group 11   β”‚  β”‚ Group 16   β”‚  β”‚ Group 35   β”‚  β”‚ Group 37   β”‚   β”‚
 β”‚  β”‚ Group 12   β”‚  β”‚ Group 17   β”‚  β”‚ Group 44   β”‚  β”‚ ...        β”‚   β”‚
 β”‚  β”‚ Group 13   β”‚  β”‚ ...        β”‚  β”‚ ...        β”‚  β”‚            β”‚   β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
 β”‚                                                                     β”‚
 β”‚  Cross-partition orders β†’ routed via OEG to correct partition      β”‚
 β”‚                                                                     β”‚
 β”‚  Trading Group = set of instruments with shared:                    β”‚
 β”‚    β€’ Trading schedule (phases, times)                               β”‚
 β”‚    β€’ Matching rules                                                 β”‚
 β”‚    β€’ Collar parameters                                              β”‚
 β”‚    β€’ Market segment or liquidity level                              β”‚
 β”‚                                                                     β”‚
 β”‚  Each Instrument:                                                   β”‚
 β”‚    β€’ Identified by SymbolIndex                                      β”‚
 β”‚    β€’ May have multiple order books                                  β”‚
 β”‚    β€’ Inherits trading group attributes                              β”‚
 β”‚    β€’ Can override: APF (Authorized Price Fluctuation)               β”‚
 β”‚                                                                     β”‚
 β”‚  EuNEx currently: MECoreActor per symbol, single "partition"    β”‚
 β”‚  [FUTURE] PartitionManager distributes symbols across nodes         β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Future Expansion: SATURN (Regulatory Reporting)

From the SATURN Overview v1.0.4 presentation.

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                          SATURN SYSTEM  [FUTURE]                                   β”‚
 β”‚                                                                                    β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚  β”‚  ARM β€” Approved Reporting Mechanism (MiFID II RTS 22)                        β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Trading Engine ──order msg──▢ Check Library ──▢ Reporting Tool ──▢ NCAs     β”‚  β”‚
 β”‚  β”‚       (ME)        (incl.        (MiFID II        (RTS 22           (AMF,     β”‚  β”‚
 β”‚  β”‚                    MiFID II      controls,        formatting)       FSMA,    β”‚  β”‚
 β”‚  β”‚                    data)         acceptance/                        CBI,     β”‚  β”‚
 β”‚  β”‚                                  rejection)                         AFM,     β”‚  β”‚
 β”‚  β”‚                                                                     Consob)  β”‚  β”‚
 β”‚  β”‚  External Trades ──▢ Saturn GUI / API / File Upload ──▢ same pipeline       β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  MiFID Firms:     report to regulator of member's country                    β”‚  β”‚
 β”‚  β”‚  Non-MiFID Firms: report to regulator of instrument's MIC                    β”‚  β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
 β”‚                                                                                    β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚  β”‚  OBOE β€” Off-Book On-Exchange (Dublin + Oslo)                                 β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Trade Declaration ──▢ Check Module ──▢ MDG (publication) ──▢ Members        β”‚  β”‚
 β”‚  β”‚  (via Saturn Web / REST API)             (deferred publication rules)         β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Scope: instruments listed on Euronext Dublin & Oslo,                        β”‚  β”‚
 β”‚  β”‚         tradable on Euronext Central Order Book                               β”‚  β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
 β”‚                                                                                    β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚  β”‚  SLC Manager β€” Short Long Code (MiFID II anonymization)                      β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Before:  Order has Member LEI β†’ everyone sees originator                    β”‚  β”‚
 β”‚  β”‚  After:   Order has Short Code 123 β†’ only SATURN maps to LEI               β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Entities hidden: Client ID (LEI), human client (National ID),              β”‚  β”‚
 β”‚  β”‚                   AGGR/PNAL flags, Execution Decision maker,                β”‚  β”‚
 β”‚  β”‚                   Investment Decision maker                                  β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Transmitted to NCAs via RTS 22/24 regulatory reports                       β”‚  β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
 β”‚                                                                                    β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
 β”‚  β”‚  Commodities Reporting (MiFID II RTS 21)                                     β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Daily: positions per client β†’ ESMA/NCAs                                    β”‚  β”‚
 β”‚  β”‚  Weekly: Commitment of Traders (CoT) β†’ Euronext website                     β”‚  β”‚
 β”‚  β”‚                                                                               β”‚  β”‚
 β”‚  β”‚  Sources: Participants & EMS β†’ Saturn β†’ Check Library                       β”‚  β”‚
 β”‚  β”‚  Reference: Matrix (IDS) + European Instruments Referential                 β”‚  β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
 β”‚                                                                                    β”‚
 β”‚  Architecture: Kafka Engine + GUI + API + DB                                       β”‚
 β”‚  Communicates with: ESMA, NCAs (AMF, CBI, FCA, AFM, Consob, CNMV, CSSF, FSMA,   β”‚
 β”‚                     CMVM), Euronext Clearing, Borsa Italiana                       β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Future Expansion: Post-Trade Path

From `Trades paths.drawio` β€” complete downstream flow after trade execution.

```
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                     COMPLETE POST-TRADE PATH  [FUTURE]                           β”‚
 β”‚                                                                                  β”‚
 β”‚  Book/LogCore (trade generated)                                                 β”‚
 β”‚       β”‚                                                                          β”‚
 β”‚       β”œβ”€β”€β–Ά Kafka (recovery + audit trail) ──▢ PE DB (Persistence Engine DB)    β”‚
 β”‚       β”‚                                                                          β”‚
 β”‚       β”œβ”€β”€β–Ά IACA Inside (fragment emission)                                      β”‚
 β”‚       β”‚       β”‚                                                                  β”‚
 β”‚       β”‚       β”œβ”€β”€β–Ά IACA FINISH (chain completion β†’ IA SBE message)             β”‚
 β”‚       β”‚       β”‚       β”‚                                                          β”‚
 β”‚       β”‚       β”‚       β”œβ”€β”€β–Ά IACA COPY (members)  ──▢ Members (DropCopy)         β”‚
 β”‚       β”‚       β”‚       β”œβ”€β”€β–Ά IACA COPY (3rd parties) ──▢ DCG 3P's               β”‚
 β”‚       β”‚       β”‚       β”œβ”€β”€β–Ά IAkafka2DB.TRD ──▢ PE DB (trade persistence)        β”‚
 β”‚       β”‚       β”‚       └──▢ PackFULL / PackTOL ──▢ MDG Emitter ──▢ Members     β”‚
 β”‚       β”‚       β”‚                                                                  β”‚
 β”‚       β”‚       └──▢ IDS (files to IDS) ──▢ Regulators (RTS nn)                  β”‚
 β”‚       β”‚                                                                          β”‚
 β”‚       β”œβ”€β”€β–Ά MktUpdt, FullTradeInfo ──▢ MDG ──▢ Members (market data multicast)  β”‚
 β”‚       β”‚                                                                          β”‚
 β”‚       β”œβ”€β”€β–Ά Trade Fill ──▢ PTB (Post-Trade Box)                                 β”‚
 β”‚       β”‚                       β”‚                                                  β”‚
 β”‚       β”‚                       β”œβ”€β”€β–Ά PTB admin (resilience)                       β”‚
 β”‚       β”‚                       β”œβ”€β”€β–Ά SATURN/OBOE (regulatory reporting)           β”‚
 β”‚       β”‚                       β”œβ”€β”€β–Ά PTB2EC ──▢ Enxt Clearing                    β”‚
 β”‚       β”‚                       β”œβ”€β”€β–Ά EC.POSTTRAD ──▢ Enxt Clearing               β”‚
 β”‚       β”‚                       └──▢ Clearing houses:                             β”‚
 β”‚       β”‚                             EuroCCP, LCH Ltd, SIX Xclear               β”‚
 β”‚       β”‚                                                                          β”‚
 β”‚       └──▢ ACK/NAK ──▢ OEG ──▢ Members (execution reports)                    β”‚
 β”‚                                                                                  β”‚
 β”‚  External entities: DSS, BITA instr., Enxt Legacy instr., SMARTS              β”‚
 β”‚  Risk/Audit: Regulators, Risk/Audit systems                                     β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Market Data Dissemination

From Trading Manual Section 5.

```
 [FUTURE] Market data types to implement:

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚  1. Market by Orders (MBO)                                      β”‚
 β”‚     Every individual order visible in the book                  β”‚
 β”‚     (currently: not disseminated by EuNEx)                      β”‚
 β”‚                                                                  β”‚
 β”‚  2. Market by Limits (MBL)  ← EuNEx has this (BookUpdateEvent) β”‚
 β”‚     Aggregated qty per price level (BBO + depth)                β”‚
 β”‚     getAsks(n) / getBids(n) already implemented                 β”‚
 β”‚                                                                  β”‚
 β”‚  3. Trades                  ← EuNEx has this (TradeEvent)       β”‚
 β”‚     Each trade with price, qty, timestamp                       β”‚
 β”‚                                                                  β”‚
 β”‚  4. Trading Day Price Summary                                   β”‚
 β”‚     Open, High, Low, Close, Volume, VWAP                        β”‚
 β”‚     (currently: not tracked by EuNEx)                            β”‚
 β”‚                                                                  β”‚
 β”‚  Format: SBE multicast (production) vs in-memory events (EuNEx) β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Implementation Priority Roadmap

```
 Phase 1 (Current) βœ“ DONE
 β”œβ”€β”€ Book with price-time priority matching
 β”œβ”€β”€ OEGActor β†’ MECoreActor β†’ MDGActor pipeline
 β”œβ”€β”€ Recovery Cause/Effect with Master/Mirror gating
 β”œβ”€β”€ IACA fragment chains with completion detection
 └── Simplx shim for single-threaded testing

 Phase 2 β€” Core Trading Features
 β”œβ”€β”€ Trading phases (pre-open, uncrossing, continuous, close, TAL)
 β”œβ”€β”€ Uncrossing algorithm (max execution, min surplus, ref price)
 β”œβ”€β”€ Price collars (dynamic + static) and reservations
 β”œβ”€β”€ Additional order types (Stop, Pegged, Mid-Point, Iceberg, M2L)
 β”œβ”€β”€ Additional validities (GTD, GTC, VFU, VFCU)
 └── Trading groups and instrument configuration

 Phase 3 β€” Infrastructure
 β”œβ”€β”€ Real Simplx integration (multi-threaded, multi-core actors)
 β”œβ”€β”€ Kafka persistence (replace FragmentStore with real Kafka)
 β”œβ”€β”€ SBE encoding (replace event structs with SBE messages)
 β”œβ”€β”€ PE DB (Persistence Engine database for order state)
 └── FIX 5.0 SP2 gateway (replace shim OEG with FIX acceptor)

 Phase 4 β€” Post-Trade & Distribution
 β”œβ”€β”€ IACA FINISH + IACA COPY (DropCopy to members / 3rd parties)
 β”œβ”€β”€ MDG multicast SBE feed
 β”œβ”€β”€ IDS (Intraday Data Service β†’ files to regulators)
 β”œβ”€β”€ PTB (Post-Trade Box) with trade routing
 └── DCG (DropCopy Gateway for 3rd parties)

 Phase 5 β€” Regulatory & Clearing
 β”œβ”€β”€ SATURN ARM (MiFID II RTS 22 trade reporting to NCAs)
 β”œβ”€β”€ SATURN OBOE (Off-Book On-Exchange for Dublin/Oslo)
 β”œβ”€β”€ SLC Manager (Short Long Code anonymization)
 β”œβ”€β”€ Commodities Reporting (RTS 21 position reporting)
 β”œβ”€β”€ Clearing integration (EuroCCP, LCH Ltd, SIX Xclear)
 └── Enxt Clearing (PTB2EC, EC.POSTTRAD)

 Phase 6 β€” Scalability & Operations
 β”œβ”€β”€ Multi-segment support (EQU, ETF, FXI, EQD, IDD, CMO, etc.)
 β”œβ”€β”€ Partitioning (1 partition = 1 machine, cross-partition routing)
 β”œβ”€β”€ Full Master/Mirror failover with Kafka replay
 β”œβ”€β”€ TCS OTC (Trade Capture Service for OTC trades)
 β”œβ”€β”€ SMARTS market surveillance integration
 └── GUI resilience and operational tooling
```