diff --git a/aidbox-forms-smart-launch-2/README.md b/aidbox-forms-smart-launch-2/README.md index a6deffa..a0cacfc 100644 --- a/aidbox-forms-smart-launch-2/README.md +++ b/aidbox-forms-smart-launch-2/README.md @@ -29,3 +29,85 @@ npm run dev Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. Aidbox server will be available at [http://localhost:8888](http://localhost:8888). + +## Interaction Diagram + +```mermaid +--- +config: + theme: forest +--- +sequenceDiagram + actor Customer as User + participant EHR as EHR
(with auth server) + participant Smart App as Smart App
(with backend) + participant Aidbox as Aidbox
(not publicly accessible) + Note right of Smart App: Communication with Aidbox
using HTTP basic auth + Customer ->> EHR: Launch Smart App + EHR ->> Smart App: Launch context + Access Token + Smart App ->> Aidbox: Upsert organization + activate Smart App + Note right of Smart App: Unique organization per EHR + Note right of Aidbox: From this point forward, 🔒 indicates that
requests are made exclusively within
the scope of the corresponding EHR Organization + Smart App ->> Aidbox: Upsert resources from launch context 🔒 + + alt Sync using $everything + Smart App ->>+ EHR: Request /Patient/:id/$everything + EHR ->>- Smart App: Return a bundle + Smart App ->> Aidbox: Upsert resource from the bundle 🔒 + else Sync using predefined resource URLs + loop For each resource URL + Smart App ->>+ EHR: Send Get request to the URL + Note left of Smart App: Optionally substitute current patient id + EHR ->>- Smart App: Return a bundle (or single resource) + Smart App ->> Aidbox: Upsert resource from the bundle 🔒 + end + end + deactivate Smart App + Smart App ->> Customer: Redirect to dashboard + opt Viewing questionnaires + Customer ->>+ Smart App: Show questionnaires + Smart App ->>+ Aidbox: Request /Questionnaire 🔒 + Aidbox ->>- Smart App: Return questionnaires + Smart App ->>- Customer: Display questionnaires + Customer ->>+ Smart App: Edit questionnaire + Smart App ->>- Customer: Display Form Builder + end + opt Viewing public library + Customer ->>+ Smart App: Show public library + Smart App ->>+ Public Library: Request /Questionnaire + Public Library ->>- Smart App: Return questionnaires + Smart App ->>- Customer: Display questionnaires of public library + end + opt Importing questionnaires + Customer ->>+ Smart App: Import questionnaire + Smart App ->>+ Public Library: Request /Questionnaire/:id + Public Library ->>- Smart App: Return a questionnaire + Smart App ->> Aidbox: Insert the questionnaire 🔒 + Smart App ->>- Customer: Display questionnaires + end + opt Creating questionnaire responses + Customer ->>+ Smart App: Create response response
from the selected questionnaire + Smart App ->>+ Aidbox: Request Questionnaire/$populate 🔒 + Aidbox ->> Aidbox: Execution fhir queries
from population expression 🔒 + Note right of Aidbox: Guarantied by Aidbox to run correctly
(why? Aidbox has properly implementations of search params) + Aidbox ->>- Smart App: Return a questionnaire response + Smart App ->> Aidbox: Save the questionnaire response 🔒 + Smart App ->>- Customer: Display Form Renderer with
the created questionnaire response + Customer ->> Smart App: Fill + Customer ->>+ Smart App: Submit + Smart App ->> Aidbox: Request /Questionnaire/$process-response 🔒 + activate Aidbox + Aidbox ->> Aidbox: Validate the questionnaire response 🔒 + alt validation ok + Aidbox ->> Aidbox: Save the questionnaire response 🔒 + Aidbox ->> Smart App: Return the questionnaire response + Smart App ->> Customer: Display update questionnaire response + else validation error + Aidbox ->> Smart App: Return errors + Smart App ->> Customer: Display Errors + end + deactivate Aidbox + deactivate Smart App + end +```