0

According to documentation, I have a group inside group. The group called "NoPositionsGroup" contains 2 groups:

  1. NoPosKeysGroup - contains tags 5026 and 5027
  2. NoPosItemsGroup - contains tags 5029 and 5030

The problem is when I recive a message from Fix server (see Incoming message below) My application response "Reject" message becouse don`t understand that tag 5026 contains inside child group.

I think that I mistaken in my dictionary description, but don`t understand where is the mistake. Please suggest me correct way to describe it. I think that the problem in description nested groups.

My message description inside dictionary is following:

<message name='PositionReport' msgcat='app' msgtype='AP'>
            <field name='PosMaintRptID' required='N'/>
            <field name='PosReqID' required='N'/>
            <field name='PosReqType' required='N'/>
            <field name='SubscriptionRequestType' required='N'/>
            <field name='TotalNumPosReports' required='N'/>
            <field name='UnsolicitedIndicator' required='N'/>
            <field name='PosReqResult' required='N'/>
            <field name='ClearingBusinessDate' required='N'/>
            <field name='SettlSessID' required='N'/>
            <field name='SettlSessSubID' required='N'/>
            <field name='NoPartyIDs' required='N'/>
            <component name='Parties' required='Y'/>
            <field name='NoPositions' required='N'/>
            <group name='NoPositionsGroup' required='N'>
                <field name='PosType' required='N'/>
                <field name='PosUpdateAction' required='N'/>
                <field name='NoPosKeys' required='N'/>
                <group name='NoPosKeysGroup'  required='N'>
                    <field name='PosKeyType' required='N'/>
                    <field name='PosKeyValue' required='N'/>
                </group>
                <field name='NoPosItems' required='N'/>
                <group name='NoPosItemsGroup' required='N'>
                    <field name='PosItemType' required='N'/>
                    <field name='PosItemValue' required='N'/>
                </group>
            </group>
            <field name='StreamPhaseIndicator' required='N'/>
            <field name='Account' required='N'/>
            <field name='AcctIDSource' required='N'/>
            <field name='AccountType' required='N'/>
            <component name='Instrument' required='N'/>
            <field name='Currency' required='N'/>
            <field name='SettlPrice' required='N'/>
            <field name='SettlPriceType' required='N'/>
            <field name='PriorSettlPrice' required='N'/>
            <component name='InstrmtLegGrp' required='N'/>
            <component name='PosUndInstrmtGrp' required='N'/>
            <component name='PositionQty' required='N'/>
            <component name='PositionAmountData' required='N'/>
            <field name='RegistStatus' required='N'/>
            <field name='DeliveryDate' required='N'/>
            <field name='Text' required='N'/>
            <field name='EncodedTextLen' required='N'/>
            <field name='EncodedText' required='N'/>
            <field name='MatchStatus' required='N'/>
            <field name='PriceType' required='N'/>
            <field name='SettlCurrency' required='N'/>
            <field name='MessageEventSource' required='N'/>
        </message>

Inside Fields section I descrided groups and tags:

<field number='20000' name='NoPositionsGroup' type='NUMINGROUP'/>
        <field number='5024' name='PosUpdateAction' type='CHAR'>
            <value enum='0' description="NEW"/>
            <value enum='1' description="CHANGE"/>
            <value enum='2' description="DELETE"/>
        </field>
        <field number='5025' name='NoPosKeys' type='INT'/>
        <field number='20001' name='NoPosKeysGroup' type='NUMINGROUP'/>
        <field number='5026' name='PosKeyType' type="STRING"/>
        <field number='5027' name='PosKeyValue' type='STRING'/>
        <field number='5028' name='NoPosItems' type='INT'/>
        <field number='20002' name='NoPosItemsGroup' type='NUMINGROUP'/>
        <field number='5029' name='PosItemType' type='STRING'/>
        <field number='5030' name='PosItemValue' type='FLOAT'/>
        <field number='5110' name='StreamPhaseIndicator' type='STRING'/>

Incoming message:

<Incoming> 8=FIXT.1.1
9=680
35=AP
49=TestSenderId
56=TestTargetId
34=6
52=20230321-12:20:56
710=My Unic request Id
721=RfPA4
724=0
325=N
715=20230321
453=2
448=SPBFUT000000
447=D
452=13
448=SPBFUT00036
447=D
452=38
702=1
703=FL
5024=0
5025=2
5026=CUR
5027=SUR
5026=FLT
5027=DEPOSIT_MONEY_FOREIGN_CURR_RUB
5028=12
5029=LIQUID_FACTOR
5030=0.000000
5029=PREV_OPEN_POS_LIM
5030=-120.000000
5029=CUR_OPEN_POS_LIM
5030=-120.000000
5029=CUR_NET_POS
5030=0.000000
5029=CUR_NET_POS_ORD
5030=0.000000
5029=CUR_NET_POS_OPEN_POS
5030=0.000000
5029=PLAN_NET_POS
5030=0.000000
5029=VAR_MARGIN
5030=0.000000
5029=ACCRUED_INT
5030=0.000000
5029=OPTION_PREMIUM
5030=0.000000
5029=TS_COMM
5030=0.000000
5029=KGO
5030=0.000000
10=203

Outсoming message:

<Outcoming>        8=FIXT.1.1
9=125
35=3
34=6
49=TestTargetId
52=20230321-12:20:56.362
56=TestSenderId
45=6
58=Tag appears more than once
371=5026
372=AP
373=13
10=023

<Outcoming>        8=FIXT.1.1
9=125
35=3
34=7
49=TestTargetId
52=20230321-12:45:28.511
56=TestSenderId
45=7
58=Tag appears more than once
371=5029
372=AP
373=13
10=030
JamesBondCaesar
  • 193
  • 2
  • 8

2 Answers2

1

I found my mistake.

The group in FIX dictionary must have the same number as group counter field. I.E. In my example tag 20000 - must be deleted as we already have default group called "NoPositions". Tag 20001 - must be deleted too, instead of it should use tag 5025. Tag 20002 - again must be deleted and should use tag 2058 instead of it.

The tags 5025 and 5028 must have type = "NUMINGROUP"

JamesBondCaesar
  • 193
  • 2
  • 8
1

Your data dictionary seems to be wrong in several places, also for example for the Parties component.

You have:

    <field name='NoPartyIDs' required='N'/>
    <component name='Parties' required='Y'/>

But it should actually be like this:

<component name='Parties' required='N' />
... and further below in the dictionary ...
<component name='Parties'>
   <group name='NoPartyIDs' required='N'>
    <field name='PartyID' required='N' />
    <field name='PartyIDSource' required='N' />
    <field name='PartyRole' required='N' />
    <component name='PtysSubGrp' required='N' />
   </group>
  </component>

I assume that is the problem with your other groups also.

Christoph John
  • 3,003
  • 2
  • 13
  • 23