# Governance: Rules and Workflows (draft) ```json= { "@context": ["https://github.com/hyperledger/aries-rfcs/blob/main/concepts/0430-machine-readable-governance-frameworks/context.jsonld"], "name": "Aruba COVID Governance", "version": "0.1", "format": "1.0", "id": "<uuid>", "description": "This document describes COVID health and travel governance for the nation of Aruba in a machine readable way.", "last_updated": "2021-06-10", "docs_uri": "need_to_create", "data_uri": "need_to_create", "topics": [ "medical, travel" ], "jurisdictions": [ "US>NY>New York City", "AW" ], "geos": [ "USA", "Aruba" ], "schemas": [ { "id": "4CLG5pU5v294VdkMWxSByu:2:Email:1.0", "name": "Validated Email", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:SMS:1.0", "name": "SMS", "verification": "hl:2lksjfdskljdf4432234lsakfHDHd" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:Medical_Release:1.0", "name": "Medical Release", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:Lab_Order:1.0", "name": "Lab Order", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgaEFFHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPUJFDD" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:Lab_Result:1.0", "name": "Lab Result", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQOPPS" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:Vaccine:1.0", "name": "Vaccine", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQJKDe" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:Vaccine_Exemption:1.0", "name": "Vaccine Exemption", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQMJQd" }, { "id": "4CLG5pU5v294VdkMWxSByu:2:Trusted_Traveler:1.0", "name": "Trusted Traveler", "issuance": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy", // Hashlink to presentation definition for prerequisite "verification": [ { "travel_verifier": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" // Hashlink to presentation definition for verification }, { "hospitality_verifier": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" } ] } ], "participants": [ { "name": "Aruba Government", "id": "did:example:aruba", "describe": { "label": "Aruba", "sublabel": "Aruba Government", "website": "issuinggovernmentsite.org", "email": "credential_manager@issuinggovernmentsite.org" } }, { "name": "General Horacio Oduber Hospital of Aruba", "id": "did:example:hospital", "describe": { "label": "Horacio Oduber Hospital", "sublabel": "General Horacio Oduber Hospital of Aruba", "website": "issuinglabsite.com", "email": "credential_manager@issuinglabsite.com" } }, { "name": "Hilton Casino", "id": "did:example:casino", "describe": { "label": "Hilton Resort and Casino", "sublabel": "Verifying Org", "website": "verifyingorgsite.com", "email": "verifying_manager@verifyingorgsite.com" } } ], "roles": [ "holder", "health_issuer", "travel_issuer", "health_verifier", "travel_verifier", "hospitality_verifier" ], "permissions": [ // Roles mapped to participants { "grant": ["health_issuer"], "when": { "any": [ {"id": "did:example:hospital"}, {"id": "did:example:lab"} ] } }, { "grant": ["travel_issuer"], "when": { "any": [ {"id": "did:example:aruba"} // Aruba Ministry of Health ] } }, { "grant": ["health_verifier"], "when": { "any": [ {"id": "did:example:aruba"} // Aruba Ministry of Health ] } }, { "grant": ["travel_verifier"], "when": { "any": [ {"id": "did:example:airport"} // Aruba Ministry of Health ] } }, { "grant": ["hospitality_verifier"], "when": { "any": [ {"id": "did:example:casino"} ] } } ], "actions": [ // Actions are a name associated with a protocol (and sometimes a schema) { "name": "connect", "type": "connection", }, { "name": "issue_lab_order", "type": "issue-credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Lab_Order:1.0" }, { "name": "issue_lab_result", "type": "issue-credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Lab_Result:1.0" }, { "name": "issue_vaccine", "type": "issue-credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Vaccine:1.0" }, { "name": "issue_exemption" "type": "issue-credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Vaccine_Exemption:1.0" }, { "name": "issue_trusted_traveler" "type": "issue-credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Trusted_Traveler:1.0" }, { "name": "verify_identity", "type": "present-proof" }, { "name": "verify_lab_order", "type": "present-proof", "schema": "4CLG5pU5v294VdkMWxSByu:2:Lab_Order:1.0" }, { "name": "verify_lab_result", "type": "present-proof", "schema": "4CLG5pU5v294VdkMWxSByu:2:Lab_Result:1.0" }, { "name": "verify_vaccine", "type": "present-proof", "schema": "4CLG5pU5v294VdkMWxSByu:2:Vaccine:1.0" }, { "name": "verify_exemption" "type": "present-proof", "schema": "4CLG5pU5v294VdkMWxSByu:2:Vaccine_Exemption:1.0" }, { "name": "verify_trusted_traveler" "type": "present-proof", "schema": "4CLG5pU5v294VdkMWxSByu:2:Trusted_Traveler:1.0" } ], "privileges": [ // Actions mapped to roles { "grant": ["issue_lab_order"], "when": { "any": [ {"role":"health_issuer"} ] } }, { "grant": ["issue_lab_result"], "when": { "any": [ {"role": "health_issuer"} ] } }, { "grant": ["issue_vaccine"], "when": { "any": [ {"role": "health_issuer"} ] } }, { "grant": ["issue_vaccine_exemption"], "when": { "any": [ {"role":"health_issuer"}, {"role":"holder"} ] } }, { "grant": ["issue_trusted_traveler"], "when": { "any": [ {"role":"travel_issuer"}, ] } }, { "grant": ["verify_identity"], "when": { "any": [ {"role":"health_issuer"}, {"role":"travel_issuer"}, {"role":"health_verifier"}, {"role":"travel_verifier"}, {"role":"hospitality_verifier"} ] } }, { "grant": ["verify_lab_order"], "when": { "any": [ {"role":"health_verifier"}, ] } }, { "grant": ["verify_lab_result"], "when": { "any": [ {"role":"health_verifier"}, ] } }, { "grant": ["verify_vaccine"], "when": { "any": [ {"role":"health_verifier"}, ] } }, { "grant": ["verify_vaccine_exemption"], "when": { "any": [ {"role":"health_verifier"}, ] } }, { "grant": ["verify_trusted_traveler"], "when": { "any": [ {"role":"travel_verifier"}, {"role":"hospitality_verifier"} ] } } ], "flows": { // Most likely a stand-alone document referred to // using a hash link, but included here while we're brainstorming "connect-to-health-issuer": { "role": "holder", "initial": true, "actions": [ { "name":"connect", "target":"health_issuer" } ], "next": [ "success": [ { "name":"health-verify-identity", // Happy path }, ] ] } "health-verify-identity": { "role": "health_issuer", "initial": true, "conditions": [ { "type":"connection", "target":"holder" } ], "actions": [ { "name":"verify_identity", }, ], "next": [ "success": [ { "name":"health-issue-credential", // Happy path }, ] ] }, "health-issue-credential": { "role": "health_issuer", "actions": [ "or": [ { "and": [ { "name":"issue_lab_order" }, { "name":"issue_lab_result" } ] } { "name":"issue_vaccine" }, { "name":"issue_vaccine_exemption" }, ] ], "next": [ "success": [ { "name":"connect-to-travel-issuer" // Happy path }, ] ] }, "connect-to-travel-issuer": { "role": "holder", "actions": [ { "name":"connect", "target":"travel_issuer" } ], "next": [ "success": [ { "name":"travel-verify-holder" // Happy path } ] ] }, "travel-verify-holder": { "role": "travel_issuer", "actions": [ { "name": "verify_identity", }, ], "next": [ "success": [ { "name":"travel-issue-credential", // Happy path }, ] ] }, "travel-issue-credential": { "role": "travel_issuer", "actions": [ { "name": "issue_trusted_traveler" } ], }, } // ------------------------------------- // Old Flow Below // ------------------------------------- "connect-to-issuer": { // DONE "role": "holder", "initial": "true", // Initial for the holder? "actions": [ "initiate_connection", { "present_id_proof": { "content": [ "passport", "demographics" ] } } ], "next": [ { "issuer-validate-proof": { // Happy path "when": [ "connection_success" ] } }, { "reject-connection": { // Unhappy path "when": "connection_error" } } ] }, // Changed flow starts here "issuer-validate-proof": { // DONE. Needs to be renamed // Do we want to have single elements part of the array for the roles? Makes sense if we ever going to expand functionality. "role": ["health_issuer"], "initial": "true", // Innitial for the issuer? "actions": [ "identify_holder" ], "next": [ { "issue-lab-order": { "when": [ [ "issuer_to_holder_connection", // Do we want to check that and how do we pass that? {"request":"get_lab_order"} ] ] } }, { "issue-lab-result": { "when": [ [ "issuer_to_holder_connection", // Do we want to check that and how do we pass that? "lab_order_credential", {"request": "get_lab_result"} ] ] } }, { "issue-exemption": { "when": [ [ "issuer_to_holder_connection", // Do we want to check that and how do we pass that? "exemption_proof", // doctor's form, waiver application (religious (membership proof), philosophical). How and when do we validate exemption proof? Also consider a manual flow. {"request":"get_exemption"} ] ] } }, { "issue-vaccine": { "when": [ [ "issuer_to_holder_connection", // Do we want to check that and how do we pass that? "lab_order_credential", {"request":"get_vaccine"} ] ] } }, { "reject-health-credential": { // Unhappy path the naming is confusing?...( "when": "proof_error" } }, { "contact-support": { "when": "unspecified_error" } } ] }, "verifier-validate-proof": { // DONE. Needs to be renamed "role": ["health_verifier", "travel_verifier"], // would that be health and travel verifier? What is the difference between them? Isn't it should be just travel verifier? "initial": "true", // Is it initial for verifier? "actions": [ "identify_holder" ], "next": [ { "issue_trusted_traveler": { "when": [ [ "proof_success", // Do we really need a "success" flag? What will determine success? "vaccine_credential" // Full vacination. Do we handle single single vaccine dose credential? ], [ "proof_success", "test_result_credential" ], [ "proof_success", "exemption_credential", "test_result_credential" ] ] } }, { "reject-health-credential": { // Unhappy path the naming is confusing...( "when": "proof_error" } }, { "contact-support": { "when": "unspecified_error" } } ] }, // Changed flow ends here "issue-lab-order": { // DONE "role": "health_issuer", "actions": { "issue_lab_order": { "content": [ { "credential": "test_id_credential" }, { "recipient": "holder" } ] } }, "next": [ { "issue-test-result": { // Happy path for PCR "when": [ {"test_type": "PCR"}, "test_id_success" ] } }, { "issue-vaccine": { // Happy path for vaccine "when": [ {"test_type": "vaccine"}, "vaccine_success" ] } }, { "reject-lab-order": { // Unhappy path "when": "lab_order_error" } }, { "contact-support": { // Unhappy path "when": "unspecified_error" } } ] }, "issue-lab-result": { // DONE "role": "health_issuer", "actions": { "issue_lab_result": { "content": [ { "credential": "lab_result_credential" } ] } }, "next": [ { "connect-to-verifier": { // Happy path "when": [ "lab_result_success" ] } }, { "reject-lab-result": { // Unhappy path "when": "lab_result_error" } } ] }, "issue-exemption": { // DONE "role": ["issuer", "holder"], "actions": { "issue_exemption": { "content": [ { "credential": "exemption_credential" } ] } }, "next": [ { "connect-to-verifier": { // Happy path "when": [ "exemption_success", "lab_order_credential" ] } }, { "issue-lab-order": { // Happy path. One more step. Get a PCR test to complete medical stack. Do we want to include some sort of message? "when": [ "exemption_credential" ], "actions": [ { "name": "Get PCR Test", "type": "message", "content": "One more step. Get a PCR test to complete medical stack. Once you have your lab result you will be eligible to apply for a trusted traveler credential." } ] } }, { "reject-exemption": { // Unhappy path "when": "exemption_error" } } ] }, "issue-vaccine": { // DONE "role": "health_issuer", "actions": { "issue_vaccine": { "content": [ { "credential": "vaccine_credential" }, ] } }, "next": [ { "connect-to-verifier": { // Happy path "when": [ "lab_result_success" ] } }, { "reject-vaccine": { // Unhappy path "when": "vaccine_error" } } ] }, "connect-to-verifier": { // DONE "role": "holder", "initial": "true", "actions": [ "connect", { "present_id_proof": { "content": [ "passport", "demographics" ] } } ], "next": [ { "verifier-validate-proof": { // Happy path "when": [ "connection_success" ] } }, { "reject-connection": { // Unhappy path "when": "connection_error" } } ] }, "issue-trusted-traveler": { "role": "travel_issuer", "actions": [ { "name": "issue_trusted_traveler", "type": "credential", "content": "trusted_traveler_credential" } ] }, // Unhappy path messages (sent as problem reports) "reject-trusted-traveler": { // DONE "role": "travel_issuer", "actions": [ { "name": "reject_trusted_traveler", "type": "problem_report", "content": "Sorry, your trusted traveler credential request was rejected" } ], "next": "next-step" // I don't know where to go next }, "reject-connection": { // DONE "role": ["health_issuer", "health_verifier", "travel_verifier", "hospitality_verifier"], "actions": [ { "name": "reject_connection", "type": "problem_report", "content": "Sorry, connection with the $destination_name can't be established" } ], "next": "connect-to-issuer" // Try to connect again }, "reject-health-credential": { // DONE "role": ["health_issuer", "health_verifier", "travel_verifier", "hospitality_verifier"], "actions": [ { "name": "reject_health_credential", "type": "problem_report", "content": "Sorry, identification proof verification failed, try again" } ], "next": "issuer-validate-proof" // Try to get proof validated again }, "reject-lab-order": { // DONE "role": ["health_issuer"], "actions": [ { "name": "reject_lab_oder", "type": "problem_report", "content": "Sorry, lab result failed to issue, contact your health issuer" } ] }, "reject-lab-result": { // DONE "role": ["health_issuer"], "actions": [ { "name": "reject_lab_result", "type": "problem_report", "content": "Sorry, lab result failed to issue, contact your health issuer" } ] }, "reject-exemption": { // DONE "role": ["health_issuer"], "actions": [ { "name": "reject_exemption", "type": "problem_report", "content": "Sorry, exemption failed to issue, try again" } ], "next": "issue-exemption" // Try again }, "reject-vaccine": { // DONE "role": ["health_issuer"], "actions": [ { "name": "reject_vaccine", "type": "problem_report", "content": "Sorry, vaccine credential issuance failed, try again" } ], "next": "issue-vaccine" // Try again }, "contact-support": { // DONE "role": ["health_issuer"], "actions": [ { "name": "contact_support", "type": "problem_report", "content": "Sorry, fatal error occured. Please, contact technical suport at support@indicio.tech" } ] } } } ``` // List of possible errors to handle: /////////////////////////////////////////////////////////////// "lab_result_out_of_date" /////////////////////////////////////////////////////////////// "lab_order_out_of_date" # Beutified code (outdated) ``` { "@context": [ "https://github.com/hyperledger/aries-rfcs/blob/main/concepts/0430-machine-readable-governance-frameworks/context.jsonld" ], "name": "Aruba COVID Governance", "version": "0.1", "format": "1.0", "id": "<uuid>", "description": "This document describes COVID health and travel governance for the nation of Aruba in a machine readable way.", "last_updated": "2021-06-10", "docs_uri": "need_to_create", "data_uri": "need_to_create", "topics": [ "medical" ], "jurisdictions": [ "US>NY>New York City", "AW" ], "geos": [ "USA", "Aruba" ], "schemas": [ { "4CLG5pU5v294VdkMWxSByu:2:Email:1.0": { "name": "Validated Email", "issuance": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy", "verification": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" } }, "4CLG5pU5v294VdkMWxSByu:2:SMS:1.0", "4CLG5pU5v294VdkMWxSByu:2:Medical_Release:1.0", "4CLG5pU5v294VdkMWxSByu:2:Lab_Order:1.0", "4CLG5pU5v294VdkMWxSByu:2:Lab_Result:1.0", "4CLG5pU5v294VdkMWxSByu:2:Vaccine:1.0", "4CLG5pU5v294VdkMWxSByu:2:Vaccine_Exemption:1.0", { "4CLG5pU5v294VdkMWxSByu:2:Trusted_Traveler:1.0": { "name": "Trusted Traveler", "issuance": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy", "verification": [ { "travel_verifier": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" }, { "hospitality_verifier": "hl:zm9YZpCjPLPJ4Epc:z3TSgXTuaHxY2tsArhUreJ4ixgw9NW7DYuQ9QTPQyLHy" } ] } } ], "participants": [ { "name": "Aruba Government", "id": "did:example:aruba", "describe": { "label": "Aruba", "sublabel": "Aruba Government", "website": "issuinggovernmentsite.org", "email": "credential_manager@issuinggovernmentsite.org" } }, { "name": "General Obeorthot Hospital of Aruba", "id": "did:example:hospital", "describe": { "label": "Obeorthot Hospital", "sublabel": "General Obeorthot Hospital of Aruba", "website": "issuinglabsite.com", "email": "credential_manager@issuinglabsite.com" } }, { "name": "Hilton Casino", "id": "did:example:casino", "describe": { "label": "Hilton Resort and Casino", "sublabel": "Verifying Org", "website": "verifyingorgsite.com", "email": "verifying_manager@verifyingorgsite.com" } } ], "roles": [ { "health_issuer": { "label": "Health Issuer", "description": "Issues health credentials" } }, { "travel_issuer": { "label": "Travel Issuer", "description": "Issues credentials for travel, e.g. the Happy Travel Pass" } }, { "health_verifier": { "label": "Health Verifier", "description": "Verifies the presentation and validity of health credentials" } }, { "travel_verifier": { "label": "Travel Verifier", "description": "Verifies the presentation and validity of travel credentials" } }, { "hospitality_verifier": { "label": "Hospitality Verifier", "description": "Verifies the presentation and validity of a limited set of information from travel credentials" } }, { "holder": { "label": "App Holder", "description": "Initiates connections with issuers and verifiers to present proof with desire to receive credentials" } } ], "permissions": [ { "grant": [ "health_verifier", "travel_issuer", "travel_verifier" ], "when": { "id": "did:example:aruba" } }, { "grant": [ "health_issuer" ], "when": { "id": "did:example:hospital" } }, { "grant": [ "hospitality_verifier" ], "when": { "id": "did:example:casino" } } ], "actions": [ { "initiate_connection": { "label": "Initiate Connection", "type": "connection" } }, { "request_proof": { "label": "Request Proof", "type": "presentation" } }, { "present_id_proof": { "label": "Present Proof", "type": "presentation" } }, { "identify_holder": { "label": "Verify Holder ID Proof", "type": "proof" } }, { "issue_lab_order": { "label": "Issue Lab Order", "type": "credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Lab_Order:1.0" } }, { "issue_lab_result": { "label": "Issue Test Result", "type": "credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Lab_Result:1.0" } }, { "issue_vaccine": { "label": "Issue vaccine", "type": "credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Vaccine:1.0" } }, { "issue_exemption": { "label": "Issue vaccine exemption", "type": "credential", "schema": "4CLG5pU5v294VdkMWxSByu:2:Vaccine_Exemption:1.0" } }, { "verify_trusted_traveler": { "label": "Verify Trusted Traveler", "type": "verification", "schema": "4CLG5pU5v294VdkMWxSByu:2:Trusted_Traveler:1.0" } } ], "privileges": [ { "grant": "verify_id", "when": { "roles": [ "health_issuer", "travel_issuer", "health_verifier", "travel_verifier", "hospitality_verifier" ] } }, { "grant": "issue_lab_order", "when": { "roles": [ "health_issuer" ] } }, { "grant": "issue_test_result", "when": { "roles": [ "health_issuer" ] } }, { "grant": "issue_vaccine", "when": { "roles": [ "health_issuer" ] } }, { "grant": "issue_exemption", "when": { "roles": [ "health-issuer", "holder" ] } }, { "grant": "verify_trusted_traveler", "when": { "roles": [ "travel_verifier", "hospitality_verifier" ] } } ], "flows": { "connect-to-issuer": { "role": "holder", "initial": "true", "actions": [ "initiate_connection", { "present_id_proof": { "content": [ "passport", "demographics" ] } } ], "next": [ { "validate-proof": { "when": [ "connection_success" ] } }, { "reject-connection": { "when": "connection_error" } } ] }, "validate-proof": { "role": [ "health_issuer", "health_verifier", "travel_verifier" ], "initial": "true", "actions": [ "identify_holder" ], "next": [ { "issue-health-credential": { "when": [ "proof_success", "issuer_to_holder_connection" ] } }, { "issue-trusted-traveler": { "when": [ "proof_success", "verifer_to_holder_connection" ] } }, { "reject-health-credential": { "when": "proof_error" } } ] }, "issue-health-credential": { "role": [ "health_issuer", "health_verifier" ], "actions": [], "next": [ { "lab-order": { "when": [ [ "issuer_to_holder_connection", { "request": "get_lab_order" } ] ] } }, { "lab-result": { "when": [ [ "issuer_to_holder_connection", "test_id_credential", { "request": "get_lab_result" } ] ] } }, { "exemption": { "when": [ [ "issuer_to_holder_connection", "exemption_proof", { "request": "get_exemption" } ] ] } }, { "vaccine": { "when": [ [ "issuer_to_holder_connection", "test_id_credential", { "request": "get_vaccine" } ] ] } }, { "issue_trusted_traveler": { "when": [ [ "success", "vaccine_credential" ], [ "test_result_credential" ], [ "exemption_credential", "test_result_credential" ] ] } }, { "contact-support": { "when": "unspecified_error" } } ] }, "lab-order": { "role": "health_issuer", "actions": { "issue_lab_order": { "content": [ { "credential": "test_id_credential" }, { "recipient": "holder" } ] } }, "next": [ { "test-result": { "when": [ { "test_type": "PCR" }, "test_id_success" ] } }, { "connect-to-issuer": { "when": [ { "test_type": "vaccine" }, { "vaccine_type": [ "Moderna", "Pfizer" ] }, { "count": "1" }, "test_id_success" ] } }, { "vaccine": { "when": [ { "test_type": "vaccine" }, { "option": [ { "type": "Moderna", "doze_count": "2" }, { "type": "Pfizer", "doze_count": "2" }, { "type": "Johnson and Johnson", "doze_count": "1" } ] }, "test_id_success" ] } }, { "reject-test-id": { "when": "test_id_error" } }, { "contact-support": { "when": "unspecified_error" } } ] }, "lab-result": { "role": "health_issuer", "actions": { "issue_lab_result": { "content": [ { "credential": "test_result_credential" }, { "recipient": "holder" } ] } }, "next": [ { "connect-to-verifier": { "when": [ "lab_result_success" ] } }, { "reject-lab-result": { "when": "lab_result_error" } } ] }, "exemption": { "role": [ "issuer", "holder" ], "actions": { "issue_exemption": { "content": [ { "credential": "exemption_credential" }, { "recipient": "holder" } ] } }, "next": [ { "connect-to-verifier": { "when": [ "exemption_success", "test_result_credential" ] } }, { "lab-order": { "when": [ "exemption_credential" ], "actions": [ { "name": "Get PCR Test", "type": "message", "content": "One more step. Get a PCR test to complete medical stack. Once you have your lab result you will be eligible to apply for a trusted traveler credential." } ] } }, { "reject-exemption": { "when": "exemption_error" } } ] }, "vaccine": { "role": "health_issuer", "actions": { "issue_vaccine": { "content": [ { "credential": "vaccine_credential" }, { "recipient": "holder" } ] } }, "next": [ { "connect-to-verifier": { "when": [ "lab_result_success" ] } }, { "reject-vaccine": { "when": "vaccine_error" } } ] }, "connect-to-verifier": { "role": "holder", "initial": "true", "actions": [ "initiate_connection", { "present_id_proof": { "content": [ "passport", "demographics" ] } } ], "next": [ { "validate-proof": { "when": [ "connection_success" ] } }, { "reject-connection": { "when": "connection_error" } } ] }, "issue-trusted-traveler": { "role": "travel_issuer", "actions": [ { "name": "issue_trusted_traveler", "type": "credential", "content": "trusted_traveler_credential" } ] }, "reject-trusted-traveler": { "role": "travel_issuer", "actions": [ { "name": "reject_trusted_traveler", "type": "message", "content": "Sorry, your trusted traveler credential request was rejected" } ], "next": "next-step" }, "reject-connection": { "role": [ "health_issuer", "health_verifier", "travel_verifier", "hospitality_verifier" ], "actions": [ { "name": "reject_connection", "type": "message", "content": "Sorry, connection with the $destination_name can't be established" } ], "next": "connect-to-issuer" }, "reject-health-credential": { "role": [ "health_issuer", "health_verifier", "travel_verifier", "hospitality_verifier" ], "actions": [ { "name": "reject_health_credential", "type": "message", "content": "Sorry, identification proof verification failed, try again" } ], "next": "validate-proof" }, "reject-test-id": { "role": [ "health_issuer" ], "actions": [ { "name": "reject_test_id", "type": "message", "content": "Sorry, lab result failed to issue, contact your health issuer" } ], "next": "next-step" }, "reject-lab-result": { "role": [ "health_issuer" ], "actions": [ { "name": "reject_lab_result", "type": "message", "content": "Sorry, lab result failed to issue, contact your health issuer" } ], "next": "next-step" }, "reject-exemption": { "role": [ "health_issuer" ], "actions": [ { "name": "reject_exemption", "type": "message", "content": "Sorry, exemption failed to issue, try again" } ], "next": "exemption" }, "reject-vaccine": { "role": [ "health_issuer" ], "actions": [ { "name": "reject_vaccine", "type": "message", "content": "Sorry, vaccine credential issuance failed, try again" } ], "next": "vaccine" }, "contact-support": { "role": [ "health_issuer" ], "actions": [ { "name": "contact_support", "type": "message", "content": "Sorry, fatal error occured. Please, contact technical suport at support@indicio.tech" } ] } } } ``` # Here is the router example for future reference ``` { "validate-proof": { // DONE This is true for both issuer and verifier "role": ["health_issuer", "health_verifier", "travel_verifier"], // would that be health and travel verifier? What is the difference between them? Isn't it should be just travel verifier? "initial": "true", // How "initial" state is going to work for both issuer and verifier? "actions": [ "identify_holder" ], "next": [ { "issue-health-credential": { // Happy path "when": [ "proof_success", // How are we passing messages/state names? "issuer_to_holder_connection" // Can we pass that? Whould that be enough? ] } }, { "issue-trusted-traveler": { // Happy path "when": [ "proof_success", "verifer_to_holder_connection" // Can we pass that? Whould that be enough? ] } }, { "reject-health-credential": { // Unhappy path the naming is confusing...( "when": "proof_error" } } ] }, "issue-health-credential": { // DONE This step serves as a router for the health issuer to know what to do next "role": ["health_issuer", "health_verifier"], // why verifier? Which verifier? Health verifier? "actions": [ // I think this is redundant "initiate_connection", // Connection is already established, isn't it? "identify_holder", // Holder is already identified, isn't it? [ "issue_lab_order", "issue_lab_result", "issue_exemption", "issue_vaccine" ] // I think this is redundant ], "next": [ { "lab-order": { "when": [ [ "issuer_to_holder_connection", {"request":"get_lab_order"} ] ] } }, { "lab-result": { "when": [ [ "issuer_to_holder_connection", "lab_order_credential", {"request": "get_lab_result"} ] ] } }, { "exemption": { "when": [ [ "issuer_to_holder_connection", "exemption_proof", // doctor's form, waiver application (religious (membership proof), philosophical). How and when do we validate exemption proof {"request":"get_exemption"} ] ] } }, { "vaccine": { "when": [ [ "issuer_to_holder_connection", "lab_order_credential", {"request":"get_vaccine"} ] ] } }, { "issue_trusted_traveler": { "when": [ [ "success", // Do we really need a "success" flag? What will determine success? "vaccine_credential" // Full vacination. Do we handle single single vaccine dose credential? ], [ "test_result_credential" ], [ "exemption_credential", "test_result_credential" ] ] } }, { "contact-support": { "when": "unspecified_error" } } ] }, } ``` ``` present test_result OR negative, < X days old OR positive, > X days old present vaccine(s) disease target Moderna 2 doses Pfizer 2 doses Johnson and Johnson 1 dose issued by validated issuer ```