Release 2027 · Schemaversie 001.05 · Actief
SIVI-bericht 2 (0001b): Cashflow (VB-PUO)
Bericht 2 geeft de geldstromen van de periode door: premies en inkomende waardeoverdrachten (instroom), uitkeringen en uitgaande overdrachten (uitstroom) en verschuivingen tussen cohorten. Elke cashflow draagt het saldo (netAmount met netDate), desgewenst aangevuld met instroom en uitstroom apart. Het totaal staat direct onder de regeling; de uitsplitsing gaat per cohort (SPR-route) of per beleggingsportefeuille (FPR-route). Ook stortingen in en onttrekkingen aan reserves (solidariteitsreserve, compensatiedepot) lopen via dit bericht.
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] · 2 attr.
- financialInformation.reportingPeriod[1..1] · 2 attr.
- financialTransaction.cashflow[0..1] · 6 attr.
- investment.portfolio[0..99] · 2 attr.
- financialTransaction.cashflow[1..1] · 6 attr.
- pension.cohort[0..99999] · 12 attr.
- pension.scheme[1..999] · 2 attr.
Attributen (56)
| Entiteit | Attribuut | Type | V/O | Codelijst | Omschrijving |
|---|---|---|---|---|---|
| chunking.default | currentChunkId | string · max 70 | 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 | VBPUO-001.00-Bericht_2._Cashflow_(0001b) | 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 | testMessage | boolean | O | Indicatie of sprake is van een testbericht. | |
| commonTechnical.default | messageId | string · max 70 | V | Unique identification of the message. (AFD 2.0 only) | |
| 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 | emailWork | string · max 60 | V | E-mail adres werk | |
| party.contact | workPhoneNumber | string · max 60 | V | Telefoonnummer werk | |
| document.default | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| document.default | fileName | string · max 60 | V | Naam van het bestand waaronder de bijlage kan worden opgeslagen. | |
| document.default | fileExtension | string | V | pdf | csv | txt | Extensienaam van het bestand waaronder de bijlage kan worden opgeslagen. Bijvoorbeeld "PDF", "DOC", etc. |
| 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 | pensionSchemeName | string · max 60 | V | Naam van de pensioenregeling. | |
| financialInformation.reportingPeriod | endDate | string · format date | V | Vervaldatum (tot-datum). | |
| financialInformation.reportingPeriod | startDate | string · format date | V | Startdatum (vanaf-datum). | |
| financialTransaction.cashflow | netAmount | number · multipleOf 0.01 | V | Netto som van inleg en onttrekkingen per regeling. Een negatief bedrag is een (netto) onttrekking. | |
| financialTransaction.cashflow | withdrawalDate | string · format date | O | Datum waarop (uiterlijk) de liquiditeiten voor de onttrekking zijn vrijgemaakt. | |
| financialTransaction.cashflow | withdrawalAmount | number · multipleOf 0.01 | O | Som van de uitstroom. | |
| financialTransaction.cashflow | contributionDate | string · format date | O | Datum van ontvangst van inleg. | |
| financialTransaction.cashflow | contributionAmount | number · multipleOf 0.01 | O | Som van de inleg. | |
| financialTransaction.cashflow | netDate | string · format date | V | Datum waarop gesaldeerde instroom en uitstroom wordt gefaciliteerd. | |
| 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 | |
| financialTransaction.cashflow | netAmount | number · multipleOf 0.01 | V | Gesaldeerd netto kasstroombedrag per beleggingsportefeuille binnen een regeling. Een negatief bedrag is een netto onttrekking. | |
| financialTransaction.cashflow | withdrawalDate | string · format date | O | Datum waarop (uiterlijk) de liquiditeiten ten behoeve van de onttrekking zijn vrijgemaakt | |
| financialTransaction.cashflow | withdrawalAmount | number · multipleOf 0.01 | O | Som van de uitstroom | |
| financialTransaction.cashflow | contributionDate | string · format date | O | Datum van ontvangst van de inleg | |
| financialTransaction.cashflow | contributionAmount | number · multipleOf 0.01 | O | Som van inleg | |
| financialTransaction.cashflow | netDate | string · format date | V | De valutadatum waarop het netto kasstroombedrag per beleggingsportefeuille daadwerkelijk door de PUO wordt betaald aan, of ontvangen van, de Vermogensbeheerder | |
| pension.cohort | refKey | string · max 70 | V | Entiteitsreferentie is een unieke referentie sleutel die aan een entiteit wordt toegekend. | |
| pension.cohort | netAmount | number · multipleOf 0.01 | V | Netto som van inleg en onttrekkingen per regeling. Een negatief bedrag is een (netto) onttrekking. | |
| pension.cohort | withdrawalAmount | number · multipleOf 0.01 | O | Som van de uitstroom. | |
| pension.cohort | contributionAmount | number · multipleOf 0.01 | O | Som van de inleg. | |
| pension.cohort | netDate | string · format date | V | De valutadatum waarop het gesaldeerde netto kasstroombedrag voor het cohort daadwerkelijk door de PUO wordt betaald aan, of ontvangen van, de Vermogensbeheerder | |
| pension.cohort | description | string · max 60 | V | Omschrijving | |
| pension.cohort | reserveType | string | O | AFDRES | Type reserve |
| pension.cohort | reserveDescription | string · max 60 | O | Omschrijving van het 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 |
Voorbeeldbericht
Bron voorbeeld: SIVI voorbeeldbericht (Voorbeeldbericht_2). Waarden zijn fictief.
{
"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": "St. Pf. Openbare Bibliotheken",
"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,
"netDate": "2023-01-31"
},
{
"entityType": "cohort",
"refKey": "COH790",
"description": "Cohort 2024",
"netAmount": 6000,
"contributionAmount": 8000,
"withdrawalAmount": 2000,
"participationStatus": "16",
"reserveIndicator": false,
"startAge": 540,
"endAge": 780,
"netDate": "2023-01-31"
}
]
},
{
"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,
"netDate": "2023-03-31"
},
{
"entityType": "cohort",
"refKey": "COH792",
"description": "Cohort 2026",
"netAmount": 6500,
"contributionAmount": 8500,
"withdrawalAmount": 2000,
"participationStatus": "16",
"reserveIndicator": false,
"startAge": 520,
"endAge": 900,
"netDate": "2023-03-31"
}
]
}
]
}
],
"document": []
}Variant: Voorbeeldbericht_2-fpr
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2027-03-01T09:00:00+01:00",
"messageId": "VB-0001B-FPR-0001",
"testMessage": true,
"party": [
{
"entityType": "sender",
"refKey": "PUO01",
"organizationName": "Pensioenuitvoerder Voorbeeld",
"applicationSenderName": "VoorbeeldApplicatie"
},
{
"entityType": "receiver",
"refKey": "FM01",
"organizationName": "Fiduciair Manager Voorbeeld"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO-001.00-Bericht_2._Cashflow_(0001b)",
"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",
"startDate": "2027-02-01",
"endDate": "2027-02-28"
}
],
"financialTransaction": [
{
"entityType": "cashflow",
"netAmount": 2453092.12,
"netDate": "2027-03-05"
}
],
"investment": [
{
"entityType": "portfolio",
"refKey": "PF-01",
"description": "Matchingportefeuille",
"financialTransaction": [
{
"entityType": "cashflow",
"contributionAmount": 1977728.18,
"contributionDate": "2027-02-28",
"withdrawalAmount": 1129773.18,
"withdrawalDate": "2027-03-01",
"netAmount": 847955,
"netDate": "2027-03-05"
}
]
},
{
"entityType": "portfolio",
"refKey": "PF-02",
"description": "Rendementsportefeuille",
"financialTransaction": [
{
"entityType": "cashflow",
"contributionAmount": 2200605.01,
"contributionDate": "2027-02-28",
"withdrawalAmount": 567819.01,
"withdrawalDate": "2027-03-01",
"netAmount": 1632786,
"netDate": "2027-03-05"
}
]
},
{
"entityType": "portfolio",
"refKey": "PF-03",
"description": "Liquiditeitenportefeuille",
"financialTransaction": [
{
"entityType": "cashflow",
"contributionAmount": 879827.97,
"contributionDate": "2027-02-28",
"withdrawalAmount": 907476.85,
"withdrawalDate": "2027-03-01",
"netAmount": -27648.88,
"netDate": "2027-03-04"
}
]
}
]
}
]
}
]
}Regels en verbandscontroles
- Sinds de definitieve Release 2027 draagt elk cashflowblok netAmount en netDate: direct onder de regeling, per cohort en per beleggingsportefeuille. contributionAmount en withdrawalAmount zijn een optionele aanvulling, onder de regeling en per portefeuille met contributionDate en withdrawalDate; SIVI's eigen voorbeeldbericht vult ze alle drie. netAmount is het saldo van inleg en onttrekking, dus drie bedragen die niet op elkaar aansluiten spreken elkaar tegen. In Release 2026 mag het saldo, de aparte stromen of allebei.
- Het totaal staat in beide routes direct onder de regeling (financialTransaction.cashflow). Wat elkaar per regeling uitsluit, is de uitsplitsing: per cohort (SPR-route; de bedragen staan op het cohort zelf) óf per beleggingsportefeuille (FPR-route; elke gebruikte portefeuille heeft precies één cashflow). Een bericht dat binnen één regeling beide uitsplitsingen gebruikt, is "niet geldig". De uitsplitsing zelf is in bericht 2 optioneel, maar elke regeling bevat minstens één cashflow (handleiding §6.3.1 en §3.2.5).
- Wordt de cashflow per cohort uitgesplitst, dan tellen de cohortbedragen op tot het bedrag op regelingniveau. Release 2027 legt dat vast als verbandscontrole (handleiding §6.3.1 en §3.2.5: scheme.netAmount is de som van cohort.netAmount, en hetzelfde voor contributionAmount en withdrawalAmount); in Release 2026 is het een aansluiting die de ontvanger kan toetsen. In de FPR-route draagt het totaal in de regel de som van de portefeuilles, maar of die moet aansluiten, is "niet vastgelegd". Let op bij contributionAmount en withdrawalAmount: de in- en uitstroom per cohort bevat ook de verschuivingen tussen cohorten (§3.2.2); die vallen weg in netAmount, niet in de in- en uitstroom afzonderlijk. Houd de cohortindeling gelijk aan die van bericht 1.
- Alle datums vallen binnen de rapportageperiode (financialInformation.reportingPeriod.startDate tot endDate).
Valkuilen
- Een prospectief bericht (verwachte stromen) dat later niet wordt gevolgd door de gerealiseerde stromen laat de beleggingsadministratie met een schatting achter; spreek af welke variant leidend is.
- netDate ontbreekt vaak, vooral per cohort. Sinds de definitieve Release 2027 is dat een schemafout: netAmount en netDate zijn verplicht in elk cashflowblok. Het gepubliceerde schema telt alleen de geldige cohorten (issue #63), dus een generieke validator laat het door; een ontvanger die elk cohort toetst niet. SIVI's eigen voorbeeld van de pre-release had dit gebrek.
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 onjuist (vaste waarde sinds de definitieve Release 2027)Schemafout 'must be equal to constant' op afdDefinitionName; de validator van WTP Data Lab noemt de verwachte waarde. Typisch voor een bericht dat op de pre-release van juli 2026 is gebouwd: het vermeldt de juiste versie 001.05 en valt toch af.
- 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.
- 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 reserveType 99 zonder reserveDescriptionOnder Release 2027 een fout van de verbandscontrole bij reserveType. Onder Release 2026 schema-valide, maar de ontvanger kan de reserve niet typeren en boekt hem als gewoon cohort; bij reserveType 99 zonder omschrijving weet hij niet welke reserve is bedoeld.
- 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 regelingtotaalSchema-valide, maar de fiduciair of beleggingsadministrateur meldt een reconciliatieverschil op regelingniveau.
- netAmount is niet het saldo van contributionAmount en withdrawalAmountSchema-valide; de ontvanger weet niet welk bedrag leidend is, of telt de stromen dubbel.
- netAmount of netDate ontbreekt in een cashflowblok (bericht 2)Schemafout 'must have required property' op netDate of netAmount, bij een cohort, bij de cashflow onder de regeling of bij een beleggingsportefeuille. Een generieke JSON Schema-validator ziet de fout bij een cohort vaak niet.
- Regeling met cohorten én portefeuilles, of zonder uitsplitsing of cashflow (berichten 2 en 3)Schema-valide, maar de ontvanger kan de stromen of de projectie niet aan de juiste route toewijzen. De validator van WTP Data Lab meldt een fout bij de regeling.
- Fout ontdekt na acceptatie: het correctieprotocolEen geaccepteerd en verwerkt bericht blijkt inhoudelijk fout (verkeerd bedrag, verkeerd cohort).
Verschil met Release 2026 (001.04 → 001.05)
Entiteiten toegevoegd: investment.portfolio
Attributen toegevoegd: investment.portfolio.refKey, investment.portfolio.description, pension.cohort.netDate
Verplichting gewijzigd: financialTransaction.cashflow.netAmount (O → V), financialTransaction.cashflow.netDate (O → V), pension.cohort.netAmount (O → V)
Veelgestelde vragen
Moet ik instroom en uitstroom apart aanleveren?
Dat mag, maar het hoeft niet. In Release 2027 zijn netAmount en netDate altijd verplicht; instroom en uitstroom apart zijn een aanvulling daarop. Fiduciair managers geven vaak de voorkeur aan aparte stromen omdat die de liquiditeitsplanning ondersteunen.
Mag een beleggingsportefeuille naast de cashflow direct onder de regeling?
Ja. In de FPR-route staat het totaal direct onder de regeling en volgt de uitsplitsing per portefeuille; SIVI's voorbeeld Voorbeeldbericht_2-fpr doet precies dat. Alleen cohorten én portefeuilles in één regeling is niet geldig. In de pre-release van juli was ook de combinatie met de cashflow onder de regeling verboden.
Hoe geef ik een verschuiving tussen cohorten door?
Als uitstroom bij het ene cohort en instroom bij het andere, in dezelfde periode. Het regelingtotaal verandert dan niet.
Waar horen reservestortingen thuis?
Bij het reservecohort (reserveIndicator = true, reserveType uit AFDRES) als instroom of uitstroom, net als bij een gewoon cohort.
Wijzigingsgeschiedenis
- v1.3.0 (Release 2026): documentatie netDate (issue #82); chunking.
- v1.4.0 (Release 2027): SPR-route en FPR-route; JSON Schema 2020-12.
- Definitieve Release 2027 (12 oktober 2026): netAmount en netDate verplicht in elk cashflowblok, ook per cohort; de cashflow per portefeuille mag ook in- en uitstroom dragen; de routes in §6.3.1 en de nieuwe §3.2.5.
Schema-bestand: VBPUO-001.00-Bericht_2._Cashflow_(0001b).json · JSON-schema (001.05) · GitHub
