quickfixj icon indicating copy to clipboard operation
quickfixj copied to clipboard

Configuration parameter ValidateUnorderedGroupFields not working when the field order of a repeating block nested within another repeating block

Open chandimasi opened this issue 2 years ago • 3 comments
trafficstars

Additional context When ValidateUnorderedGroupFields is set to "Y", fix message with one group field, order within a repeating block is getting validated. But, field order within a repeating block that is situated inside another repeating block is not getting validated. Tried to validate the field order of 'NoPartyIDs' in FIX trade capture report.

image

chandimasi avatar Aug 21 '23 06:08 chandimasi

Could you please clarify a little? Could you supply a small test case that shows what you want to achieve? Moreover, your description says ValidateUnorderedGroupFields but the title says ValidateFieldsOutOfOrder. Which one do you mean?

chrjohn avatar Aug 21 '23 09:08 chrjohn

I have corrected the issue title.

Scenario

  1. User A submit a Buy order O1 ( 10 @1000)

  2. User B submit a Sell order O2 (10 @1000) to trade with O1

  3. Trade happens

  4. Relevant Execution reports and Trade capture reports get disseminated

Expectation

In Fix ‘Trade capture report’, Field ‘NoPartyID’ is a nested repeating block and need to validate the field order of this block’s fields.

Input Messages:

  1. submit a Sell order

  2. submit a Buy order to trade with Buy Order

8=FIXT.1.1|9=269|35=AB|34=3|49=FIX.CITUWP|52=20230822-09:38:37.747|56=FGW|11=20230822:030837:37.000607|38=2000000|40=2|44=1.37|54=1|55=USD/VND|59=1|60=20230822-09:38:37.000607|100=102|167=FXSWAP|1300=101|30001=1|453=1|448=TR2.CITUWP|447=D|452=53|555=2|1788=Leg1|587=M9|1788=Leg2|587=W3|10=037|

8=FIXT.1.1|9=277|35=AB|34=3|49=FIX.CIYLWP|52=20230822-09:38:38.584|56=FGW|11=20230822:030838:38.000579|38=2000000|40=2|44=1.37|54=1|55=USD/VND|59=1|60=20230822-09:38:38.000579|100=102|167=FXSWAP|1300=101|30001=1|38004=0|453=1|448=TR2.CIYLWP|447=D|452=53|555=2|1788=Leg1|587=M9|1788=Leg2|587=W3|10=156|

  1. Trade happens

  2. Relevant Execution reports and Trade capture reports get disseminated

When nested repeating group order is correctly ordered in dictionary file,

8=FIXT.1.1|9=1047|35=AE|49=PTGW|56=PTG1.OMG|34=5|52=20230822-09:38:42.441486|1128=9|1180=1|1181=9|1350=8|1352=N|571=L3nSnDAiMb|1003=TS85VE4S8PON|820=Z3nPnQQU0V|1123=0|856=0|150=F|487=0|573=0|828=0|60=20230822-09:38:41.657144|32=2000000|423=20|31=1.37|15=USD|574=4|55=USD/VND|167=FXSWAP|555=2|1788=Leg1|587=M9|603=4|637=1.444|1074=2888000|1788=Leg2|587=W3|603=4|637=2.814|1074=5628000|552=1|54=2|1427=E0Fg2W57LtbL|453=7|448=TR2.CITLWP|447=D|452=53|2376=22|448=CITLWP|447=D|452=59|802=2|523=Y|803=100|523=549300YJ6EN00VRYN266_LEICITI_1|803=84|448=FXRQ|447=G|452=73|448=535400MQZIPRVPDDZK70|447=N|452=72|448=CIYLWP|447=D|452=56|802=2|523=Y|803=100|523=549300YJ6EN00VRYN266_LEICITI_1|803=84|448=CITLWP|447=D|452=13|448=CIYLWP|447=D|452=20|1115=1|1444=2|37=OS0Fg2av9va3M|11=20230822:030839:39.000341|38=4000000|194=1.444|711=2|311=USD/VND|1045=1|311=USD/USD|1045=1|120=VND|1907=2|1903=535400MQZIPRVPDDZK70TS85VE4S8PONL0|1906=5|2411=L0|1903=535400MQZIPRVPDDZK70TS85VE4S8PONL1|1906=5|2411=L1|30001=1|100=102|1300=101|1924=0|1193=C|768=1|769=20230822-09:38:41.657144|770=1|10=019|

When repeating group order is invalid in dictionary file, expected session reject won't receive.

8=FIXT.1.1|9=1049|35=AE|34=3|49=PTGW|52=20230822-10:08:24.406377|56=PTG1.OMG|1128=9|15=USD|31=1.37|32=2000000|55=USD/VND|60=20230822-10:08:24.015434|100=102|120=VND|150=F|167=FXSWAP|194=1.444|423=20|487=0|571=L3nSnDAiMp|573=0|574=4|820=Z3nPnQQU0h|828=0|856=0|1003=TS85VE4S8POU|1123=0|1180=1|1181=23|1193=C|1300=101|1350=22|1352=N|1924=0|30001=1|552=1|54=2|1427=E0Fg2W57Ltbl|453=7|448=TR2.CITLWP|447=D|2376=22|452=53|448=CITLWP|447=D|452=59|802=2|523=Y|803=100|523=549300YJ6EN00VRYN266_LEICITI_1|803=84|448=FXRQ|447=G|452=73|448=535400MQZIPRVPDDZK70|447=N|452=72|448=CITUWP|447=D|452=56|802=2|523=Y|803=100|523=549300YJ6EN00VRYN266_LEICITI_1|803=84|448=CITLWP|447=D|452=13|448=CITUWP|447=D|452=20|1115=1|1444=2|37=OS0Fg2av9va3Y|11=20230822:033821:21.000853|38=4000000|555=2|1788=Leg1|587=M9|603=4|637=1.444|1074=2888000|1788=Leg2|587=W3|603=4|637=2.814|1074=5628000|711=2|311=USD/VND|1045=1|311=USD/USD|1045=1|768=1|769=20230822-10:08:24.015434|770=1|1907=2|1903=535400MQZIPRVPDDZK70TS85VE4S8POUL0|1906=5|2411=L0|1903=535400MQZIPRVPDDZK70TS85VE4S8POUL1|1906=5|2411=L1|10=154|

chandimasi avatar Aug 22 '23 11:08 chandimasi

IIRC each repeating group (regardless if nested or not) will be parsed using the dictionary. Maybe I'll find time to create a unit test, or maybe you could do that?

Which data dictionary do you use? The default one that ships with QFJ? Which FIX version? Could you please show your session config?

chrjohn avatar Sep 15 '23 07:09 chrjohn