# DTC Workflows
## DTC Anoncred Issuance Workflow
1. User installs Mobile App
2. User uses Mobile App to scan passport using OCR and NFC
3. Mobile App encodes passport data into an ICAO DTC credential stored on the phone
4. Mobile App establishes connection with DTC Issuer Agent
5. Mobile App sends ICAO DTC to DTC Issuer Agent via self-attested presentation
6. DTC Issuer Agent requests check of validity of ICAO DTC from ICAO DTC PKD service
7. ICAO DTC PKD service responds with validity result
8. DTC Issuer Agent offers a DTC Anoncred credential to the Mobile App
9. Mobile App presents the offer to the User
10. User accepts the credential offer on the Mobile App
```plantuml
skinparam backgroundColor #fff
skinparam handwritten false
skinparam BoxPadding 10
skinparam ParticipantPadding 10
skinparam NoteFontSize 24
skinparam NoteBorderColor #f80
skinparam NoteBackgroundColor #fea
skinparam sequenceArrowThickness 1
skinparam sequence {
BoxFontSize 36
BoxBorderColor #555
BoxBackgroundColor #fbfbfb
ActorFontColor #333
ActorFontSize 24
ActorFontName Arial
ActorBorderColor #555
ActorBackgroundColor #ccc
ParticipantFontName Arial
ParticipantFontSize 24
ParticipantFontColor #333
ParticipantBorderColor #555
ParticipantBackgroundColor #eee
LifeLineBorderColor #ccc
LifeLineBackgroundColor #000
ArrowFontSize 24
ArrowColor #f80
DividerFontSize 24
}
actor User
participant "Mobile App" as Mobile
participant "DTC Issuer Agent" as Issuer
participant "ICAO DTC PKD" as ICAO
== Registration ==
User -> Mobile: Install
Mobile -> Mobile: Scan Passport
Mobile -> Mobile: Encode ICAO DTC
note over Mobile: ICAO DTC stored on Mobile App
Mobile -> Issuer: Connect
Mobile -> Issuer: Send ICAO DTC
note over Issuer: ICAO DTC stored on\nDTC Issuer Agent\n(temporarily)
note over Issuer: Passport attributes\nstored on\nDTC Issuer Agent
Issuer -> ICAO: ICAO DTC validity request
note over ICAO: Does ICAO store\nany information?
ICAO -> Issuer: ICAO DTC validity result
Issuer -> Mobile: Offer DTC Anoncred credential
Mobile -> User: Display DTC\nAnoncred credential offer
User -> Mobile: User accepts credential
note over Mobile: DTC Anoncred credential\nstored on Mobile App
```
## ED Card Workflow
1. User opens ED Card Website in a browser
2. ED Card Website requests and invitation URL from the Government Enterprise Agent
3. ED Card Website requests a verification of the DTC Anoncred
4. ED Card Website uses API to poll the Government Enterprise Agent for the verification result
5. Government Enterprise Agent returns an invitation URL
6. ED Card Website displays a QR code in the browser
7. User scans the QR code with the Mobile App
8. Mobile App connects to the Government Enterprise Agent
9. Government Enterprise Agent requests DTC Anoncred credential from the Mobile App
10. Mobile App presents request to User
11. User consents to share the DTC Anoncred credential
12. Mobile App sends the DTC Anoncred credential to the Government Enterprise Agent
13. Government Enterprise Agent parses details of DTC Anoncred credential
14. Government Enterprise Agent sends user demographic data to the ED Card Website (in response to one of the polling requests in #4)
15. ED Card Website collects user trip details, insurance, payment, etc. and stores collected user data (including user demographic data) in ED Card Database and Radex system
16. ED Card Website instructs Government Enterprise Agent to issue a Trusted Traveler credential to the User
17. Government Enterprise Agent offers a Trusted Traveler credential to the Mobile App
18. Mobile App presents the offer to the User
19. User accepts the credential offer on the Mobile App
```plantuml
skinparam backgroundColor #fff
skinparam handwritten false
skinparam BoxPadding 10
skinparam ParticipantPadding 10
skinparam NoteFontSize 24
skinparam NoteBorderColor #f80
skinparam NoteBackgroundColor #fea
skinparam sequenceArrowThickness 1
skinparam sequence {
BoxFontSize 36
BoxBorderColor #555
BoxBackgroundColor #fbfbfb
ActorFontColor #333
ActorFontSize 24
ActorFontName Arial
ActorBorderColor #555
ActorBackgroundColor #ccc
ParticipantFontName Arial
ParticipantFontSize 24
ParticipantFontColor #333
ParticipantBorderColor #555
ParticipantBackgroundColor #eee
LifeLineBorderColor #ccc
LifeLineBackgroundColor #000
ArrowFontSize 24
ArrowColor #f80
DividerFontSize 24
}
actor User
participant "Mobile App" as Mobile
participant "ED Card Website" as Website
participant "Government Enterprise Agent" as Government
User -> Website: Open in a browser
Website -> Government: Request invitation URL
Website -> Government: Request verification of DTC
Website -> Government: Poll for verification results
Government -> Website: Return invitation URL
Website -> Website: Display QR code
Mobile -> Website: Scan QR code
Mobile -> Government: Connect
Government -> Mobile: Request DTC\nAnoncred credential
Mobile -> User: Request sharing of DTC\nAnoncred credential
User -> Mobile: Authorize sharing of DTC\nAnoncred credential
Mobile -> Government: Present DTC\nAnoncred credential
Government -> Government: Interpret DTC\nAnoncred credential
note over Government: DTC Anoncred\npresentation stored\n on Government Enterprise\nAgent (optional)
Government -> Website: Send passport details
Website -> Website: Collect and store user details
note over Website: User passport, travel,\ninsurance details stored\non ED Card Website\nand in Radex system
Website -> Government: Request to issue\nTrusted Traveler\ncredential to User
Government -> Mobile: Offer Trusted\nTraveler credential
Mobile -> User: Display Trusted Traveler\ncredential offer
User -> Mobile: User accepts credential
note over Mobile: Trusted Traveler credential\nstored on Mobile App
```
## Trusted Traveler Verification Workflow
1. Verifier displays an invitation URL as a QR code
2. User scans QR code with Mobile App
3. Mobile App connects to Verifier Agent
4. Verifier Agent requests Trusted Traveler credential
5. User consents to share the Trusted Traveler credential
6. Mobile App sends the Trusted Traveler credential to the Verifier Agent
7. Verifier Agent interprets the presentation
8. Both Mobile App and Verifier Agent display the verification result
```plantuml
skinparam backgroundColor #fff
skinparam handwritten false
skinparam BoxPadding 10
skinparam ParticipantPadding 10
skinparam NoteFontSize 24
skinparam NoteBorderColor #f80
skinparam NoteBackgroundColor #fea
skinparam sequenceArrowThickness 1
skinparam sequence {
BoxFontSize 36
BoxBorderColor #555
BoxBackgroundColor #fbfbfb
ActorFontColor #333
ActorFontSize 24
ActorFontName Arial
ActorBorderColor #555
ActorBackgroundColor #ccc
ParticipantFontName Arial
ParticipantFontSize 24
ParticipantFontColor #333
ParticipantBorderColor #555
ParticipantBackgroundColor #eee
LifeLineBorderColor #ccc
LifeLineBackgroundColor #000
ArrowFontSize 24
ArrowColor #f80
DividerFontSize 24
}
actor User
participant "Mobile App" as Mobile
participant "Verifier Agent" as Verifier
Verifier -> Verifier: Display QR code
Mobile -> Verifier: Scan QR code
Mobile -> Verifier: Connect
Verifier -> Mobile: Request Trusted\nTraveler credential
Mobile -> User: Request sharing of Trusted\nTraveler credential
User -> Mobile: Authorize sharing of Trusted\nTraveler credential
Mobile -> Verifier: Present Trusted\nTraveler credential
Verifier -> Verifier: Interpret Trusted\nTraveler credential
Verifier -> Mobile: Both agents display verification result
note over Verifier: Trusted Traveler\npresentation stored\n on Verifier\nAgent (optional)
```