Siehe auch: Austausch von Vorsorgedaten
Version 2.0.0
Der QR-Code enthält nebst dem Payload im json-String auch einen Wrapper, der unter anderem ein Attribut «version» enthält. Version 2.0.0 enthält in diesem Wrapper einen breaking Change gegenüber Version 1.1.0, um die Unterscheidung verschiedener Schemata im Payload zu ermöglichen. Die folgenden Informationen beziehen sich auf die Version 2.0.0. Hinweise zur Version 1.1.0 finden Sie hier.
Nebst dem Attribut «version» werden im Wrapper auch die Attribute «t» für Type und «d» für Data, den eigentlichen Payload, geführt. Unterstützt werden die folgenden drei Types:
Enum Wert | Beschreibung | Payload-Schema | QR-Code Logo |
|---|---|---|---|
P | Pension (Vorsorgeausweis 2. Säule) | Psc (ca-pension Release 4.0.0*) | |
VB | Vested Benefit (Freizügigkeitskonto) | Vbsc (ca-pension Release 4.0.0*) | |
3a | Säule 3a Konto | 3asc (ca-pension Release 4.0.0*) |
Der Inhalt des QR-Codes wird im Wesentlichen in 3 Schritten vorbereitet:
1. Der Dateninhalt wird dem relevanten Schema entsprechend dem Data-Attribut des Wrappers zugeordnet, ebenso der passende Enum-Wert als Type und 2.0.0 als Version. Das Ganze wird dann in ein komprimiertes json-Format gebracht:
{"version":"2.0.0","t":"P","d":{"pst":"regular","en":"Holzer AG","era":696,"hoaw":345314.05,"ora":780,"pi":"258271","ppl":{"ct":"mand","pln":"H120-IVAR"},"ppn":"PK Muster","rb":{"pd":51892.0,"cpd":5189.0,"ppd":36324.0,"opd":10378.0,"mlswpb":345314.0},"rc":{"brd":345314.05,"bmr":166575.95,"prb":[{"ra":696,"cb":622715.0,"p":30824.0},{"ra":780,"cb":864872.0,"p":51892.0},{"ra":840,"cb":954856.0,"p":57291.0}]},"rd":"2026-01-01","rpm":0.0,"sd":{"ds":92500.0,"ism":64260.0,"isre":77380.0,"isri":77380.0,"el":100.0},"ts":"2026-05-06T16:40:55.1517993+02:00"}}
2. Der kompakte json-String wird in Base64 enkodiert:
eyJ2ZXJzaW9uIjoiMi4wLjAiLCJ0IjoiUCIsImQiOnsicHN0IjoicmVndWxhciIsImVuIjoiSG9semVyIEFHIiwiZXJhIjo2OTYsImhvYXciOjM0NTMxNC4wNSwib3JhIjo3ODAsInBpIjoiMjU4MjcxIiwicHBsIjp7ImN0IjoibWFuZCIsInBsbiI6IkgxMjAtSVZBUiJ9LCJwcG4iOiJQSyBNdXN0ZXIiLCJyYiI6eyJwZCI6NTE4OTIuMCwiY3BkIjo1MTg5LjAsInBwZCI6MzYzMjQuMCwib3BkIjoxMDM3OC4wLCJtbHN3cGIiOjM0NTMxNC4wfSwicmMiOnsiYnJkIjozNDUzMTQuMDUsImJtciI6MTY2NTc1Ljk1LCJwcmIiOlt7InJhIjo2OTYsImNiIjo2MjI3MTUuMCwicCI6MzA4MjQuMH0seyJyYSI6NzgwLCJjYiI6ODY0ODcyLjAsInAiOjUxODkyLjB9LHsicmEiOjg0MCwiY2IiOjk1NDg1Ni4wLCJwIjo1NzI5MS4wfV19LCJyZCI6IjIwMjYtMDEtMDEiLCJycG0iOjAuMCwic2QiOnsiZHMiOjkyNTAwLjAsImlzbSI6NjQyNjAuMCwiaXNyZSI6NzczODAuMCwiaXNyaSI6NzczODAuMCwiZWwiOjEwMC4wfSwidHMiOiIyMDI2LTA1LTA2VDE2OjQwOjU1LjE1MTc5OTMrMDI6MDAifX0=
3. Dem enkodierten String wird der Präfix bvgdigitalpf:// angefügt:
bvgdigitalpf://eyJ2ZXJzaW9uIjoiMi4wLjAiLCJ0IjoiUCIsImQiOnsicHN0IjoicmVndWxhciIsImVuIjoiSG9semVyIEFHIiwiZXJhIjo2OTYsImhvYXciOjM0NTMxNC4wNSwib3JhIjo3ODAsInBpIjoiMjU4MjcxIiwicHBsIjp7ImN0IjoibWFuZCIsInBsbiI6IkgxMjAtSVZBUiJ9LCJwcG4iOiJQSyBNdXN0ZXIiLCJyYiI6eyJwZCI6NTE4OTIuMCwiY3BkIjo1MTg5LjAsInBwZCI6MzYzMjQuMCwib3BkIjoxMDM3OC4wLCJtbHN3cGIiOjM0NTMxNC4wfSwicmMiOnsiYnJkIjozNDUzMTQuMDUsImJtciI6MTY2NTc1Ljk1LCJwcmIiOlt7InJhIjo2OTYsImNiIjo2MjI3MTUuMCwicCI6MzA4MjQuMH0seyJyYSI6NzgwLCJjYiI6ODY0ODcyLjAsInAiOjUxODkyLjB9LHsicmEiOjg0MCwiY2IiOjk1NDg1Ni4wLCJwIjo1NzI5MS4wfV19LCJyZCI6IjIwMjYtMDEtMDEiLCJycG0iOjAuMCwic2QiOnsiZHMiOjkyNTAwLjAsImlzbSI6NjQyNjAuMCwiaXNyZSI6NzczODAuMCwiaXNyaSI6NzczODAuMCwiZWwiOjEwMC4wfSwidHMiOiIyMDI2LTA1LTA2VDE2OjQwOjU1LjE1MTc5OTMrMDI6MDAifX0=
Der so erstellte Text wird dann in einen QR-Code mit Error-Correction-Level «L» umgewandelt.
Zum Schluss wird der QR-Code zur visuellen Unterscheidung mit dem entsprechenden Logo versehen. Das Logo ist zentriert zu platzieren und soll in der Breite 25% der Gesamtbreite des QR-Codes einnehmen. Das Logo verdeckt damit knapp 5% der Fläche des QR-Codes, während das Error-Correction-Level «L» ca. 7% Fehlertoleranz aufweist. Damit bleibt der QR-Code auch unter voller Datenauslastung lesbar.

*das Schema befindet sich im Ordner src/components/schemas