Knowledge base MessagesEntitiesAttributesCode listsErrors and fixesProcessesRolesReleasesGlossaryEcosystemCompare Validator NL EN

Release 2027 (pre-release) · Schema version001.05 · Active

SIVI message 4 (00002): Return on investment (VB-PUO)

Message 4 brings the investment result of the period back to pension administration: opening and closing value, net flows and return per investment portfolio, in portfolio currency and as a percentage. Optionally the return is already split per cohort into protection return and excess return. The PUO then allocates the return to the personal pension capitals according to the scheme's allocation rules.

Sender
Investment administrator / asset service provider (BA), possibly the fiduciary manager
Receiver
Pension administrator (PUO)
Timing
Monthly (expected); implementation plans mention T+4 at the latest for SIVI message 4
Arrangement
SPR
afdDefinitionName
VBPUO-001.00-Bericht_4._Rendementsinformatie_(00002)

Message structure

Entities with cardinality [min..max] and number of attributes; click for the entity page.

Attributes(50)

EntityAttributeTypeV/OCode listDescription
chunking.default currentChunkId string 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 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 messageId string · max 70 V Unique identification of the message. (AFD 2.0 only)
commonTechnical.default testMessage boolean O Indication whether the message is a test message.
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 workPhoneNumber string · max 60 V Work telephone number.
party.contact emailWork string · max 60 V Work email address.
document.default refKey string · max 70 V Unique reference key assigned to an entity.
document.default fileExtension string V pdf | csv | txt Extension of the file under which the attachment can be saved. For example "pdf", "doc", etc.
document.default fileName string · max 60 V Name of the file under which the attachment can be saved.
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 endDate string · format date V Expiration date (to date).
financialInformation.reportingPeriod startDate string · format date V Start date (from date).
investment.portfolio refKey string · max 70 V Unique reference key assigned to an entity.
investment.portfolio startAmount number · multipleOf 0.01 V Amount (for example of accrued capital) at the start of a period.
investment.portfolio netAmount number · multipleOf 0.01 O Net sum of contributions and withdrawals per scheme. A negative amount is a (net) withdrawal.
investment.portfolio description string · max 60 V Description.
investment.portfolio endAmount number · multipleOf 0.01 V Value (for example accrued capital) at the end of a period.
investment.portfolio returnPercentage number · multipleOf 1e-12 O The return achieved over a period as a percentage.
investment.portfolio returnAmount number · multipleOf 0.01 V Amount of return achieved over a period.
pension.cohort refKey string · max 70 V Unique reference key assigned to an entity.
pension.cohort startAmount number · multipleOf 0.01 V Amount (for example of accrued capital) at the start of a period.
pension.cohort description string · max 60 V Description.
pension.cohort excessReturnPercentage number · multipleOf 1e-12 V The excess return achieved in percentage over the data period per pension scheme and per cohort.
pension.cohort reserveDescription string · max 60 O Description of the reserve.
pension.cohort reserveType string O AFDRES Reserve type
pension.cohort reserveIndicator boolean V Indication whether a reserve is available / applies.
pension.cohort startAge number · multipleOf 1 O Start age.
pension.cohort endAge number · multipleOf 1 O End age.
pension.cohort excessReturnAmount number · multipleOf 0.01 V The excess return achieved in the pension scheme currency over the data period per pension scheme and per cohort.
pension.cohort protectionReturnAmount number · multipleOf 0.01 V The protection return achieved in the pension scheme currency over the data period per pension scheme and per cohort.
pension.cohort protectionReturnPercentage number · multipleOf 1e-12 V The protection return achieved in percentage over the data period per pension scheme and per cohort.
pension.cohort participationStatus string O ADNDNS Participation type

Sample message

✓ Validated against schema VBPUO-001.05 · 2026-09-05

Sample source: SIVI voorbeeldbericht (Voorbeeldbericht_4). Values are fictitious.

{
  "commonTechnical": [
    {
      "entityType": "default",
      "messageId": "1234567890123456789012",
      "creationDateTime": "2023-10-28T10:00:00Z",
      "testMessage": false,
      "party": [
        {
          "entityType": "receiver",
          "refKey": "recv001",
          "rsinNumber": "123456789",
          "organizationName": "Pension Fund A"
        },
        {
          "entityType": "sender",
          "rsinNumber": "987654321",
          "organizationName": "Insurance Company B",
          "refKey": "send001",
          "applicationSenderName": "InsurAppV3"
        }
      ]
    }
  ],
  "commonFunctional": [
    {
      "entityType": "default",
      "function": "54",
      "afdDefinitionName": "VBPUO-001.00-Bericht_4._Rendementsinformatie_(00002)",
      "afdDefinitionVersion": "001.05",
      "originalMessageId": "98765432109876543210"
    }
  ],
  "party": [
    {
      "entityType": "pensionProvider",
      "puvCode": "U0003",
      "organizationName": "PensioenFonds B.V.",
      "pension": [
        {
          "entityType": "scheme",
          "refKey": "SCHEME456",
          "pensionSchemeName": "BasisPensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2023-01-01",
              "endDate": "2023-12-31"
            }
          ],
          "investment": [
            {
              "entityType": "portfolio",
              "refKey": "PORT123",
              "description": "Aandelenfonds",
              "startAmount": 500000,
              "netAmount": 50000,
              "endAmount": 575000,
              "returnPercentage": 5,
              "returnAmount": 25000
            }
          ],
          "pension": [
            {
              "entityType": "cohort",
              "refKey": "COHORT101",
              "description": "Cohort 2024",
              "startAmount": 300000,
              "protectionReturnPercentage": 2,
              "excessReturnPercentage": 3,
              "protectionReturnAmount": 6000,
              "excessReturnAmount": 9000,
              "reserveIndicator": false,
              "startAge": 300,
              "endAge": 540
            },
            {
              "entityType": "cohort",
              "refKey": "COHORT102",
              "description": "Cohort 2025",
              "startAmount": 350000,
              "protectionReturnPercentage": 2.5,
              "excessReturnPercentage": 3.5,
              "protectionReturnAmount": 8750,
              "excessReturnAmount": 12250,
              "reserveIndicator": false,
              "startAge": 540,
              "endAge": 780
            }
          ]
        }
      ]
    }
  ]
}
Variant: Voorbeeldbericht_4-uitgebreid
{
  "commonTechnical": [
    {
      "entityType": "default",
      "messageId": "1234567890123456789012",
      "creationDateTime": "2023-10-28T10:00:00Z",
      "testMessage": false,
      "party": [
        {
          "entityType": "receiver",
          "refKey": "recv001",
          "rsinNumber": "123456789",
          "organizationName": "Pension Fund A"
        },
        {
          "entityType": "sender",
          "rsinNumber": "987654321",
          "organizationName": "Insurance Company B",
          "refKey": "send001",
          "applicationSenderName": "InsurAppV3"
        }
      ]
    }
  ],
  "commonFunctional": [
    {
      "entityType": "default",
      "function": "54",
      "afdDefinitionName": "VBPUO-001.00-Bericht_4._Rendementsinformatie_(00002)",
      "afdDefinitionVersion": "001.05",
      "originalMessageId": "98765432109876543210"
    }
  ],
  "party": [
    {
      "entityType": "pensionProvider",
      "puvCode": "U0003",
      "organizationName": "PensioenFonds B.V.",
      "pension": [
        {
          "entityType": "scheme",
          "refKey": "SCHEME456",
          "pensionSchemeName": "BasisPensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2023-01-01",
              "endDate": "2023-12-31"
            }
          ],
          "investment": [
            {
              "entityType": "portfolio",
              "refKey": "PORT123",
              "description": "Aandelenfonds",
              "startAmount": 500000,
              "netAmount": 50000,
              "endAmount": 550000,
              "returnPercentage": 5,
              "returnAmount": 25000
            }
          ],
          "pension": [
            {
              "entityType": "cohort",
              "refKey": "COHORT101",
              "description": "Cohort 2024",
              "startAmount": 300000,
              "protectionReturnPercentage": 2,
              "excessReturnPercentage": 3,
              "protectionReturnAmount": 6000,
              "excessReturnAmount": 9000,
              "reserveIndicator": false,
              "startAge": 300,
              "endAge": 540
            },
            {
              "entityType": "cohort",
              "refKey": "COHORT102",
              "description": "Cohort 2025",
              "startAmount": 350000,
              "protectionReturnPercentage": 2.5,
              "excessReturnPercentage": 3.5,
              "protectionReturnAmount": 8750,
              "excessReturnAmount": 12250,
              "reserveIndicator": false,
              "startAge": 540,
              "endAge": 780
            }
          ]
        },
        {
          "entityType": "scheme",
          "refKey": "SCHEME789",
          "pensionSchemeName": "PlusPensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2024-01-01",
              "endDate": "2024-12-31"
            }
          ],
          "investment": [
            {
              "entityType": "portfolio",
              "refKey": "PORT225",
              "description": "Vastgoedfonds",
              "startAmount": 600000,
              "netAmount": 75000,
              "endAmount": 675000,
              "returnPercentage": 6,
              "returnAmount": 30000
            },
            {
              "entityType": "portfolio",
              "refKey": "PORT1225",
              "description": "Liquiditeitsfonds",
              "startAmount": 330000,
              "netAmount": 6000,
              "endAmount": 336000,
              "returnPercentage": 6,
              "returnAmount": 30000
            }
          ]
        }
      ]
    }
  ]
}
Variant: Voorbeeldbericht_4-uitgebreid-MinisforumNAB6
{
  "commonTechnical": [
    {
      "entityType": "default",
      "messageId": "1234567890123456789012",
      "creationDateTime": "2023-10-28T10:00:00Z",
      "testMessage": false,
      "party": [
        {
          "entityType": "receiver",
          "refKey": "recv001",
          "rsinNumber": "123456789",
          "organizationName": "Pension Fund A"
        },
        {
          "entityType": "sender",
          "rsinNumber": "987654321",
          "organizationName": "Insurance Company B",
          "refKey": "send001",
          "applicationSenderName": "InsurAppV3"
        }
      ]
    }
  ],
  "commonFunctional": [
    {
      "entityType": "default",
      "function": "54",
      "afdDefinitionName": "VBPUO-001.00-Bericht_4._Rendementsinformatie_(00002)",
      "afdDefinitionVersion": "001.05",
      "originalMessageId": "98765432109876543210"
    }
  ],
  "party": [
    {
      "entityType": "pensionProvider",
      "puvCode": "U0003",
      "organizationName": "PensioenFonds B.V.",
      "pension": [
        {
          "entityType": "scheme",
          "refKey": "SCHEME456",
          "pensionSchemeName": "BasisPensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2023-01-01",
              "endDate": "2023-12-31"
            }
          ],
          "investment": [
            {
              "entityType": "portfolio",
              "refKey": "PORT123",
              "description": "Aandelenfonds",
              "startAmount": 500000,
              "netAmount": 50000,
              "endAmount": 550000,
              "returnPercentage": 5,
              "returnAmount": 25000
            }
          ],
          "pension": [
            {
              "entityType": "cohort",
              "refKey": "COHORT101",
              "description": "Cohort 2024",
              "startAmount": 300000,
              "protectionReturnPercentage": 2,
              "excessReturnPercentage": 3,
              "protectionReturnAmount": 6000,
              "excessReturnAmount": 9000,
              "reserveIndicator": false,
              "startAge": 300,
              "endAge": 540
            },
            {
              "entityType": "cohort",
              "refKey": "COHORT102",
              "description": "Cohort 2025",
              "startAmount": 350000,
              "protectionReturnPercentage": 2.5,
              "excessReturnPercentage": 3.5,
              "protectionReturnAmount": 8750,
              "excessReturnAmount": 12250,
              "reserveIndicator": false,
              "startAge": 540,
              "endAge": 780
            }
          ]
        },
        {
          "entityType": "scheme",
          "refKey": "SCHEME789",
          "pensionSchemeName": "PlusPensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2024-01-01",
              "endDate": "2024-12-31"
            }
          ],
          "investment": [
            {
              "entityType": "portfolio",
              "refKey": "PORT225",
              "description": "Vastgoedfonds",
              "startAmount": 600000,
              "netAmount": 75000,
              "endAmount": 675000,
              "returnPercentage": 6,
              "returnAmount": 30000
            },
            {
              "entityType": "portfolio",
              "refKey": "PORT1225",
              "description": "Liquiditeitsfonds",
              "startAmount": 330000,
              "netAmount": 6000,
              "endAmount": 336000,
              "returnPercentage": 6,
              "returnAmount": 30000
            }
          ]
        }
      ]
    }
  ]
}

Rules and consistency checks

  • Per portfolio startAmount, netAmount, returnAmount and endAmount apply; the receiver checks plausibility: opening value + net flows + return = closing value.
  • returnPercentage and the other percentages have at most twelve decimals; amounts at most six (Release 2026).
  • Protection return can be determined directly (actual return of one or more protection portfolios) or indirectly (via the interest-rate term structure); the message can carry both variants, the PUO remains responsible for allocation.
  • Cohort level (protectionReturnAmount, excessReturnAmount and percentages) is optional; whoever delivers it, delivers it for all cohorts of the scheme.

Pitfalls

  • Return in the wrong currency or without the exchange-rate effect: the PUO calculates in euros; fix at which level the currency conversion takes place.
  • Several return types in one message (for example gross and net of costs) without a clear description per portfolio make the allocation unreliable.

Errors and fixes

Frequently asked questions

Who sends message 4: the fiduciary manager or the investment administrator?

Preferably the independent investment administrator (leading investment administration); the standard allows the fiduciary manager to send it if the chain is set up that way.

How does message 4 relate to the protection return in the allocation rules?

Message 4 delivers the building blocks: the actual return per portfolio and optionally the split into protection and excess return per cohort. The allocation itself, including any theoretical (term-structure) method, is and remains the PUO's responsibility.

Change history

  • v1.2.0 (November 2024): percentages from 2 to 12 decimals.
  • v1.3.0 (Release 2026): numeric formats to 6 decimals.
  • v1.4.0 (Release 2027): JSON Schema 2020-12.

Schema file: VBPUO-001.00-Bericht_4._Rendementsinformatie_(00002)_v5.json · JSON-schema (001.05) · GitHub

Attribution. Source: SIVI – VB-PUO Standard. Schemas, attribute descriptions and code lists are taken unchanged from the VB-PUO Standard (owned by the Pensioenfederatie, managed by SIVI) and shown with their release and version. Explanations, examples, error descriptions and translations are by WTP Data Lab and are not part of the standard. GitHub Stichting-SIVI/VBPUOdsk · Manual · sivi.org