Release 2027 · Schema version 001.05 · Active
SIVI message 3 (0001c): Pension projection (VB-PUO)
Message 3 contains the projected future pension payments per cohort (SPR route) or per investment portfolio (FPR route) and per payment date, plus the amounts weighted by the hedging percentage. This lets the fiduciary or LDI manager set up the interest-rate hedge (protection portfolio) on the fund's actual liability profile.
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] · 1 attr.
- financialTransaction.payment[1..99999] · 4 attr.
- investment.portfolio[0..99] · 2 attr.
- financialTransaction.payment[0..9999] · 4 attr.
- pension.cohort[0..99999] · 8 attr.
- financialTransaction.payment[0..9999] · 4 attr.
- pension.scheme[1..999] · 2 attr.
Attributes (51)
| 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_3._Pensioenprojectie_(0001c) | 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 | projectionDate | string · format date | V | Date of projection of pension benefits. | |
| financialTransaction.payment | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| financialTransaction.payment | hedgedExpectedPensionPaymentAmount | number · multipleOf 0.01 | V | Amount of cash flows to be hedged per period. | |
| financialTransaction.payment | expectedPensionPaymentDate | string · format date | V | Expected pension payment date (possibly per scheme). | |
| financialTransaction.payment | amount | number · multipleOf 0.01 | V | An amount. | |
| investment.portfolio | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| investment.portfolio | description | string · max 60 | V | Description. | |
| financialTransaction.payment | refKey | string · max 70 | V | ID van de expected payment | |
| financialTransaction.payment | hedgedExpectedPensionPaymentAmount | number · multipleOf 0.01 | O | Af te dekken kasstroom | |
| financialTransaction.payment | expectedPensionPaymentDate | string · format date | V | Pensioenuitkeringsmoment | |
| financialTransaction.payment | amount | number · multipleOf 0.01 | V | Geprojecteerde uitkering | |
| pension.cohort | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| pension.cohort | description | string · max 60 | V | Description. | |
| pension.cohort | reserveType | string | O | AFDRES | Reserve type |
| pension.cohort | reserveDescription | string · max 60 | O | Description of the reserve. | |
| 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 |
| financialTransaction.payment | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| financialTransaction.payment | hedgedExpectedPensionPaymentAmount | number · multipleOf 0.01 | O | Amount of cash flows to be hedged per period. | |
| financialTransaction.payment | expectedPensionPaymentDate | string · format date | V | Expected pension payment date (possibly per scheme). | |
| financialTransaction.payment | amount | number · multipleOf 0.01 | V | An amount. |
Sample message
Sample source: SIVI voorbeeldbericht (Voorbeeldbericht_3). Values are fictitious.
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2023-12-29T12:30:00Z",
"messageId": "msg987654",
"testMessage": true,
"party": [
{
"entityType": "sender",
"refKey": "send001",
"organizationName": "Insurance Company B",
"rsinNumber": "987654321",
"applicationSenderName": "InsurAppV3"
},
{
"entityType": "receiver",
"refKey": "recv001",
"organizationName": "Pension Fund A",
"rsinNumber": "123456789"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO-001.00-Bericht_3._Pensioenprojectie_(0001c)",
"afdDefinitionVersion": "001.05",
"function": "01",
"originalMessageId": "orig123456"
}
],
"party": [
{
"entityType": "pensionProvider",
"organizationName": "St. Pf. Openbare Bibliotheken",
"rsinNumber": "555666779",
"puvCode": "U0003",
"pension": [
{
"entityType": "scheme",
"refKey": "scheme01",
"pensionSchemeName": "Standard Retirement Plan",
"financialInformation": [
{
"entityType": "reportingPeriod",
"projectionDate": "2024-01-01"
}
],
"financialTransaction": [
{
"entityType": "payment",
"refKey": "pay001",
"hedgedExpectedPensionPaymentAmount": 150000,
"expectedPensionPaymentDate": "2045-01-01",
"amount": 300000
}
],
"pension": [
{
"entityType": "cohort",
"refKey": "cohort2045",
"description": "2045 Retirement Group",
"participationStatus": "16",
"reserveIndicator": false,
"startAge": 480,
"endAge": 780,
"financialTransaction": [
{
"entityType": "payment",
"refKey": "pay003",
"hedgedExpectedPensionPaymentAmount": 150000,
"expectedPensionPaymentDate": "2045-01-01",
"amount": 300000
}
]
}
]
},
{
"entityType": "scheme",
"refKey": "scheme02",
"pensionSchemeName": "Advanced Retirement Plan",
"financialInformation": [
{
"entityType": "reportingPeriod",
"projectionDate": "2025-01-01"
}
],
"financialTransaction": [
{
"entityType": "payment",
"refKey": "pay002",
"hedgedExpectedPensionPaymentAmount": 200000,
"expectedPensionPaymentDate": "2045-01-01",
"amount": 400000
}
],
"pension": [
{
"entityType": "cohort",
"refKey": "cohort2030",
"description": "2030 Retirement Group",
"participationStatus": "16",
"reserveIndicator": false,
"startAge": 360,
"endAge": 840,
"financialTransaction": [
{
"entityType": "payment",
"refKey": "pay010",
"hedgedExpectedPensionPaymentAmount": 48000,
"expectedPensionPaymentDate": "2060-01-01",
"amount": 100000
},
{
"entityType": "payment",
"refKey": "pay020",
"hedgedExpectedPensionPaymentAmount": 135000,
"expectedPensionPaymentDate": "2050-01-01",
"amount": 300000
}
]
}
]
}
]
}
]
}Variant: Voorbeeldbericht_3-fpr
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2027-03-01T09:00:00+01:00",
"messageId": "VB-0001C-FPR-0001",
"testMessage": true,
"party": [
{
"entityType": "sender",
"refKey": "PUO01",
"organizationName": "Pensioenuitvoerder Voorbeeld",
"applicationSenderName": "VoorbeeldApplicatie"
},
{
"entityType": "receiver",
"refKey": "LDI01",
"organizationName": "LDI-manager Voorbeeld"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO-001.00-Bericht_3._Pensioenprojectie_(0001c)",
"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",
"projectionDate": "2027-03-01"
}
],
"financialTransaction": [
{
"entityType": "payment",
"refKey": "REG-2027-04",
"expectedPensionPaymentDate": "2027-04-01",
"amount": 3514918.77,
"hedgedExpectedPensionPaymentAmount": 2108951.26
},
{
"entityType": "payment",
"refKey": "REG-2027-05",
"expectedPensionPaymentDate": "2027-05-01",
"amount": 3490318.75,
"hedgedExpectedPensionPaymentAmount": 2094191.25
},
{
"entityType": "payment",
"refKey": "REG-2027-06",
"expectedPensionPaymentDate": "2027-06-01",
"amount": 3508812.51,
"hedgedExpectedPensionPaymentAmount": 2105287.51
},
{
"entityType": "payment",
"refKey": "REG-2027-07",
"expectedPensionPaymentDate": "2027-07-01",
"amount": 3527160.16,
"hedgedExpectedPensionPaymentAmount": 2116296.1
},
{
"entityType": "payment",
"refKey": "REG-2027-08",
"expectedPensionPaymentDate": "2027-08-01",
"amount": 3512499.96,
"hedgedExpectedPensionPaymentAmount": 2107499.97
},
{
"entityType": "payment",
"refKey": "REG-2027-09",
"expectedPensionPaymentDate": "2027-09-01",
"amount": 3573552.94,
"hedgedExpectedPensionPaymentAmount": 2144131.77
},
{
"entityType": "payment",
"refKey": "REG-2027-10",
"expectedPensionPaymentDate": "2027-10-01",
"amount": 3540532.54,
"hedgedExpectedPensionPaymentAmount": 2124319.52
},
{
"entityType": "payment",
"refKey": "REG-2027-11",
"expectedPensionPaymentDate": "2027-11-01",
"amount": 3568188.56,
"hedgedExpectedPensionPaymentAmount": 2140913.13
},
{
"entityType": "payment",
"refKey": "REG-2027-12",
"expectedPensionPaymentDate": "2027-12-01",
"amount": 3565981.08,
"hedgedExpectedPensionPaymentAmount": 2139588.65
},
{
"entityType": "payment",
"refKey": "REG-2028-01",
"expectedPensionPaymentDate": "2028-01-01",
"amount": 3574616.56,
"hedgedExpectedPensionPaymentAmount": 2144769.94
},
{
"entityType": "payment",
"refKey": "REG-2028-02",
"expectedPensionPaymentDate": "2028-02-01",
"amount": 3570675.04,
"hedgedExpectedPensionPaymentAmount": 2142405.02
},
{
"entityType": "payment",
"refKey": "REG-2028-03",
"expectedPensionPaymentDate": "2028-03-01",
"amount": 3611398.32,
"hedgedExpectedPensionPaymentAmount": 2166838.99
}
],
"investment": [
{
"entityType": "portfolio",
"refKey": "PF-01",
"description": "Matchingportefeuille",
"financialTransaction": [
{
"entityType": "payment",
"refKey": "PF-01-2027-04",
"expectedPensionPaymentDate": "2027-04-01",
"amount": 2097703.73,
"hedgedExpectedPensionPaymentAmount": 1258622.24
},
{
"entityType": "payment",
"refKey": "PF-01-2027-05",
"expectedPensionPaymentDate": "2027-05-01",
"amount": 2102245.02,
"hedgedExpectedPensionPaymentAmount": 1261347.01
},
{
"entityType": "payment",
"refKey": "PF-01-2027-06",
"expectedPensionPaymentDate": "2027-06-01",
"amount": 2101379.16,
"hedgedExpectedPensionPaymentAmount": 1260827.5
},
{
"entityType": "payment",
"refKey": "PF-01-2027-07",
"expectedPensionPaymentDate": "2027-07-01",
"amount": 2114954.28,
"hedgedExpectedPensionPaymentAmount": 1268972.57
},
{
"entityType": "payment",
"refKey": "PF-01-2027-08",
"expectedPensionPaymentDate": "2027-08-01",
"amount": 2107560.54,
"hedgedExpectedPensionPaymentAmount": 1264536.32
},
{
"entityType": "payment",
"refKey": "PF-01-2027-09",
"expectedPensionPaymentDate": "2027-09-01",
"amount": 2136854.33,
"hedgedExpectedPensionPaymentAmount": 1282112.6
},
{
"entityType": "payment",
"refKey": "PF-01-2027-10",
"expectedPensionPaymentDate": "2027-10-01",
"amount": 2124354.82,
"hedgedExpectedPensionPaymentAmount": 1274612.89
},
{
"entityType": "payment",
"refKey": "PF-01-2027-11",
"expectedPensionPaymentDate": "2027-11-01",
"amount": 2143068.14,
"hedgedExpectedPensionPaymentAmount": 1285840.88
},
{
"entityType": "payment",
"refKey": "PF-01-2027-12",
"expectedPensionPaymentDate": "2027-12-01",
"amount": 2130407.18,
"hedgedExpectedPensionPaymentAmount": 1278244.31
},
{
"entityType": "payment",
"refKey": "PF-01-2028-01",
"expectedPensionPaymentDate": "2028-01-01",
"amount": 2155702.41,
"hedgedExpectedPensionPaymentAmount": 1293421.45
},
{
"entityType": "payment",
"refKey": "PF-01-2028-02",
"expectedPensionPaymentDate": "2028-02-01",
"amount": 2156983.7,
"hedgedExpectedPensionPaymentAmount": 1294190.22
},
{
"entityType": "payment",
"refKey": "PF-01-2028-03",
"expectedPensionPaymentDate": "2028-03-01",
"amount": 2165678.29,
"hedgedExpectedPensionPaymentAmount": 1299406.97
}
]
},
{
"entityType": "portfolio",
"refKey": "PF-02",
"description": "Renteportefeuille",
"financialTransaction": [
{
"entityType": "payment",
"refKey": "PF-02-2027-04",
"expectedPensionPaymentDate": "2027-04-01",
"amount": 1417215.04,
"hedgedExpectedPensionPaymentAmount": 850329.02
},
{
"entityType": "payment",
"refKey": "PF-02-2027-05",
"expectedPensionPaymentDate": "2027-05-01",
"amount": 1388073.73,
"hedgedExpectedPensionPaymentAmount": 832844.24
},
{
"entityType": "payment",
"refKey": "PF-02-2027-06",
"expectedPensionPaymentDate": "2027-06-01",
"amount": 1407433.35,
"hedgedExpectedPensionPaymentAmount": 844460.01
},
{
"entityType": "payment",
"refKey": "PF-02-2027-07",
"expectedPensionPaymentDate": "2027-07-01",
"amount": 1412205.88,
"hedgedExpectedPensionPaymentAmount": 847323.53
},
{
"entityType": "payment",
"refKey": "PF-02-2027-08",
"expectedPensionPaymentDate": "2027-08-01",
"amount": 1404939.42,
"hedgedExpectedPensionPaymentAmount": 842963.65
},
{
"entityType": "payment",
"refKey": "PF-02-2027-09",
"expectedPensionPaymentDate": "2027-09-01",
"amount": 1436698.61,
"hedgedExpectedPensionPaymentAmount": 862019.17
},
{
"entityType": "payment",
"refKey": "PF-02-2027-10",
"expectedPensionPaymentDate": "2027-10-01",
"amount": 1416177.72,
"hedgedExpectedPensionPaymentAmount": 849706.63
},
{
"entityType": "payment",
"refKey": "PF-02-2027-11",
"expectedPensionPaymentDate": "2027-11-01",
"amount": 1425120.42,
"hedgedExpectedPensionPaymentAmount": 855072.25
},
{
"entityType": "payment",
"refKey": "PF-02-2027-12",
"expectedPensionPaymentDate": "2027-12-01",
"amount": 1435573.9,
"hedgedExpectedPensionPaymentAmount": 861344.34
},
{
"entityType": "payment",
"refKey": "PF-02-2028-01",
"expectedPensionPaymentDate": "2028-01-01",
"amount": 1418914.15,
"hedgedExpectedPensionPaymentAmount": 851348.49
},
{
"entityType": "payment",
"refKey": "PF-02-2028-02",
"expectedPensionPaymentDate": "2028-02-01",
"amount": 1413691.34,
"hedgedExpectedPensionPaymentAmount": 848214.8
},
{
"entityType": "payment",
"refKey": "PF-02-2028-03",
"expectedPensionPaymentDate": "2028-03-01",
"amount": 1445720.03,
"hedgedExpectedPensionPaymentAmount": 867432.02
}
]
}
]
}
]
}
]
}Rules and consistency checks
- Per cohort an amount and a hedged amount (hedgedExpectedPensionPaymentAmount) are included per future payment date; the sum of the weighted projected benefits per cohort equals the total hedging cashflow per future period.
- Since the final Release 2027 message 3 also has an FPR route: per scheme 0 to 99 investment portfolios (investment.portfolio), each with 0 to 9999 projected payments; the payments directly under the scheme are the scheme totals. Each scheme uses exactly one breakdown, per cohort or per portfolio: neither or both is not valid (manual sections 6.3.1 and 3.2.5).
- The number of payments per cohort is 0 to 9999 (since Release 2026). Payments under a cohort or portfolio are optional since the final Release 2027, so an empty list is not needed. A cohort with value 0 is sent with 0 or left out; the standard has no null.
- expectedPensionPaymentDate is the expected payment date (documentation update October 2025, issue #80); year cohorts are described with startAge and endAge (issue #88).
- The projection covers the total population; partial projections per cohort follow the same time axis.
Pitfalls
- Message 3 is the largest message in the chain: hundreds of cohorts times decades of payment dates. SIVI publishes chunking samples specifically for this message; use them.
- A projection in nominal amounts without the hedged amount is useless to the LDI manager; fill both fields.
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.
- Cohort cardinality exceeded (minContains / maxContains)Schema error 'must contain at least 1 valid item' or 'must contain at most 99999 valid items' on pension.
- participationStatus invalid (ADNDNS)Schema error 'must match exactly one schema in oneOf' on pension.cohort.participationStatus.
- reserveIndicator without reserveType, or reserveType 99 without reserveDescriptionUnder Release 2027 an error of the consistency check at reserveType. Under Release 2026 schema-valid, but the receiver cannot type the reserve and books it as an ordinary cohort; with reserveType 99 without a description it cannot tell which reserve is meant.
- endAge smaller than startAge, or not an integerWith decimals a schema error 'must be integer'; with swapped bounds the schema accepts and the receiver rejects.
- Sum of weighted projected payments unequal to the hedging cashflow (message 3)The LDI manager cannot reconcile the hedge; schema-valid.
- Scheme with both cohorts and portfolios, or without a breakdown or cashflow (messages 2 and 3)Schema-valid, but the receiver cannot assign the flows or the projection to the right route. The WTP Data Lab validator reports an error at the scheme.
- Chunking: chunkSequenceNumber or totalNumberOfChunks inconsistentThe receiver cannot close the series: sequence number higher than the total, duplicate sequence number or varying total within one currentChunkId.
- Chunking: missing chunk at the receiverThe series stays open; the content is not processed and the sender only gets feedback per received chunk.
Difference from Release 2026 (001.04 → 001.05)
Entities added: investment.portfolio
Attributes added: investment.portfolio.refKey, investment.portfolio.description
Frequently asked questions
Why is the pension projection a separate message?
Because the receiver differs: the interest-rate hedge is set up by the fiduciary or a specialised LDI manager, whereas capital and cashflow mainly feed the investment administration.
How far ahead do I project?
The standard does not fix a horizon; in practice it follows the interest-rate term structure and the fund's hedging policy, often 60 years or more.
Change history
- v1.2.0 (November 2024): maximum 9999 payments per cohort.
- v1.3.0 (Release 2026): cardinality 0 to 9999; chunking; documentation issues #80 and #88.
- v1.4.0 (Release 2027): JSON Schema 2020-12.
- Final Release 2027 (12 October 2026): FPR route with investment portfolios; exactly one breakdown per scheme; payments under cohort and portfolio optional.
Schema file: VBPUO-001.00-Bericht_3._Pensioenprojectie_(0001c).json · JSON-schema (001.05) · GitHub
