Release 2027 (pre-release) · Schemaversie001.05 · Actief
SIVI-bericht 1 (0001a): Vermogen (VB-PUO)
Met bericht 1 geeft de PUO het totale pensioenvermogen bij aanvang van de periode door: per pensioenregeling en per cohort (leeftijdscohort of reservecohort). De fiduciair manager gebruikt het als startpunt voor het collectieve beleggingsbeleid; de beleggingsadministrateur gebruikt het om onafhankelijk te kunnen reconciliëren. Optioneel bevat het bericht de gewenste verdeling over beleggingsportefeuilles (absoluut of als percentage).
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.portfolio[0..99] · 4 attr.
- pension.cohort[1..99999] · 9 attr.
- investment.portfolio[0..99] · 4 attr.
- pension.scheme[1..999] · 3 attr.
Attributen(47)
| Entiteit | Attribuut | Type | V/O | Codelijst | Omschrijving |
|---|---|---|---|---|---|
| chunking.default | currentChunkId | string | 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 | 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 | messageId | string · max 70 | V | Unique identification of the message. (AFD 2.0 only) | |
| commonTechnical.default | testMessage | boolean | O | Indicatie of sprake is van een testbericht. | |
| 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 | workPhoneNumber | string · max 60 | V | Telefoonnummer werk | |
| party.contact | emailWork | string · max 60 | V | E-mail adres werk | |
| document.default | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| document.default | fileExtension | string | V | pdf | csv | txt | Extensienaam van het bestand waaronder de bijlage kan worden opgeslagen. Bijvoorbeeld "PDF", "DOC", etc. |
| document.default | fileName | string · max 60 | V | Naam van het bestand waaronder de bijlage kan worden opgeslagen. | |
| 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 | startAmount | number · multipleOf 0.01 | V | Bedrag (bijvoorbeeld van opgebouwd kapitaal) bij aanvang van een periode. | |
| pension.scheme | pensionSchemeName | string · max 60 | V | Naam van de pensioenregeling. | |
| financialInformation.reportingPeriod | startDate | string · format date | V | Startdatum (vanaf-datum). | |
| investment.portfolio | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| investment.portfolio | description | string · max 60 | V | Omschrijving | |
| investment.portfolio | startExposureAmount | number · multipleOf 0.01 | O | De toedeling van het pensioenvermogen per cohort aan een specifieke investmentportfolio, berekend op basis van de toedelingsregels zoals door de PUO gehanteerd. | |
| investment.portfolio | startExposurePercentage | number · multipleOf 0.01 | O | Het relatieve aandeel van startExposureAmount ten opzichte van het totale pensioenvermogen per datum. | |
| pension.cohort | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| pension.cohort | startAmount | number · multipleOf 0.01 | V | Bedrag (bijvoorbeeld van opgebouwd kapitaal) bij aanvang van een periode. | |
| pension.cohort | description | string · max 60 | V | Omschrijving | |
| pension.cohort | reserveDescription | string · max 60 | O | Omschrijving van het reserve. | |
| pension.cohort | reserveType | string | O | AFDRES | Type reserve |
| pension.cohort | reserveIndicator | boolean | V | Indicatie of een reserve aanwezig is / van toepassing is. | |
| pension.cohort | startAge | number · multipleOf 1 | O | Beginleeftijd. | |
| pension.cohort | endAge | number · multipleOf 1 | O | Eindleeftijd. | |
| pension.cohort | participationStatus | string | O | ADNDNS | Deelname status |
| investment.portfolio | refKey | string | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| investment.portfolio | description | string | V | Omschrijving | |
| investment.portfolio | startExposureAmount | number · multipleOf 0.01 | O | De toedeling van het pensioenvermogen per cohort aan een specifieke investmentportfolio, berekend op basis van de toedelingsregels zoals door de PUO gehanteerd. | |
| investment.portfolio | startExposurePercentage | number · multipleOf 0.01 | O | Het relatieve aandeel van startExposureAmount ten opzichte van het totale pensioenvermogen per datum. |
Voorbeeldbericht
Bron voorbeeld: SIVI voorbeeldbericht (Voorbeeldbericht_1). Waarden zijn fictief.
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2023-10-27T10:00:00Z",
"messageId": "1234567890123456789012",
"testMessage": false,
"party": [
{
"entityType": "sender",
"refKey": "ABC123",
"rsinNumber": "123456789",
"organizationName": "VoorbeeldBedrijf B.V.",
"applicationSenderName": "ApplicatieNaam",
"party": [
{
"entityType": "contact",
"emailWork": "[email protected]",
"workPhoneNumber": "+31678717607"
}
]
},
{
"entityType": "receiver",
"refKey": "XYZ789",
"rsinNumber": "987654321",
"organizationName": "OntvangerCorp1"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO-001.00-Bericht_1._Vermogen_(0001a)",
"afdDefinitionVersion": "001.05",
"function": "01",
"originalMessageId": "987654321"
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0003",
"rsinNumber": "222333449",
"organizationName": "PensioenFonds B.V.",
"pension": [
{
"entityType": "scheme",
"refKey": "SCHEME456",
"pensionSchemeName": "BasisPensioen",
"startAmount": 100000,
"financialInformation": [
{
"entityType": "reportingPeriod",
"startDate": "2023-01-01"
}
],
"pension": [
{
"entityType": "cohort",
"refKey": "COHORT101",
"startAmount": 60000,
"description": "Beschrijving van cohort 101",
"reserveIndicator": false,
"startAge": 300,
"endAge": 780,
"participationStatus": "16"
},
{
"entityType": "cohort",
"refKey": "COHORT202",
"startAmount": 75000,
"description": "Beschrijving van cohort 202",
"reserveIndicator": false,
"startAge": 540,
"endAge": 780,
"participationStatus": "20"
}
]
},
{
"entityType": "scheme",
"refKey": "SCHEME457",
"pensionSchemeName": "PlusPensioen",
"startAmount": 200000,
"financialInformation": [
{
"entityType": "reportingPeriod",
"startDate": "2023-01-01"
}
],
"pension": [
{
"entityType": "cohort",
"refKey": "COHORTRES1",
"startAmount": 85000,
"description": "Beschrijving van cohort 202",
"reserveIndicator": true,
"reserveType": "1",
"startAge": 45,
"endAge": 65,
"participationStatus": "16"
},
{
"entityType": "cohort",
"refKey": "COHORTRES2",
"startAmount": 85000,
"description": "Beschrijving van cohort 202",
"reserveIndicator": true,
"reserveType": "99",
"reserveDescription": "specifieke reserve voor slapers",
"startAge": 45,
"endAge": 65,
"participationStatus": "40"
}
]
}
]
}
]
}Variant: Voorbeeldbericht_2
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2023-10-27T10:00:00Z",
"messageId": "1234567890123456789012",
"testMessage": false,
"party": [
{
"entityType": "sender",
"refKey": "ABC123",
"rsinNumber": "123456789",
"organizationName": "VoorbeeldBedrijf B.V.",
"applicationSenderName": "ApplicatieNaam",
"party": [
{
"entityType": "contact",
"emailWork": "[email protected]",
"workPhoneNumber": "+31678717607"
}
]
},
{
"entityType": "receiver",
"refKey": "XYZ789",
"rsinNumber": "987654321",
"organizationName": "OntvangerCorp1"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO-001.00-Bericht_1._Vermogen_(0001a)",
"afdDefinitionVersion": "001.05",
"function": "01",
"originalMessageId": "987654321"
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0003",
"rsinNumber": "222333449",
"organizationName": "PensioenFonds B.V.",
"pension": [
{
"entityType": "scheme",
"refKey": "SCHEME456",
"pensionSchemeName": "BasisPensioen",
"startAmount": 100000,
"financialInformation": [
{
"entityType": "reportingPeriod",
"startDate": "2023-01-01"
}
],
"pension": [
{
"entityType": "cohort",
"refKey": "COHORT101",
"startAmount": 60000,
"description": "Beschrijving van cohort 101",
"reserveIndicator": false,
"startAge": 300,
"endAge": 780,
"participationStatus": "16",
"investment": [
{
"entityType": "portfolio",
"refKey": "PF_MIX_NEUTRAL_01",
"description": "Neutraal Mixfonds Beleggingen Standaard",
"startExposureAmount": 60000
}
]
},
{
"entityType": "cohort",
"refKey": "COHORT202",
"startAmount": 75000,
"description": "Beschrijving van cohort 202",
"reserveIndicator": false,
"startAge": 540,
"endAge": 780,
"participationStatus": "20",
"investment": [
{
"entityType": "portfolio",
"refKey": "PF_STOCK_GLOBAL_02",
"description": "Wereldwijde Aandelenportefeuille Dynamisch",
"startExposureAmount": 45000
},
{
"entityType": "portfolio",
"refKey": "PF_BOND_EURO_02",
"description": "Europese Obligatieportefeuille Defensief",
"startExposurePercentage": 0.4
}
]
}
]
},
{
"entityType": "scheme",
"refKey": "SCHEME457",
"pensionSchemeName": "PlusPensioen",
"startAmount": 200000,
"financialInformation": [
{
"entityType": "reportingPeriod",
"startDate": "2023-01-01"
}
],
"pension": [
{
"entityType": "cohort",
"refKey": "COHORTRES1",
"startAmount": 85000,
"description": "Beschrijving van cohort RES1",
"reserveIndicator": true,
"reserveType": "1",
"startAge": 45,
"endAge": 65,
"participationStatus": "16",
"investment": [
{
"entityType": "portfolio",
"refKey": "PF_RESERVE_LOWRISK_03",
"description": "Lage Risico Reserveportefeuille Solide",
"startExposurePercentage": 1
}
]
},
{
"entityType": "cohort",
"refKey": "COHORTRES2",
"startAmount": 85000,
"description": "Beschrijving van cohort RES2",
"reserveIndicator": true,
"reserveType": "99",
"reserveDescription": "specifieke reserve voor slapers",
"startAge": 45,
"endAge": 65,
"participationStatus": "40",
"investment": []
}
]
}
]
}
]
}Regels en verbandscontroles
- Het regelingtotaal (pension.scheme.startAmount) is gelijk aan de som van de cohortbedragen (pension.cohort.startAmount); afwijkingen worden op geaggregeerd niveau gereconcilieerd volgens het fondsbeleid.
- Elk cohort heeft een unieke refKey en wordt beschreven met startAge en endAge (gehele getallen sinds Release 2026) en een deelnemerstatus uit codelijst ADNDNS.
- Reservecohorten (solidariteitsreserve, risicodelingsreserve, compensatiedepot) worden gemarkeerd met reserveIndicator en getypeerd met reserveType uit codelijst AFDRES.
- Lege cohorten worden óf expliciet met bedrag 0 aangeleverd, óf weggelaten; kies één conventie per keten en leg die vast.
- financialInformation.reportingPeriod.startDate is de peildatum van het vermogen; de ontvanger toetst of die aansluit op de vorige periode.
- Bedragen hebben maximaal twee decimalen (multipleOf 0.01); percentages maximaal twaalf.
Valkuilen
- Een cohort dat in bericht 2 (cashflow) voorkomt maar niet in bericht 1: de ontvanger kan de mutatie dan niet plaatsen. Houd de cohortindeling over berichten 1, 2 en 3 identiek.
- Meer dan enkele duizenden cohorten of jaarcohorten maken het bericht groot: gebruik het chunking-protocol van Release 2026 in plaats van meerdere losse berichten.
- Het veld investment.portfolio is optioneel en nieuw sinds Release 2026; een ontvanger op een oudere release negeert het of wijst het bericht af.
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 onjuistDe ontvanger routeert het bericht verkeerd of wijst het af; in het feedbackbericht is afdDefinitionName een vaste waarde (const) en levert een afwijking een schemafout op.
- 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.
- Berichtfunctie ongeldig (ADNFUN 01, 02, 09 of 54)Schemafout op commonFunctional/0/function: waarde niet toegestaan.
- testMessage = true in productieHet bericht wordt geaccepteerd maar niet verwerkt, of juist als test genegeerd terwijl het productie was.
- creationDateTime geen geldige date-timeSchemafout 'must match format date-time'.
- puvCode onbekend in codelijst AFDIDPSchemafout 'must match exactly one schema in oneOf' op party/0/puvCode.
- rsinNumber niet 9 positiesSchemafout op rsinNumber (lengte) bij sender, receiver of pensionProvider.
- party.sender: refKey of organizationName ontbreektSchemafout 'must have required property' op de verzendende partij.
- party.contact: emailWork of workPhoneNumber ontbreektSchemafout op de contactpersoon onder de verzender.
- pension.scheme: refKey ontbreekt of pensionSchemeName langer dan 60Schemafout op de regeling.
- startAmount niet in twee decimalen (multipleOf 0.01)Schemafout 'must be multiple of 0.01'.
- reportingPeriod: endDate ligt vóór startDateHet schema accepteert het bericht; de ontvanger wijst het functioneel af of boekt de stromen in de verkeerde periode.
- Cohort-cardinaliteit overschreden (minContains / maxContains)Schemafout 'must contain at least 1 valid item' of 'must contain at most 99999 valid items' op pension.
- participationStatus ongeldig (ADNDNS)Schemafout 'must match exactly one schema in oneOf' op pension.cohort.participationStatus.
- reserveType ongeldig (AFDRES)Schemafout 'must match exactly one schema in oneOf' op reserveType.
- reserveIndicator zonder reserveType of reserveDescriptionSchema-valide, maar de ontvanger kan de reserve niet typeren en boekt hem als gewoon cohort.
- endAge kleiner dan startAge, of geen geheel getalBij decimalen een schemafout 'must be integer'; bij verwisselde grenzen accepteert het schema en wijst de ontvanger af.
- Cohortsom wijkt af van het regelingtotaal (verbandscontrole)Schema-valide, maar de fiduciair of beleggingsadministrateur meldt een reconciliatieverschil op regelingniveau.
- Onbekend veld (additionalProperties = false)Schemafout 'must NOT have additional properties' met de naam van het extra veld.
- entityType komt niet overeen met de vaste waardeSchemafout 'must be equal to constant' op entityType, vaak gevolgd door 'must contain at least 1 valid item' op de bovenliggende array.
- Chunking: chunkSequenceNumber of totalNumberOfChunks inconsistentDe ontvanger kan de reeks niet sluiten: volgnummer hoger dan het totaal, dubbel volgnummer of wisselend totaal binnen één currentChunkId.
- Bijlage: fileExtension niet pdf, csv of txt, of fileName langer dan 60Schemafout op document.
- Fout ontdekt na acceptatie: het correctieprotocolEen geaccepteerd en verwerkt bericht blijkt inhoudelijk fout (verkeerd bedrag, verkeerd cohort).
- Schema-draft mismatch: definitions versus $defs, draft 2019-09 versus 2020-12De validator meldt 'can't resolve reference' of 'no schema with key or ref' bij het laden van het schema, nog vóór het bericht wordt getoetst.
Veelgestelde vragen
Wat is het verschil tussen bericht 1 (Vermogen) en bericht 2 (Cashflow)?
Bericht 1 is een stand: het vermogen bij aanvang van de periode. Bericht 2 is een stroom: de in- en uitstroom in de periode. Samen met bericht 4 (rendement) sluit de keten de periode: beginstand + cashflow + rendement = eindstand.
Wie ontvangt bericht 1: de fiduciair manager of de beleggingsadministrateur?
Beiden, rechtstreeks van de PUO. Een uitgangspunt van de standaard is dat een onafhankelijke asset serviceprovider dezelfde informatie ontvangt als de fiduciair manager, zodat hij zelfstandig kan rapporteren en reconciliëren.
Wordt bericht 1 ook in de flexibele premieregeling gebruikt?
Ja. De FPR-berichten 5 tot en met 15 dekken alleen de geunitiseerde stromen. Collectieve stromen zoals risicopremies, reservestortingen en onttrekkingen aan collectieve pools lopen via de SPR-berichten 1 tot en met 4 (handleiding paragraaf 4.6).
Zijn startAge en endAge in jaren of in maanden?
Het schema schrijft gehele getallen voor en legt de eenheid niet vast; het officiële voorbeeldbericht gebruikt maanden (300 en 780). Leg de eenheid vast in de ketenafspraken en houd die in alle berichten gelijk.
Wijzigingsgeschiedenis
- v0.2.0 (april 2024): puvCode toegevoegd, refKey verplicht.
- v1.3.0 (Release 2026): investment.portfolio toegevoegd, startAge en endAge gehele getallen, chunking.
- v1.4.0 (Release 2027): JSON Schema 2020-12, codelijsten via $defs.
Schema-bestand: VBPUO-001.00-Bericht_1._Vermogen_(0001a)_v5.json · JSON-schema (001.05) · GitHub
