Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
chandimasi opened this issue Aug 21, 2023 · 3 comments

Comments

@chandimasi
Copy link

chandimasi commented Aug 21, 2023

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

@chrjohn
Copy link
Member

chrjohn commented Aug 21, 2023

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?

@chandimasi chandimasi changed the title Configuration parameter ValidateFieldsOutOfOrder not working when the field order of a repeating block nested within another repeating block Configuration parameter ValidateUnorderedGroupFields not working when the field order of a repeating block nested within another repeating block Aug 22, 2023
@chandimasi
Copy link
Author

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|

@chrjohn
Copy link
Member

chrjohn commented Sep 15, 2023

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants