Verifiable Health Link, published by IHE IT Infrastructure Technical Committee. This guide is not an authorized publication; it is the continuous build for version 0.0.2-current built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/IHE/ITI.VHL/ and changes regularly. See the Directory of published versions
: Integration Test Plan – QR Code Generation and Validation Flow - TTL Representation
Raw ttl | Download
@prefix fhir: <http://hl7.org/fhir/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
# - resource -------------------------------------------------------------------
a fhir:TestPlan ;
fhir:nodeRole fhir:treeRoot ;
fhir:id [ fhir:v "TestPlan-QRCodeFlow"] ; #
fhir:url [
fhir:v "https://profiles.ihe.net/ITI/VHL/TestPlan/TestPlan-QRCodeFlow"^^xsd:anyURI ;
fhir:l <https://profiles.ihe.net/ITI/VHL/TestPlan/TestPlan-QRCodeFlow>
] ; #
fhir:version [ fhir:v "0.0.2-current"] ; #
fhir:name [ fhir:v "TestPlan_QRCodeFlow"] ; #
fhir:title [ fhir:v "Integration Test Plan – QR Code Generation and Validation Flow"] ; #
fhir:status [ fhir:v "active"] ; #
fhir:date [ fhir:v "2026-03-13T13:59:49+00:00"^^xsd:dateTime] ; #
fhir:publisher [ fhir:v "IHE IT Infrastructure Technical Committee"] ; #
fhir:contact ( [
( fhir:telecom [
fhir:system [ fhir:v "url" ] ;
fhir:value [ fhir:v "https://www.ihe.net/ihe_domains/it_infrastructure/" ] ] )
] [
( fhir:telecom [
fhir:system [ fhir:v "email" ] ;
fhir:value [ fhir:v "iti@ihe.net" ] ] )
] [
fhir:name [ fhir:v "IHE IT Infrastructure Technical Committee" ] ;
( fhir:telecom [
fhir:system [ fhir:v "email" ] ;
fhir:value [ fhir:v "iti@ihe.net" ] ] )
] ) ; #
fhir:description [ fhir:v "Integration test plan for the **QR Code Generation and Validation Flow** of the IHE ITI\nVerifiable Health Links (VHL) profile.\n\nScope: validates multi-actor, cross-transaction scenarios that span ITI-YY3 (Generate VHL),\nITI-YY4 (Provide VHL), and ITI-YY5 (Retrieve Manifest). Tests verify that the QR code\ngenerated in YY3 can be decoded in YY4, that the decoded SHL payload's manifest URL is used\ncorrectly in YY5, and that the full end-to-end pipeline including passcode handling, signature\nverification, and VHL authorization succeeds.\n\nActors exercised: VHL Holder, VHL Sharer, VHL Receiver."] ; #
fhir:jurisdiction ( [
( fhir:coding [
fhir:system [
fhir:v "http://unstats.un.org/unsd/methods/m49/m49.htm"^^xsd:anyURI ;
fhir:l <http://unstats.un.org/unsd/methods/m49/m49.htm> ] ;
fhir:code [ fhir:v "001" ] ] )
] ) ; #
fhir:scope ( [
fhir:l fhir:ActorDefinition/VHLHolder ;
fhir:reference [ fhir:v "ActorDefinition/VHLHolder" ]
] [
fhir:l fhir:ActorDefinition/VHLSharer ;
fhir:reference [ fhir:v "ActorDefinition/VHLSharer" ]
] [
fhir:l fhir:ActorDefinition/VHLReceiver ;
fhir:reference [ fhir:v "ActorDefinition/VHLReceiver" ]
] ) ; #
fhir:testCase ( [
fhir:sequence [ fhir:v 1 ] ;
( fhir:testRun [
fhir:narrative [ fhir:v "Execute all scenarios in the Gherkin integration feature file\n`integration-qrcode-flow.feature`.\n\nScenario groups:\n- **Group A – VHL Generation (YY3):** VHL Holder requests VHL; VHL Sharer generates a valid\n HCERT-signed QR code; SHL payload URL is verifiable; passcode is retained by VHL Holder.\n- **Group B – QR Presentation and Decoding (YY4):** VHL Receiver decodes the QR code\n generated in Group A using the trust list; COSE signature verified; decoded manifest URL\n matches the YY5 endpoint; passcode is obtained from VHL Holder when P flag is present.\n- **Group C – Manifest Retrieval (YY5):** VHL Receiver uses the decoded folder ID and URL\n to send an authenticated HTTP POST; VHL Sharer verifies the receiver's signature using the\n trust list; correct passcode results in HTTP 200 Bundle; incorrect passcode results in 422.\n- **Group D – Full End-to-End:** Complete flow from YY3 generation through YY4 decode to YY5\n manifest retrieval succeeds; passcode-protected variant succeeds end-to-end.\n- **Group E – Expired and Revoked VHL Rejection:** VHL Receiver rejects an expired QR code at\n YY4 without proceeding to YY5; VHL Sharer returns 403 for a revoked VHL at YY5.\n\nThese scenarios require pipeline state: the QR code from YY3 feeds YY4, and the decoded\npayload from YY4 feeds YY5." ] ;
fhir:script [
fhir:language [
( fhir:coding [
fhir:system [
fhir:v "urn:ietf:bcp:13"^^xsd:anyURI ;
fhir:l <urn:ietf:bcp:13> ] ;
fhir:code [ fhir:v "text/x-gherkin" ] ] ) ;
fhir:text [ fhir:v "Gherkin" ] ] ;
fhir:source [
a fhir:Reference ;
fhir:l <https://build.fhir.org/ig/IHE/ITI.VHL/integration-qrcode-flow.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/integration-qrcode-flow.feature" ] ;
fhir:display [ fhir:v "Integration – QR Code Generation and Validation Flow" ] ] ] ] )
] ) . #