This is a Aidbox Forms Smart Launch project bootstrapped with create-next-app
.
You can use this project as a starting point for building your own Aidbox Forms Smart App. It is intentionally kept simple to help you understand how to integrate Aidbox Forms adapt it to your needs.
It includes an implementation of:
$everything
First, copy .env.example
to .env
and set the correct values:
cp .env.example .env
Obtain license key from Aidbox and set it in AIDBOX_LICENSE
variable.
Then, start aidbox server:
docker-compose up -d
Install dependencies:
pnpm install
Then, run the development server:
npm run dev
Open http://localhost:3000 with your browser to see the result.
Aidbox server will be available at http://localhost:8888.
sequenceDiagram
actor Customer as User
participant EHR as EHR <br> (with auth server)
participant Smart App as Smart App <br> (with backend)
participant Aidbox as Aidbox <br> (not publicly accessible)
Note right of Smart App: Communicates with Aidbox <br> 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 <br> requests are made exclusively within <br>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 <br> from the selected questionnaire
Smart App ->>+ Aidbox: Request Questionnaire/$populate π
Aidbox ->> Aidbox: Execute fhir queries <br> from population expression π
Note right of Aidbox: Guaranteed by Aidbox to run correctly, as <br> it has proper implementations of search parameters
Aidbox ->>- Smart App: Return a questionnaire response
Smart App ->> Aidbox: Save the questionnaire response π
Smart App ->>- Customer: Display Form Renderer with <br> 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
/api/launch/authorize
and /api/launch/ready
endpointsfhirclient
library for SMART authorizationThe application follows a clean architecture with:
The key integration points are: