Knowledge base MessagesEntitiesAttributesCode listsErrors and fixesProcessesRolesReleasesGlossaryEcosystemCompare Validator NL EN

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

SIVI message 2 (0001b): Cashflow (VB-PUO)

Message 2 reports the cash flows of the period: contributions and incoming value transfers (inflow), benefit payments and outgoing transfers (outflow) and shifts between cohorts. The flows are delivered per scheme and per cohort, or netted as a net cashflow. Contributions to and withdrawals from reserves (solidarity reserve, compensation deposit) also use this message.

Sender
Pension administrator (PUO)
Receiver
Fiduciary manager (FM) and investment administrator (BA)
Timing
Monthly (expected); prospective (expected flows) or retrospective (realised flows), depending on the chain agreement
Arrangement
SPR (also for collective flows in FPR)
afdDefinitionName
VBPUO-001.00-Bericht_2._Cashflow_(0001b)

Message structure

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

Attributes(52)

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).
financialTransaction.cashflow netAmount number · multipleOf 0.01 O Net sum of contributions and withdrawals per scheme. A negative amount is a (net) withdrawal.
financialTransaction.cashflow withdrawalDate string · format date O Date on which (at the latest) the liquidity for the withdrawal has been released.
financialTransaction.cashflow withdrawalAmount number · multipleOf 0.01 O Withdrawal amount.
financialTransaction.cashflow contributionDate string · format date O Date of (receipt of) the contribution.
financialTransaction.cashflow contributionAmount number · multipleOf 0.01 O Amount of contribution.
financialTransaction.cashflow netDate string · format date O Date on which netted inflow and outflow is facilitated.
investment.portfolio refKey string · max 70 V Unique reference key assigned to an entity.
investment.portfolio description string · max 60 V Description.
financialTransaction.cashflow netAmount number · multipleOf 0.01 V Net sum of contributions and withdrawals per scheme. A negative amount is a (net) withdrawal.
financialTransaction.cashflow netDate string · format date V Date on which netted inflow and outflow is facilitated.
pension.cohort refKey string · max 70 V Unique reference key assigned to an entity.
pension.cohort netAmount number · multipleOf 0.01 O Net sum of contributions and withdrawals per scheme. A negative amount is a (net) withdrawal.
pension.cohort withdrawalAmount number · multipleOf 0.01 O Withdrawal amount.
pension.cohort contributionAmount number · multipleOf 0.01 O Amount of contribution.
pension.cohort netDate string · format date O Date on which netted inflow and outflow is facilitated.
pension.cohort description string · max 60 V Description.
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 participationStatus string O ADNDNS Participation type

Sample message

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

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

{
  "commonTechnical": [
    {
      "entityType": "default",
      "creationDateTime": "2023-12-28T12:00:00Z",
      "messageId": "msg123456",
      "testMessage": false,
      "party": [
        {
          "entityType": "sender",
          "refKey": "SEND123",
          "organizationName": "Zender Organisatie",
          "applicationSenderName": "ApplicatieNaam",
          "party": [
            {
              "entityType": "contact",
              "emailWork": "[email protected]",
              "workPhoneNumber": "+31678717607"
            }
          ]
        },
        {
          "entityType": "receiver",
          "refKey": "REC123",
          "rsinNumber": "987654321",
          "organizationName": "Ontvanger Organisatie"
        }
      ]
    }
  ],
  "commonFunctional": [
    {
      "entityType": "default",
      "afdDefinitionName": "VBPUO-001.00-Bericht_2._Cashflow_(0001b)",
      "afdDefinitionVersion": "001.05",
      "function": "01",
      "originalMessageId": "987654321"
    }
  ],
  "party": [
    {
      "entityType": "pensionProvider",
      "rsinNumber": "123456789",
      "organizationName": "Pensioenverstrekker",
      "puvCode": "U0003",
      "pension": [
        {
          "entityType": "scheme",
          "refKey": "SCH456",
          "pensionSchemeName": "Standaard Pensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2023-01-01",
              "endDate": "2023-12-31"
            }
          ],
          "financialTransaction": [
            {
              "entityType": "cashflow",
              "contributionAmount": 15000,
              "contributionDate": "2023-01-01",
              "withdrawalAmount": 4000,
              "withdrawalDate": "2023-01-15",
              "netAmount": 11000,
              "netDate": "2023-01-31"
            }
          ],
          "pension": [
            {
              "entityType": "cohort",
              "refKey": "COH789",
              "description": "Cohort 2023",
              "netAmount": 5000,
              "contributionAmount": 7000,
              "withdrawalAmount": 2000,
              "participationStatus": "16",
              "reserveIndicator": false,
              "startAge": 300,
              "endAge": 540
            },
            {
              "entityType": "cohort",
              "refKey": "COH790",
              "description": "Cohort 2024",
              "netAmount": 6000,
              "contributionAmount": 8000,
              "withdrawalAmount": 2000,
              "participationStatus": "16",
              "reserveIndicator": false,
              "startAge": 540,
              "endAge": 780
            }
          ]
        },
        {
          "entityType": "scheme",
          "refKey": "SCH457",
          "pensionSchemeName": "Geavanceerd Pensioen",
          "financialInformation": [
            {
              "entityType": "reportingPeriod",
              "startDate": "2023-03-01",
              "endDate": "2023-12-31"
            }
          ],
          "financialTransaction": [
            {
              "entityType": "cashflow",
              "contributionAmount": 16000,
              "contributionDate": "2023-03-01",
              "withdrawalAmount": 4000,
              "withdrawalDate": "2023-03-15",
              "netAmount": 12000,
              "netDate": "2023-03-31"
            }
          ],
          "pension": [
            {
              "entityType": "cohort",
              "refKey": "COH791",
              "description": "Cohort 2025",
              "netAmount": 5500,
              "contributionAmount": 7500,
              "withdrawalAmount": 2000,
              "participationStatus": "16",
              "reserveIndicator": false,
              "startAge": 400,
              "endAge": 520
            },
            {
              "entityType": "cohort",
              "refKey": "COH792",
              "description": "Cohort 2026",
              "netAmount": 6500,
              "contributionAmount": 8500,
              "withdrawalAmount": 2000,
              "participationStatus": "16",
              "reserveIndicator": false,
              "startAge": 520,
              "endAge": 900
            }
          ]
        }
      ]
    }
  ],
  "document": []
}

Rules and consistency checks

  • Inflow and outflow are delivered either separately (contributionAmount and withdrawalAmount with their dates) or netted (netAmount with netDate). Both forms in one cohort is not intended.
  • The SPR route (per cohort) and the FPR route (per investment portfolio) are mutually exclusive: choose one pattern per message.
  • Cohort totals reconcile to scheme level; the cohort structure is identical to that of message 1.
  • All dates fall within the reporting period (financialInformation.reportingPeriod.startDate to endDate).

Pitfalls

  • A prospective message (expected flows) that is not followed later by the realised flows leaves the investment administration with an estimate; agree which variant is leading.
  • netDate is often missing with netted delivery; since the documentation update of October 2025 (issue #82) it is clear that the date belongs with the net amount.

Errors and fixes

Difference from Release 2026(001.04 → 001.05)

Entitiesadded:investment.portfolio

Attributesadded:investment.portfolio.refKey, investment.portfolio.description, pension.cohort.netDate

Obligation changed:financialTransaction.cashflow.netAmount (O → V), financialTransaction.cashflow.netDate (O → V)

Frequently asked questions

Do I have to deliver inflow and outflow separately?

You may, but you do not have to: the standard also allows a netted cashflow (netAmount). Fiduciary managers often prefer separate flows because they support liquidity planning.

How do I report a shift between cohorts?

As an outflow at one cohort and an inflow at the other, in the same period. The scheme total does not change.

Where do reserve contributions belong?

With the reserve cohort (reserveIndicator = true, reserveType from AFDRES) as inflow or outflow, just like an ordinary cohort.

Change history

  • v1.3.0 (Release 2026): netDate documentation (issue #82); chunking.
  • v1.4.0 (Release 2027): SPR route and FPR route described as fill-in patterns; JSON Schema 2020-12.

Schema file: VBPUO-001.00-Bericht_2._Cashflow_(0001b)_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