Verifiable Health Link
0.0.2-current - ci-build International flag

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

: Test Plan – VHL Sharer - TTL Representation

Active as of 2026-03-13

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-VHLSharer"] ; # 
  fhir:url [
fhir:v "https://profiles.ihe.net/ITI/VHL/TestPlan/TestPlan-VHLSharer"^^xsd:anyURI ;
fhir:l <https://profiles.ihe.net/ITI/VHL/TestPlan/TestPlan-VHLSharer>
  ] ; # 
  fhir:version [ fhir:v "0.0.2-current"] ; # 
  fhir:name [ fhir:v "TestPlan_VHLSharer"] ; # 
  fhir:title [ fhir:v "Test Plan – VHL Sharer"] ; # 
  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 "Unit test plan for the **VHL Sharer** actor of the IHE ITI Verifiable Health Links (VHL) profile.\n\nScope: validates all behaviour expected of a VHL Sharer across its four transactions:\nsubmitting its own PKI material (ITI-YY1 initiator), retrieving the trust list to obtain peer\nkeys (ITI-YY2 initiator), generating VHLs on demand (ITI-YY3 responder), and serving document\nmanifests to authorised VHL Receivers (ITI-YY5 responder). Each test suite corresponds to one\ntransaction and exercises three atomic feature files."] ; # 
  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/VHLSharer ;
fhir:reference [ fhir:v "ActorDefinition/VHLSharer" ]
  ] ) ; # 
  fhir:testCase ( [
fhir:sequence [ fhir:v 1 ] ;
    ( fhir:testRun [
fhir:narrative [ fhir:v "**ITI-YY1 Message Semantics** – Shared message format file (same as Trust Anchor suite 1).\nVerifies the DID Document structure the VHL Sharer must construct." ] ;
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/ITI-YY1-submit-pki-material-message.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY1-submit-pki-material-message.feature" ] ;
fhir:display [ fhir:v "ITI-YY1 Submit PKI Material – Message Semantics" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY1 VHL Sharer Initiator Expected Actions** – Verifies key pair generation, submission\npathways (direct HTTP POST, indirect publication, offline), provenance metadata, response\nhandling (201/400/401/403/422), and secure private key retention.\nSource: sections 2:3.YY1.4.1.2 (Message Semantics) and 2:3.YY1.4.1.3 (Initiator Expected Actions)." ] ;
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/ITI-YY1-submit-pki-material-initiator.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY1-submit-pki-material-initiator.feature" ] ;
fhir:display [ fhir:v "ITI-YY1 Submit PKI Material – VHL Sharer Initiator Expected Actions" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY1 Security Considerations** – Shared security file (same as Trust Anchor suite 1)." ] ;
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/ITI-YY1-submit-pki-material-security.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY1-submit-pki-material-security.feature" ] ;
fhir:display [ fhir:v "ITI-YY1 Submit PKI Material – Security Considerations" ]         ]       ]     ] )
  ] [
fhir:sequence [ fhir:v 2 ] ;
    ( fhir:testRun [
fhir:narrative [ fhir:v "**ITI-YY2 Message Semantics** – Shared message format file.\nVerifies the request/response format for the trust list retrieval." ] ;
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/ITI-YY2-retrieve-trust-list-message.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY2-retrieve-trust-list-message.feature" ] ;
fhir:display [ fhir:v "ITI-YY2 Retrieve Trust List – Message Semantics" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY2 VHL Sharer Initiator Expected Actions** – Verifies that the VHL Sharer correctly\nconstructs retrieval requests, sends them over TLS, validates and caches returned DID Documents,\nmaps verification methods, tracks expiry, handles revocation notifications, and processes\nerror responses (401/403/404).\nSource: sections 2:3.YY2.4.1 (Request Message) and 2:3.YY2.4.2.3 (Initiator Expected Actions)." ] ;
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/ITI-YY2-retrieve-trust-list-initiator.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY2-retrieve-trust-list-initiator.feature" ] ;
fhir:display [ fhir:v "ITI-YY2 Retrieve Trust List – VHL Sharer Initiator Expected Actions" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY2 Security Considerations** – Shared security file." ] ;
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/ITI-YY2-retrieve-trust-list-security.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY2-retrieve-trust-list-security.feature" ] ;
fhir:display [ fhir:v "ITI-YY2 Retrieve Trust List – Security Considerations" ]         ]       ]     ] )
  ] [
fhir:sequence [ fhir:v 3 ] ;
    ( fhir:testRun [
fhir:narrative [ fhir:v "**ITI-YY3 Message Semantics** – Verifies the $generate-vhl request parameter definitions\n(sourceIdentifier, exp, flag, label, passcode) and the response format\n(HTTP 200, FHIR Parameters, Binary qrcode, HC1: prefix)." ] ;
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/ITI-YY3-generate-vhl-message.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY3-generate-vhl-message.feature" ] ;
fhir:display [ fhir:v "ITI-YY3 Generate VHL – Message Semantics" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY3 VHL Sharer Responder Expected Actions** – Verifies the complete VHL generation\npipeline: passcode hashing (bcrypt/Argon2/PBKDF2), folder ID (256-bit entropy) and 32-byte\nencryption key generation, SHL payload construction (url/key/flag/v), mandatory manifest URL\nparameters, HCERT/CWT encoding (COSE signing → ZLIB → Base45 → HC1: prefix), QR code\ngeneration (ISO/IEC 18004:2015 Alphanumeric mode Q), and error OperationOutcome responses.\nSource: sections 2:3.YY3.4.1.3 (Responder Expected Actions) and 2:3.YY3.4.2 (Response Message)." ] ;
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/ITI-YY3-generate-vhl-responder.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY3-generate-vhl-responder.feature" ] ;
fhir:display [ fhir:v "ITI-YY3 Generate VHL – VHL Sharer Responder Expected Actions" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY3 Security Considerations** – Verifies HTTPS enforcement, passcode security\n(no plaintext storage, no embedding in QR code), key entropy requirements, and PHI exclusion." ] ;
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/ITI-YY3-generate-vhl-security.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY3-generate-vhl-security.feature" ] ;
fhir:display [ fhir:v "ITI-YY3 Generate VHL – Security Considerations" ]         ]       ]     ] )
  ] [
fhir:sequence [ fhir:v 4 ] ;
    ( fhir:testRun [
fhir:narrative [ fhir:v "**ITI-YY5 Message Semantics** – Verifies request format (HTTP POST /List/_search,\nContent-Type, Accept, FHIR search parameters, SHL parameters, HTTP Message Signature\nheaders) and response format (searchset Bundle structure, search.mode, error codes)." ] ;
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/ITI-YY5-retrieve-manifest-message.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY5-retrieve-manifest-message.feature" ] ;
fhir:display [ fhir:v "ITI-YY5 Retrieve Manifest – Message Semantics" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY5 VHL Sharer Responder Expected Actions** – Verifies HTTP Message Signature\nverification (keyid lookup, RFC 9421 signature base, Content-Digest), OAuth FAST Option\ntoken validation, VHL authorisation (folder ID, expiry, revocation, passcode hash comparison),\nFHIR search execution (_include support), Bundle construction, error codes (400/401/403/404/422/429/500),\nrate limiting, and audit logging.\nSource: sections 2:3.YY5.4.1.5 (Responder Expected Actions), 2:3.YY5.4.2 (Response Message),\nand 2:3.YY5.5 (Security Considerations)." ] ;
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/ITI-YY5-retrieve-manifest-responder.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY5-retrieve-manifest-responder.feature" ] ;
fhir:display [ fhir:v "ITI-YY5 Retrieve Manifest – VHL Sharer Responder Expected Actions" ]         ]       ]     ] [
fhir:narrative [ fhir:v "**ITI-YY5 Security Considerations** – Verifies TLS requirements, replay prevention (signature\ntimestamp freshness, OAuth jti uniqueness), passcode timing-attack protection, trust list\nenforcement, and audit logging (no plaintext passcode in logs)." ] ;
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/ITI-YY5-retrieve-manifest-security.feature> ;
fhir:reference [ fhir:v "https://build.fhir.org/ig/IHE/ITI.VHL/ITI-YY5-retrieve-manifest-security.feature" ] ;
fhir:display [ fhir:v "ITI-YY5 Retrieve Manifest – Security Considerations" ]         ]       ]     ] )
  ] ) . #