Release 2027 · Schema version 001.05 · Active
SIVI message 10 (00553): Control information investment pools (VB-PUO)
Message 10 tells the fiduciary manager per investment pool what has to be bought or sold net as a result of the mutations in the participant administration: the direction (buySellId) and the net cash effect (tradeValueAmount). It is the steering information with which the fiduciary instructs the operational asset managers and the LDI manager.
Message structure
Entities with cardinality [min..max] and number of attributes; click for the entity page.
- 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] · 2 attr.
- financialInformation.reportingPeriod[1..1] · 2 attr.
- investment.pool[1..99] · 5 attr.
- pension.scheme[1..999] · 2 attr.
Attributes (35)
| Entity | Attribute | Type | V/O | Code list | Description |
|---|---|---|---|---|---|
| chunking.default | currentChunkId | string · max 70 | V | Unique reference (id) of the current chunk. | |
| chunking.default | chunkSequenceNumber | integer | V | Sequence number of the current chunk. | |
| chunking.default | totalNumberOfChunks | integer | V | Total number of chunks the message has been split into. | |
| chunking.default | chunkFragmentPaths | array[string] | V | Array of JMESPath references to the message fragments used within the current chunk. | |
| commonFunctional.default | afdDefinitionVersion | string · max 80 | V | 001.05 | Version of the AFD-definition. |
| commonFunctional.default | afdDefinitionName | string · max 80 | V | VBPUO-001.00-Bericht_10._Stuurinformatiebeleggingspools_(00553) | Name of the AFD-definition. |
| commonFunctional.default | originalMessageId | string · max 70 | O | The messageId of the original message, which is replaced by this message. | |
| commonFunctional.default | function | string | V | ADNFUN | Message function |
| commonTechnical.default | creationDateTime | string · format date-time | V | Date and time (as timestamp) when the message was created. | |
| commonTechnical.default | testMessage | boolean | O | Indication whether the message is a test message. | |
| commonTechnical.default | messageId | string · max 70 | V | Unique identification of the message. (AFD 2.0 only) | |
| party.receiver | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| party.receiver | organizationName | string · max 60 | V | Name of professional or branch organization. | |
| 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 | Unique reference key assigned to an entity. | |
| party.sender | applicationSenderName | string · max 60 | O | Name of the application that sends the data. | |
| party.sender | organizationName | string · max 60 | V | Name of professional or branch organization. | |
| 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 | Work email address. | |
| party.contact | workPhoneNumber | string · max 60 | V | Work telephone number. | |
| document.default | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| document.default | fileName | string · max 60 | V | Name of the file under which the attachment can be saved. | |
| document.default | fileExtension | string | V | pdf | csv | txt | Extension of the file under which the attachment can be saved. For example "pdf", "doc", etc. |
| party.pensionProvider | organizationName | string · max 60 | V | Name of professional or branch organization. | |
| 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 | Pension provider |
| pension.scheme | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| pension.scheme | pensionSchemeName | string · max 60 | V | Name of the pension scheme. | |
| financialInformation.reportingPeriod | investmentOrderSettlementDate | string · format date | V | Date on which the complete cycle of the investment order must be settled. | |
| financialInformation.reportingPeriod | tradeDate | string · format date | V | Desired trade date. | |
| investment.pool | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| investment.pool | description | string · max 60 | V | Description. | |
| investment.pool | currencyType | string | V | ISOVAL | Currency |
| investment.pool | buySellId | string | V | sell | buy | Aan- verkoopindicator; ID voor aan-/verkoop per beleggingspool per regeling |
| investment.pool | tradeValueAmount | number · multipleOf 0.01 | V | Waarde transactie per beleggingspool per regeling |
Sample message
Sample source: SIVI voorbeeldbericht (Voorbeeldbericht_10). Values are fictitious.
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2027-03-01T09:00:00+01:00",
"messageId": "VB-00553-0001",
"testMessage": true,
"party": [
{
"entityType": "sender",
"refKey": "BA01",
"organizationName": "Beleggingsadministrateur Voorbeeld",
"applicationSenderName": "VoorbeeldApplicatie"
},
{
"entityType": "receiver",
"refKey": "FM01",
"organizationName": "Fiduciair Manager Voorbeeld"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO-001.00-Bericht_10._Stuurinformatiebeleggingspools_(00553)",
"afdDefinitionVersion": "001.05",
"function": "01"
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0393",
"organizationName": "Pensioenfonds Metaal en Techniek",
"pension": [
{
"entityType": "scheme",
"refKey": "REG-01",
"pensionSchemeName": "Flexibele regeling Voorbeeld",
"financialInformation": [
{
"entityType": "reportingPeriod",
"tradeDate": "2027-03-26",
"investmentOrderSettlementDate": "2027-03-30"
}
],
"investment": [
{
"entityType": "pool",
"refKey": "POOL-REND",
"description": "Rendementspool",
"currencyType": "EUR",
"buySellId": "buy",
"tradeValueAmount": 1218373.59
},
{
"entityType": "pool",
"refKey": "POOL-MATCH",
"description": "Matchingpool",
"currencyType": "EUR",
"buySellId": "sell",
"tradeValueAmount": 1421216.76
},
{
"entityType": "pool",
"refKey": "POOL-RENTE",
"description": "Rentepool",
"currencyType": "EUR",
"buySellId": "buy",
"tradeValueAmount": 1054178.85
}
]
}
]
}
]
}Rules and consistency checks
- Per investment pool (investment.pool): refKey, description, currencyType, buySellId (buy or sell) and tradeValueAmount, the net cash effect. Numbers of units and unit values are not in message 10 but in message 13.
- Release 2027 removed the cohort-pool layer; the data lands directly on investment.pool. The fields dummyCashId, tradeQuantity, unitPrice and currencyExchangeRate have been dropped (issue #133).
- The message must reach the fiduciary at T-4; late means the execution window (T to T+3) is missed.
Pitfalls
- Messages built with the Release 2026 schema contain the pensionCohortPool layer and are rejected by a Release 2027 receiver (unknown field).
- Issue #92 ('SIVI 10 sell units'): a sale is expressed with buySellId = sell and positive quantities, not with a negative quantity.
Errors and fixes
- messageId missing, empty or longer than 70 charactersSchema error on commonTechnical/0/messageId: 'must have required property' or 'must NOT have more than 70 characters'.
- Duplicate messageId after acceptance (HTTP 400 with feedback)The receiver answers HTTP 400 with a feedback message (statusType 0) to a message that looks correct in content.
- afdDefinitionName incorrect (a fixed value since the final Release 2027)Schema error 'must be equal to constant' on afdDefinitionName; the WTP Data Lab validator names the expected value. Typical of a message built on the July 2026 pre-release: it states the right version 001.05 and still fails.
- afdDefinitionVersion incorrect (001.04 versus 001.05)Schema error 'must be equal to one of the allowed values' on afdDefinitionVersion, or the receiver validates against the wrong schema and reports unknown fields.
- buySellId invalidSchema error 'must be equal to one of the allowed values' on buySellId.
- tradeAmount or tradeQuantity negativeSchema-valid, but the receiver interprets the sign differently from the intention.
- currencyType not an ISO 4217 codeSchema error on currencyType (code list ISOVAL).
- Unknown field (additionalProperties = false)Schema error 'must NOT have additional properties' with the name of the extra field.
Difference from Release 2026 (001.04 → 001.05)
Entities removed: pension.cohortPool
Attributes removed: pension.cohortPool.refKey, pension.cohortPool.description, pension.cohortPool.currencyType, pension.cohortPool.cohortRef, investment.pool.currencyExchangeRate, investment.pool.dummyCashId, investment.pool.unitPrice, investment.pool.tradeQuantity
Frequently asked questions
Who sends message 10: the PUO or the investment administrator?
The investment administrator. The final manual of Release 2027 (12 October 2026) lays down that the BA role sends messages 10 and 14; a PUO does so only when it fulfils the BA role itself (issue #142).
Change history
- v1.4.0 (Release 2027): cohort-pool layer removed; fields dummyCashId, tradeQuantity, unitPrice and currencyExchangeRate dropped; JSON Schema 2020-12.
- Final Release 2027 (12 October 2026): sender the investment administrator (issue #142).
Schema file: VBPUO-001.00-Bericht_10._Stuurinformatiebeleggingspools_(00553).json · JSON-schema (001.05) · GitHub
