Release 2027 · Schemaversie 001.05 · Actief
SIVI-bericht 5 (00541): Orderopdracht (VB-PUO)
Met de orderopdracht plaatst de PUO netto koop- en verkooporders op het hoogste fondsniveau: de mutaties van deelnemers zijn al vertaald naar nettotransacties per beleggingsfonds. Switches tussen fondsen worden als twee gekoppelde orders aangeleverd. Het bericht bevat alleen wat de uitvoerende partij nodig heeft; het onderliggende suborderen doet de fondsaanbieder.
Berichtstructuur
Entiteiten met cardinaliteit [min..max] en aantal attributen; klik voor de entiteitpagina.
- chunking.default[0..1] · 4 attr.
- commonFunctional.default[1..1] · 4 attr.
- commonTechnical.default[1..1] · 3 attr.
- party.receiver[1..1] · 3 attr.
- party.sender[1..1] · 4 attr.
- party.contact[0..9] · 2 attr.
- document.default[0..99] · 3 attr.
- party.pensionProvider[1..1] · 3 attr.
- pension.scheme[1..999] · 3 attr.
- financialInformation.reportingPeriod[1..1] · 1 attr.
- investment.investmentDetails[1..999] · 3 attr.
- financialTransaction.trade[1..99] · 7 attr.
- pension.scheme[1..999] · 3 attr.
Attributen (40)
| Entiteit | Attribuut | Type | V/O | Codelijst | Omschrijving |
|---|---|---|---|---|---|
| chunking.default | currentChunkId | string · max 70 | V | Unieke referentie van de huidige chunk. | |
| chunking.default | chunkSequenceNumber | integer | V | Volgnummer van de huidige chunk. | |
| chunking.default | totalNumberOfChunks | integer | V | Totale aantal chunks waarin het bericht is opgesplitst. | |
| chunking.default | chunkFragmentPaths | array[string] | V | Array van JMESPath-verwijzingen naar de berichtdelen die gebruikt zijn binnen deze chunk. | |
| commonFunctional.default | afdDefinitionVersion | string · max 80 | V | 001.05 | Met AFD definitieversienummer wordt aangegeven over welke versie van de (product)definitie wordt gecommuniceerd. |
| commonFunctional.default | afdDefinitionName | string · max 80 | V | VBPUO-001.00-Bericht_5._Orderopdracht_(00541) | De AFD definitienaam van o.a. webservices en verzekeringsproducten. |
| commonFunctional.default | originalMessageId | string · max 70 | O | MessageId van het oorspronkelijke bericht, dat wordt vervangen door dit bericht. | |
| commonFunctional.default | function | string | V | ADNFUN | Berichtfunctie |
| commonTechnical.default | creationDateTime | string · format date-time | V | Datum en tijd van het aanmaken van het bericht. | |
| commonTechnical.default | testMessage | boolean | O | Indicatie of sprake is van een testbericht. | |
| commonTechnical.default | messageId | string · max 70 | V | Unique identification of the message. (AFD 2.0 only) | |
| party.receiver | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| party.receiver | organizationName | string · max 60 | V | Naam beroeps of branche organisatie. | |
| party.receiver | rsinNumber | string · max 9 | O | Governmental identification number for legal entities and associations. (AFD 2.0 only) | |
| party.sender | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| party.sender | applicationSenderName | string · max 60 | O | Naam van de applicatie die de gegevens verzendt. | |
| party.sender | organizationName | string · max 60 | V | Naam beroeps of branche organisatie. | |
| party.sender | rsinNumber | string · max 9 | O | Governmental identification number for legal entities and associations. (AFD 2.0 only) | |
| party.contact | emailWork | string · max 60 | V | E-mail adres werk | |
| party.contact | workPhoneNumber | string · max 60 | V | Telefoonnummer werk | |
| document.default | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| document.default | fileName | string · max 60 | V | Naam van het bestand waaronder de bijlage kan worden opgeslagen. | |
| document.default | fileExtension | string | V | pdf | csv | txt | Extensienaam van het bestand waaronder de bijlage kan worden opgeslagen. Bijvoorbeeld "PDF", "DOC", etc. |
| party.pensionProvider | organizationName | string · max 60 | V | Naam beroeps of branche organisatie. | |
| party.pensionProvider | rsinNumber | string · max 9 | O | Governmental identification number for legal entities and associations. (AFD 2.0 only) | |
| party.pensionProvider | puvCode | string | V | AFDIDP | Pensioenuitvoerder |
| pension.scheme | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| pension.scheme | pensionSchemeName | string · max 60 | V | Naam van de pensioenregeling. | |
| pension.scheme | tradingPortfolioId | string · max 10 | V | Portefeuille ID van de custodian (bewaren en beheren van financiële activa). | |
| financialInformation.reportingPeriod | instructionDate | string · format date | V | Instructiedatum (datum van de bestelling verzonden door de PUO. | |
| investment.investmentDetails | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| investment.investmentDetails | description | string · max 60 | V | Omschrijving | |
| investment.investmentDetails | currencyType | string | V | ISOVAL | ISO valutacodetabel (ISO 4217) |
| financialTransaction.trade | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| financialTransaction.trade | financialInformationRef | array[string] | O | Verwijs hier bij switchfrom/switchto naar de refKey van de andere switch-leg ten behoeve van verbandscontrole. | |
| financialTransaction.trade | tradeDate | string · format date | V | Gewenste handelsdatum. | |
| financialTransaction.trade | tradeAmount | number · multipleOf 0.01 | O | Positief bedrag van de transactie in de valuta waarin de belegging luidt; richting volgt uit buySellId | |
| financialTransaction.trade | tradeQuantity | number · multipleOf 0.000001 | O | Positief aantal te verhandelen stukken (units) van de transactie; richting volgt uit buySellId | |
| financialTransaction.trade | switchType | string | O | AFDSWI | Type switch; one-day of sequential |
| financialTransaction.trade | buySellId | string | V | sell | buy | switchfrom | switchto | Aan-, verkoop- of switchrichtingindicator |
Voorbeeldbericht
Bron voorbeeld: SIVI voorbeeldbericht (Voorbeeldbericht_5-buy). Waarden zijn fictief.
{
"commonFunctional": [
{
"entityType": "default",
"function": "01",
"afdDefinitionName": "VBPUO-001.00-Bericht_5._Orderopdracht_(00541)",
"afdDefinitionVersion": "001.05",
"originalMessageId": "20240529 1532"
}
],
"commonTechnical": [
{
"entityType": "default",
"messageId": "67890",
"creationDateTime": "2024-10-07T10:00:00Z",
"testMessage": false,
"party": [
{
"entityType": "receiver",
"refKey": "recv001",
"rsinNumber": "123456789",
"organizationName": "Pension Fund A"
},
{
"entityType": "sender",
"rsinNumber": "876543219",
"organizationName": "Investment Firm B",
"refKey": "send001",
"applicationSenderName": "InvestAppV1"
}
]
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0003",
"rsinNumber": "112233449",
"organizationName": "St. Pf. Openbare Bibliotheken",
"pension": [
{
"entityType": "scheme",
"refKey": "schemeXYZ",
"pensionSchemeName": "Investment Scheme A",
"tradingPortfolioId": "Trade123",
"financialInformation": [
{
"entityType": "reportingPeriod",
"instructionDate": "2024-01-02"
}
],
"investment": [
{
"entityType": "investmentDetails",
"refKey": "inv001",
"description": "Equity Fund",
"currencyType": "EUR",
"financialTransaction": [
{
"entityType": "trade",
"refKey": "trade123",
"buySellId": "buy",
"tradeDate": "2024-01-03",
"tradeAmount": 10000
}
]
}
]
}
]
}
],
"document": []
}Variant: Voorbeeldbericht_5-buy-sell
{
"commonFunctional": [
{
"entityType": "default",
"function": "01",
"afdDefinitionName": "VBPUO-001.00-Bericht_5._Orderopdracht_(00541)",
"afdDefinitionVersion": "001.05",
"originalMessageId": "20240529 1532"
}
],
"commonTechnical": [
{
"entityType": "default",
"messageId": "67890",
"creationDateTime": "2023-12-30T12:00:00Z",
"testMessage": false,
"party": [
{
"entityType": "receiver",
"refKey": "recv001",
"rsinNumber": "123456789",
"organizationName": "Pension Fund A"
},
{
"entityType": "sender",
"rsinNumber": "876543219",
"organizationName": "Investment Firm B",
"refKey": "send001",
"applicationSenderName": "InvestAppV1"
}
]
}
],
"party": [
{
"entityType": "pensionProvider",
"rsinNumber": "112233449",
"puvCode": "U0003",
"organizationName": "St. Pf. Openbare Bibliotheken",
"pension": [
{
"entityType": "scheme",
"refKey": "schemeXYZ",
"pensionSchemeName": "Investment Scheme A",
"tradingPortfolioId": "Trade123",
"financialInformation": [
{
"entityType": "reportingPeriod",
"instructionDate": "2024-01-02"
}
],
"investment": [
{
"entityType": "investmentDetails",
"refKey": "inv001",
"description": "Equity Fund",
"currencyType": "EUR",
"financialTransaction": [
{
"entityType": "trade",
"refKey": "trade123",
"buySellId": "buy",
"tradeDate": "2024-01-03",
"tradeAmount": 10000
},
{
"entityType": "trade",
"refKey": "trade124",
"buySellId": "sell",
"tradeDate": "2024-01-04",
"tradeQuantity": 50
}
]
}
]
}
]
}
],
"document": []
}Variant: Voorbeeldbericht_5-buy-sell-switch
{
"commonFunctional": [
{
"entityType": "default",
"function": "01",
"afdDefinitionName": "VBPUO-001.00-Bericht_5._Orderopdracht_(00541)",
"afdDefinitionVersion": "001.05",
"originalMessageId": "20240529 1532"
}
],
"commonTechnical": [
{
"entityType": "default",
"messageId": "67890",
"creationDateTime": "2024-10-07T10:00:00Z",
"testMessage": false,
"party": [
{
"entityType": "receiver",
"refKey": "recv001",
"rsinNumber": "123456789",
"organizationName": "Pension Fund A"
},
{
"entityType": "sender",
"rsinNumber": "876543219",
"organizationName": "Investment Firm B",
"refKey": "send001",
"applicationSenderName": "InvestAppV1"
}
]
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0003",
"rsinNumber": "112233449",
"organizationName": "St. Pf. Openbare Bibliotheken",
"pension": [
{
"entityType": "scheme",
"refKey": "schemeXYZ",
"pensionSchemeName": "Investment Scheme A",
"tradingPortfolioId": "Trade123",
"financialInformation": [
{
"entityType": "reportingPeriod",
"instructionDate": "2024-01-02"
}
],
"investment": [
{
"entityType": "investmentDetails",
"refKey": "inv001",
"description": "Equity Fund",
"currencyType": "EUR",
"financialTransaction": [
{
"entityType": "trade",
"refKey": "trade123",
"buySellId": "buy",
"tradeDate": "2024-01-03",
"tradeAmount": 10000
},
{
"entityType": "trade",
"refKey": "trade124",
"buySellId": "sell",
"tradeDate": "2024-01-04",
"tradeQuantity": 50
}
]
}
]
},
{
"entityType": "scheme",
"refKey": "schemeABC",
"pensionSchemeName": "Retirement Plan B",
"tradingPortfolioId": "Trade456",
"financialInformation": [
{
"entityType": "reportingPeriod",
"instructionDate": "2024-01-05"
}
],
"investment": [
{
"entityType": "investmentDetails",
"refKey": "inv002",
"description": "Accumulation phase fund",
"currencyType": "EUR",
"financialTransaction": [
{
"entityType": "trade",
"refKey": "trade125",
"buySellId": "switchfrom",
"tradeDate": "2024-01-06",
"switchType": "1",
"financialInformationRef": [
"trade126",
"inv003"
],
"tradeQuantity": 20
}
]
},
{
"entityType": "investmentDetails",
"refKey": "inv003",
"description": "CVP fund",
"currencyType": "EUR",
"financialTransaction": [
{
"entityType": "trade",
"refKey": "trade126",
"buySellId": "switchto",
"tradeDate": "2024-01-06",
"financialInformationRef": [
"trade125",
"inv002"
]
}
]
}
]
}
]
}
],
"document": []
}Regels en verbandscontroles
- Sinds Release 2027 is per order precies één van tradeAmount (bedrag) en tradeQuantity (aantal) gevuld; beide vullen is niet toegestaan (handleiding §6.3.2, issue #116). Heeft een instructie een bedrag- én een hoeveelheidcomponent, dan worden dat twee afzonderlijke trade-records. Beide leeg mag alleen bij de order van een switch die niet stuurt; dat kan de switchfrom- of de switchto-order zijn.
- Een switch bestaat uit twee orders: buySellId = switchfrom en buySellId = switchto. Ze verwijzen naar elkaar via financialInformationRef, dat de refKey van de andere order bevat. Per switchpaar draagt precies één order een bedrag of een aantal; de andere draagt geen van beide (handleiding §6.3.2). tradeAmount en tradeQuantity zijn altijd positief (§4.3.5).
- switchType (codelijst AFDSWI) geeft aan of de switch volgtijdelijk (code 1) of op één dag (code 2) wordt uitgevoerd. Het schema verwijst daarvoor naar het codelijstbestand naast het schema, niet naar sivi.org.
- investment.investmentDetails identificeert het fonds (refKey, description, currencyType); de identifier-conventie (bijvoorbeeld ISIN) wordt bilateraal afgesproken.
Valkuilen
- Oudere implementaties gebruiken nog buySellId = switch (Release 2026); Release 2027 kent alleen switchfrom en switchto. Een ontvanger op 2027 wijst een oude switch af.
- Een negatief bedrag om een verkoop aan te duiden is fout: richting zit in buySellId, niet in het teken.
- Een validator die het codelijstbestand naast het schema niet vindt (switchType verwijst naar …-afdCodelists.json, niet naar sivi.org), kan het schema van de definitieve Release 2027 niet compileren. Registreer dat bestand naast de codelijsten van sivi.org.
Fouten en oplossingen
- messageId ontbreekt, is leeg of langer dan 70 tekensSchemafout op commonTechnical/0/messageId: 'must have required property' of 'must NOT have more than 70 characters'.
- Dubbele messageId na acceptatie (HTTP 400 met feedback)De ontvanger antwoordt HTTP 400 met een feedbackbericht (statusType 0) op een bericht dat inhoudelijk correct lijkt.
- afdDefinitionName onjuist (vaste waarde sinds de definitieve Release 2027)Schemafout 'must be equal to constant' op afdDefinitionName; de validator van WTP Data Lab noemt de verwachte waarde. Typisch voor een bericht dat op de pre-release van juli 2026 is gebouwd: het vermeldt de juiste versie 001.05 en valt toch af.
- afdDefinitionVersion onjuist (001.04 versus 001.05)Schemafout 'must be equal to one of the allowed values' op afdDefinitionVersion, of de ontvanger valideert tegen het verkeerde schema en meldt onbekende velden.
- tradeAmount en tradeQuantity beide gevuld of beide leeg (bericht 5)De ontvanger wijst de order functioneel af (feedback statusType 0) of voert een onbedoelde hoeveelheid uit.
- switchfrom zonder switchto, of financialInformationRef ontbreektDe ontvanger kan het switchpaar niet vormen en wijst de order af.
- switchType ongeldig (AFDSWI)Schemafout op switchType.
- buySellId ongeldigSchemafout 'must be equal to one of the allowed values' op buySellId.
- tradeAmount of tradeQuantity negatiefSchema-valide, maar de ontvanger interpreteert het teken verschillend van de bedoeling.
- Schema-draft mismatch: definitions versus $defs, draft 2019-09 versus 2020-12De validator meldt 'can't resolve reference', MissingRefError of 'no schema with key or ref' bij het laden van het schema, nog vóór het bericht wordt getoetst.
Veelgestelde vragen
Wat gebeurt er als een order niet uitvoerbaar is (onbekend fonds, ongeldige combinatie)?
De ontvanger stuurt een feedbackbericht met statusType 0 (afgewezen) en een geclassificeerde errorCode. De PUO stuurt daarna een gecorrigeerde order met een nieuwe messageId.
Kan ik in één bericht meerdere fondsen bedienen?
Ja: het bericht bevat per transactie de investmentDetails van het fonds; meerdere transacties in één bericht zijn toegestaan.
Wijzigingsgeschiedenis
- v1.2.0 (november 2024): numberOfUnits toegevoegd.
- v1.4.0 (Release 2027): switch vervangen door switchfrom/switchto met positieve bedragen; JSON Schema 2020-12.
- Definitieve Release 2027 (12 oktober 2026): orderregels in de nieuwe §6.3.2, per switchpaar stuurt één order; switchType met de codes 1 en 2 via het codelijstbestand. SIVI's voorbeelden van de pre-release vulden bedrag en aantal samen, de definitieve volgen de regel (issue #116).
Schema-bestand: VBPUO-001.00-Bericht_5._Orderopdracht_(00541).json · JSON-schema (001.05) · codelijstbestand bij dit schema · GitHub
