Inconsistent specification of conditionally required fields

Imported from previous forum

[ original email was from John Prewett - jprewett@lavatrading.com ]
In the protocol specification, fields in a message are listed with an attribute having a value of either "required" or "not required".

This doesn’t elegantly lend itself to dealing with conditionally required fields such as LastShares(32) and LastPx(31) on an ExecutionReport.

With FIX.4.0 & FIX.4.1, these fields were specified as "required" and the comment indicated that they were not required in the case of ExecTransType=cancel. This changed with FIX.4.2 and the fields were specified as "not required" with the comment hinting that they are required under certain circumstances.

So I assumed that there had been a clean-up and that a field that was conditionally required was now given the attribute of “not required” as it wasn’t required in every circumstance.

You can imagine my horror :wink: when I recently looked at the Allocation message for the first time and discovered that there are conditionally required fields that have a value of "required*" or "required**" ! The comments associated with the fields NoOrders(73), ClOrdID(11), NoAllocs(78), AllocAccount(79) and AllocQty(80) indicate the circumstance(s) under which these fields are not actually required.

I thought the clean-up in FIX.4.2 was a good thing from a FIX engine developer’s perspective in the fact that conditionally required fields were listed as “not required”. Now I discover the Allocation message breaks my assumptions.

I think it would be a good idea if conditionally required fields were represented consistently in all messages.

Possible choices:

  1. Ignore this request and focus on more important stuff.
  2. Make all conditionally required fields appear as "not required".
  3. Enhance the attribute to have three values: "required", "not required" and "conditionally required".

Slightly late, but "Happy New Year" anyway.

[ original email was from Dean Kauffman - dean.kauffman@tradeweb.com ]
Thanks John for the suggestion. In my own spec writing I like to use three values - Optional, Mandatory and Conditional. I hope we can incorporate this into the 4.4 spec that the Tech Committee is working on this winter.

  • Dean Kauffman

> In the protocol specification, fields in a message are listed with an attribute having a value of either “required” or “not required”.
>
> This doesn’t elegantly lend itself to dealing with conditionally required fields such as LastShares(32) and LastPx(31) on an ExecutionReport.
>
> With FIX.4.0 & FIX.4.1, these fields were specified as “required” and the comment indicated that they were not required in the case of ExecTransType=cancel. This changed with FIX.4.2 and the fields were specified as “not required” with the comment hinting that they are required under certain circumstances.
>
> So I assumed that there had been a clean-up and that a field that was conditionally required was now given the attribute of “not required” as it wasn’t required in every circumstance.
>
> You can imagine my horror :wink: when I recently looked at the Allocation message for the first time and discovered that there are conditionally required fields that have a value of “required*” or “required**” ! The comments associated with the fields NoOrders(73), ClOrdID(11), NoAllocs(78), AllocAccount(79) and AllocQty(80) indicate the circumstance(s) under which these fields are not actually required.
>
> I thought the clean-up in FIX.4.2 was a good thing from a FIX engine developer’s perspective in the fact that conditionally required fields were listed as “not required”. Now I discover the Allocation message breaks my assumptions.
>
> I think it would be a good idea if conditionally required fields were represented consistently in all messages.
>
> Possible choices:
> 1. Ignore this request and focus on more important stuff.
> 2. Make all conditionally required fields appear as “not required”.
> 3. Enhance the attribute to have three values: “required”, “not required” and “conditionally required”.
>
> Slightly late, but “Happy New Year” anyway.
>