Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
5ec3f55
#560: add warning for broken observation links on intervention actions
iaigner Jun 12, 2025
d916352
refactor: improve variable naming and simplify array operations in In…
markus-ebner Jun 13, 2025
dddeefc
#560: implement PR comments & move svg exclamationIcon into component
iaigner Jun 13, 2025
b09cf84
Merge pull request #602 from MORE-Platform/MORE-560-no-alert-when-del…
iaigner Jun 13, 2025
4eb70be
#606: P2R - Add "Download Auditlog" Tab on Monitoring&Data
iaigner Sep 9, 2025
8769400
FE-607: add toggle functionality for full and collapsed timeline view…
markus-ebner Sep 10, 2025
130fa6f
Merge pull request #608 from MORE-Platform/p2r-feature/607-streamline…
markus-ebner Sep 10, 2025
a33530e
#606: P2R - Update StudyManagerApi.yaml and adapt FE accordingly
iaigner Sep 11, 2025
f0032c1
#606: P2R - fix build problems
iaigner Sep 11, 2025
32a8a80
#606: P2R - fix error with ParticipantDataListener and downloadAuditLog
iaigner Sep 11, 2025
2c10d86
#606: P2R - fix Info Text (if) for auditLogDownload
iaigner Sep 11, 2025
0c2ec1c
#606: P2R - refactor: use "auditLog" instead of "auditlog" & correct …
iaigner Sep 12, 2025
af4c14f
#606: P2R - refactor: use "auditLog" instead of "auditlog" & correct …
iaigner Sep 12, 2025
d1c69bb
#606: P2R - review adaptations: define content-disposition header in …
iaigner Sep 12, 2025
c705c54
Merge branch 'develop' into prehab2rehab/606-get-auditlog-for-study
iaigner Sep 15, 2025
87d0433
#606: P2R - review adaptations
iaigner Sep 15, 2025
32efc68
#606: P2R - review adaptations: added eslint no-console-log checks an…
iaigner Sep 16, 2025
38bde92
#606: P2R - review adaptations: rerun npm i due to optional dependenc…
iaigner Sep 16, 2025
d92b6ec
Merge pull request #610 from MORE-Platform/prehab2rehab/606-get-audit…
iaigner Sep 17, 2025
9752b40
#606: P2R - fix: text correction for auditlog
iaigner Sep 18, 2025
0101af3
Merge branch 'develop' into prehab2rehab/606-get-auditlog-for-study
iaigner Sep 18, 2025
844fed4
Merge pull request #612 from MORE-Platform/prehab2rehab/606-get-audit…
iaigner Sep 18, 2025
fed6f24
FE-742: dynamically generate Lime Survey admin link based on hostname…
markus-ebner Sep 23, 2025
f95909d
Merge pull request #614 from MORE-Platform/prehab2rehab/613-hardcoded…
markus-ebner Sep 23, 2025
8edddd5
#609: P2R - fix study data download problem
iaigner Sep 26, 2025
47dd299
Merge pull request #615 from MORE-Platform/prehab2rehab/#609-problem-…
markus-ebner Sep 30, 2025
419363d
617: fix problems with loading animation + add loading spinner to do…
iaigner Oct 6, 2025
d960dbf
617: add comfirmation dialog for studydata downlaod, if user navigate…
iaigner Oct 6, 2025
e1356b8
617: review adaptations
iaigner Oct 7, 2025
a7f1132
Merge pull request #619 from MORE-Platform/prehab2rehab/617-loading-i…
iaigner Oct 7, 2025
0dc5e2f
Fixed an image build and deploy issue
janoliver20 Oct 29, 2025
e66951b
#79: Added localization for the Garmin Observation
janoliver20 Oct 29, 2025
f4c1101
#140: Fixed a bug that hindered download of large amounts of study data
janoliver20 Nov 26, 2025
1db39e7
Merge pull request #6 from redlink-gmbh/umm/develop/140-fixing-downlo…
janoliver20 Nov 27, 2025
448570d
Readded a reload code
janoliver20 Nov 27, 2025
6d5b249
#603: opean api extension
iaigner Jan 8, 2026
2143261
#603: extend more table action button logic to accomodate data health…
iaigner Jan 8, 2026
6048879
#603: implement new participant details dialog and list upcoming obse…
iaigner Jan 8, 2026
eec43df
#603: implement logic for new service based on api and optimize merge…
iaigner Jan 9, 2026
d690288
#603: fix build error
iaigner Jan 9, 2026
9a0b279
#603: rename tag for occurredObservations in api and fix typo
iaigner Jan 12, 2026
3d33d88
#603: correct studyId type in occurredObservations schema (api)
iaigner Jan 12, 2026
0dc8b96
#361: fix dropdown click for study collaborator
iaigner Jan 12, 2026
546d96f
#361: add custom radio button and checkbox and switch it with not wor…
iaigner Jan 13, 2026
0b3b363
Merge pull request #621 from MORE-Platform/prehab2rehab/#603-data-hea…
iaigner Jan 15, 2026
89be92e
#361: delete unneeded code block from CustomRadioButton.vue, refactor…
iaigner Jan 15, 2026
bf0c5d8
Merge branch 'develop' into #361-fix-dropdown-and-unstyled-radio-btn-…
iaigner Jan 15, 2026
2debba0
Merge pull request #622 from MORE-Platform/#361-fix-dropdown-and-unst…
iaigner Jan 15, 2026
d8a272b
#603: fix dataHealthIndicator Prop Bug & typo refactoring
iaigner Jan 19, 2026
61ef38a
#603: fix typo with occurredObservations
iaigner Jan 19, 2026
f606751
#603: fix sorting of upcoming timeline events
iaigner Jan 19, 2026
51be057
Merge pull request #623 from MORE-Platform/#603-data-health-for-parti…
iaigner Jan 19, 2026
e72444e
#603: fix coloring conversion by state
iaigner Jan 19, 2026
4ceafb4
Merge pull request #624 from MORE-Platform/#603-data-health-for-parti…
iaigner Jan 20, 2026
3217c15
#603: update i18n localization translations
iaigner Jan 20, 2026
ee3c6a2
Merge pull request #625 from MORE-Platform/prehab2rehab/#603-data-hea…
iaigner Jan 20, 2026
00b8ed1
#603: update filter and sorting for upcoming timelineEvents to match …
iaigner Jan 21, 2026
d784af8
#603: disable button when participant has status "new"
iaigner Jan 21, 2026
0fdb7d2
Merge pull request #626 from MORE-Platform/prehab2rehab/#603-data-health
iaigner Jan 22, 2026
a4b9d1b
#208: Add event randomization options to observations
janoliver20 Jan 22, 2026
5089ab9
Merge branch 'develop' of github.com:MORE-Platform/more-studymanager-…
Jan 22, 2026
bc1be61
#208: Build clean
janoliver20 Jan 23, 2026
db83d17
#208: Build clean
janoliver20 Jan 23, 2026
04869dd
Merge pull request #7 from redlink-gmbh/umm/208-add-event-randomization
janoliver20 Jan 23, 2026
e4069ec
#231: fix build issue
iaigner Jan 28, 2026
840c466
#231: change german translation for data-health
iaigner Jan 28, 2026
204fe00
Merge pull request #8 from redlink-gmbh/merge-more-2026-01-22
iaigner Jan 28, 2026
c7b2c84
Fixed an issue where the checkbox was not accessible anymore after th…
janoliver20 Jan 28, 2026
8380986
Merge pull request #9 from redlink-gmbh/fix-merge-issues-with-custom-…
janoliver20 Jan 28, 2026
24152ef
#184: Added translations for split garmin observation
janoliver20 Feb 4, 2026
37a559a
#252: add observation group list to study overview (create, delete, e…
iaigner Feb 5, 2026
c5208b9
Merge pull request #10 from redlink-gmbh/umm/develop/184-split-garmin…
janoliver20 Feb 6, 2026
065653a
#252: implement extension for observation groups
iaigner Feb 9, 2026
5df766e
#252: test with backend extension and adaptions of id handling
iaigner Feb 10, 2026
4e630ee
#252: PR Review + MoreTable Bug Fixing
iaigner Feb 10, 2026
3f515d5
#252: PR Review
iaigner Feb 10, 2026
98bffae
#252: correct small typo
iaigner Feb 10, 2026
ed8a65b
Merge pull request #11 from redlink-gmbh/umm/#252-extend-studymanager…
iaigner Feb 10, 2026
714c364
#252: add possible filter
iaigner Feb 12, 2026
93c30fa
#252: change dropdown in observation and intervention dialog to show …
iaigner Feb 12, 2026
b68b710
Merge pull request #13 from redlink-gmbh/umm/#252_show-all-selected-s…
iaigner Feb 12, 2026
cbb001b
#264: Implemented the new openapi spec with the observation reminder …
janoliver20 Feb 13, 2026
2da3f3f
#264: Unified the toggles and moved the buttons in one line
janoliver20 Feb 13, 2026
e8c065f
#264: Unified the toggles and moved the buttons in one line
janoliver20 Feb 13, 2026
2fdaefe
Merge pull request #14 from redlink-gmbh/umm/develop/264-reminder-config
janoliver20 Feb 13, 2026
50b3f9d
#274: add localization for mulitple choice question observation
iaigner Feb 17, 2026
0a73cb6
#274: extend simple question to max. 10 answers
iaigner Feb 17, 2026
7b7ee32
#274: delete test column in PatientList.vue
iaigner Feb 18, 2026
764fdc4
Merge pull request #15 from redlink-gmbh/#274-multiple-choice-questio…
iaigner Feb 18, 2026
7de22a6
#271: update after backend extension for export/timeline
iaigner Feb 19, 2026
bec56bd
#271: delete observation groups for filterDropdown from Participation…
iaigner Feb 19, 2026
6bf0417
Merge branch 'develop' into umm/#252-observation-groups-add-missing-f…
iaigner Feb 23, 2026
8f763ae
Merge pull request #12 from redlink-gmbh/umm/#252-observation-groups-…
iaigner Feb 23, 2026
dfb0c29
#271: fix param in request for study data export
iaigner Feb 23, 2026
94da85a
#308: P2R improve observation dropdown
iaigner Feb 23, 2026
91a4146
Merge pull request #16 from redlink-gmbh/umm/#271-fix-param-in-reques…
iaigner Feb 23, 2026
3bf9847
Merge pull request #17 from redlink-gmbh/#308-reorganize-observation-…
iaigner Feb 23, 2026
98c719c
umm/code-contribution-2026-02 - update PR (based on review)
iaigner Mar 11, 2026
6d6a241
Merge pull request #632 from MORE-Platform/umm/code-contribution-2026-02
iaigner Mar 11, 2026
8603e59
prehab2rehab/#362: upgrate and migrate Primevue and TailwindCSS, remo…
iaigner Mar 12, 2026
7116d4f
prehab2rehab/#362: fix build issues
iaigner Mar 12, 2026
33b0ee8
prehab2rehab/#362: refactoring and styling fixes
iaigner Mar 17, 2026
245f750
prehab2rehab/#362: update theme.css to accomodate tab nav in monitori…
iaigner Mar 17, 2026
c2f7814
prehab2rehab/#362: pr review adaptations + split button fix
iaigner Mar 19, 2026
614e140
prehab2rehab/#362: pr review adaptations (i18n package update)
iaigner Mar 19, 2026
9bc17af
Merge pull request #633 from MORE-Platform/prehab2rehab/#362-primveu-…
iaigner Mar 20, 2026
1d0f65f
#634: Implemented a new participant details dialog to show and edit p…
janoliver20 Mar 25, 2026
ccae00d
#634: Code quality and design improvements
janoliver20 Mar 26, 2026
5aafadc
#634: Fixed an import issue
janoliver20 Mar 26, 2026
bb95181
Merge pull request #639 from MORE-Platform/prehab2rehab/634-pp-urls
janoliver20 Mar 26, 2026
24cff6b
prehab2rehab/#632: Documentation Limesurvey setup with ParticipantPortal
iaigner Mar 26, 2026
f9294ce
#634: Removed an invalid character that prevented safari from display…
janoliver20 Mar 27, 2026
cd3ebd9
Merge pull request #642 from MORE-Platform/634-removed-invalid-char
janoliver20 Mar 27, 2026
8a4ce52
prehab2rehab/#632: Update Documentation and Split User and Technical …
iaigner Mar 30, 2026
a7405d7
prehab2rehab/#632: Update Documentations
iaigner Mar 30, 2026
c498dea
prehab2rehab/#632: update documentation images
iaigner Mar 30, 2026
a57b188
prehab2rehab/#636: doc - manual e2e testing strategy documentation
iaigner Mar 30, 2026
e72db77
prehab2rehab/#636: doc - update manual end to end test and add Phase 3
iaigner Mar 31, 2026
e3d2009
prehab2rehab/#636: doc - small refactoring
iaigner Mar 31, 2026
6b4009a
prehab2rehab/#636: doc - update documentation after review
iaigner Mar 31, 2026
8417973
Merge branch 'develop' into prehab2rehab/#635-documentation-limsurvey…
iaigner Mar 31, 2026
26b7cbb
Merge pull request #641 from MORE-Platform/prehab2rehab/#635-document…
iaigner Mar 31, 2026
791554e
Merge branch 'develop' into prehab2rehab/#636-manuel-e2e-testing-stra…
iaigner Mar 31, 2026
52217e5
prehab2rehab/#636: run linter
iaigner Mar 31, 2026
2d8c588
Merge pull request #643 from MORE-Platform/prehab2rehab/#636-manuel-e…
iaigner Mar 31, 2026
ef5cabf
prehab2rehab/#390: update application toggle with toast feedback
iaigner Apr 1, 2026
c8bf7cc
prehab2rehab/#645: ui improvements
iaigner Apr 2, 2026
9fc3338
Merge pull request #644 from MORE-Platform/prehab2rehab/#390-improvem…
iaigner Apr 3, 2026
b930d05
Merge branch 'develop' into prehab2rehab/#645-ui-fixes
iaigner Apr 3, 2026
19e73e9
prehab2rehab/#645: update user documentation with lime survey specifi…
iaigner Apr 3, 2026
c076974
Merge pull request #646 from MORE-Platform/prehab2rehab/#645-ui-fixes
iaigner Apr 7, 2026
1f24cde
#15: Implemented tags into the pipeline
janoliver20 Apr 9, 2026
d80e39c
#15: Implemented tags into the pipeline
janoliver20 Apr 9, 2026
4f6ce6c
Merge pull request #647 from MORE-Platform/15-deployment-tags
janoliver20 Apr 9, 2026
7f625d4
#14: Implemented true env variables to really replace endpoints in di…
janoliver20 Apr 17, 2026
d8b9dae
Merge pull request #648 from MORE-Platform/env-variable-implementation
janoliver20 Apr 17, 2026
727c37e
Deployment fix
janoliver20 Apr 28, 2026
aa08d23
Merge pull request #650 from MORE-Platform/deployment-fix
janoliver20 Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .github/workflows/test-build-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ name: Test, Build and Publish

on:
push:
branches: [ "main", "develop" ]
tags: [ "v*.*.*" ]
pull_request:
workflow_dispatch:
inputs:
dockerTag:
Expand Down Expand Up @@ -80,7 +83,7 @@ jobs:
build-and-push-image:
name: Build and Push Docker Image
runs-on: ubuntu-latest
if: contains(fromJSON('["main", "develop", "redlink"]'), github.ref_name) || github.event.inputs.dockerTag != ''
if: contains(fromJSON('["main", "develop"]'), github.ref_name) || startsWith(github.ref, 'refs/tags/v') || github.event.inputs.dockerTag != ''
needs:
- test
permissions:
Expand Down Expand Up @@ -108,6 +111,10 @@ jobs:
type=raw,value=1.0.${{ github.run_number }}.{{sha}}
# tag with branch-name
type=ref,event=branch,enable=${{ github.event.inputs.dockerTag == '' }}
# tags from git tag (e.g. v1.0.0 -> 1.0.0, 1.0, 1)
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
# latest-tag on the default-branch (main)
type=raw,value=latest,enable={{is_default_branch}}
# a manually provided tag
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ more-configuration-api-client-ts*
ConfiguratorAPI.yaml
src/generated-sources
tests/coverage
.env
13 changes: 12 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ RUN npm ci
COPY . .
ARG VITE_GIT_BRANCH
ARG VITE_GIT_REVISION
ARG BACKEND_URL=https://studymanager.platform-test.more.redlink.io/
ARG KEYCLOAK_URL=https://auth.more.redlink.io
ARG KEYCLOAK_REALM=Auth-Client-Test
ARG KEYCLOAK_CLIENTID=oauth2-pkce-client
RUN npm run package:quick

# production stage
Expand All @@ -15,6 +19,13 @@ COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY docker/nginx/*.conf.template /etc/nginx/templates/
EXPOSE 80

ENV MORE_BACKEND_URL=https://studymanager.more.redlink.io/
ARG BACKEND_URL=https://studymanager.platform-test.more.redlink.io/
ENV BACKEND_URL=$BACKEND_URL
ARG KEYCLOAK_URL=https://auth.more.redlink.io
ENV KEYCLOAK_URL=$KEYCLOAK_URL
ARG KEYCLOAK_REALM=Auth-Client-Test
ENV KEYCLOAK_REALM=$KEYCLOAK_REALM
ARG KEYCLOAK_CLIENTID=oauth2-pkce-client
ENV KEYCLOAK_CLIENTID=$KEYCLOAK_CLIENTID

CMD ["nginx", "-g", "daemon off;"]
53 changes: 48 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,27 @@
# MORE / Front-End

The Management & Monitoring Backend (MMB) is the front-end to manage and monitor the back-end.
The [frontend`s architecture](docs/adr) is based upon an Architectural Decision Records (ADR).
Mainly, Vue 3, vite, TS, tailwindCSS and PrimeVue are used.
To have a consistent code style and quality, we use Eslint in combination with prettier.

# Setup

```
nvm use # Optional, let nvm use the needed version
npm i # install all dependencies
npm run generate:api # generate needed sourced from BE, for generation as in the pipeline, java 17 must be set in your path
npm run dev # start local development server
```
See [nvm](https://github.com/nvm-sh/nvm) for more. The local front-end can be visited on http://localhost:3000, the [gateway](https://github.com/MORE-Platform/more-data-gateway), [back-end](https://github.com/MORE-Platform/more-studymanager-backend) with their dependencies must also run locally. See `vite.config.ts` for the required port for localhost.

See [nvm](https://github.com/nvm-sh/nvm) for more. The local front-end can be visited on http://localhost:3000,
the [gateway](https://github.com/MORE-Platform/more-data-gateway), [back-end](https://github.com/MORE-Platform/more-studymanager-backend)
with their dependencies must also run locally. See `vite.config.ts` for the required port for localhost.

## Intellij, Webstorm ESLint configuration
Set the EsLint settings for Webstorm in Preferences --> Languages & Frameworks --> Javascript --> Code Quality Tools --> ESLint

Set the EsLint settings for Webstorm in Preferences --> Languages & Frameworks --> Javascript --> Code Quality Tools -->
ESLint

- Automatic ESLint config check
- File extensions to check: `{**/*,*}.{js,ts,html,vue,json}`
Expand All @@ -23,6 +30,7 @@ Set the EsLint settings for Webstorm in Preferences --> Languages & Frameworks -
**Currently not working because of Intellij IDEs..., use `npm run lint:fix` for now**

# Scripts

- `npm i`: install dependencies / node modules
- `npm run`: shows all possible `npm` run commands including generation, development, linting, testing, and building

Expand Down Expand Up @@ -53,11 +61,11 @@ First-party plugins needed for Tailwind UI:
- [tailwindcss/typography](https://tailwindcss.com/docs/typography-plugin)
- [tailwindcss/aspect-ratio](https://github.com/tailwindlabs/tailwindcss-aspect-ratio)


The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.

The template uses Vue 3 `<script setup>` SFCs, check out
the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.

## Generation

Make sure that the enum structure within `openapi/StudyManagerApi.yml` is

```
Expand All @@ -77,9 +85,19 @@ Make sure that the enum structure within `openapi/StudyManagerApi.yml` is
- DAY

```

Otherwise, the generated enums will be duplicated, leading to errors.

## Testing Environment with Vitest

To test the frontend with a deployed backend server, you have to set environment variable `BACKEND_URL` to the
desired backend.

For the Keycloak configuration, the environment variables `KEYCLOAK_URL`, `KEYCLOAK_REALM`, and `KEYCLOAK_CLIENTID`
can be used to override the default fallback values.

For testing with a local backend use `npm run dev:local`

Run

```
Expand All @@ -89,3 +107,28 @@ npm run test:unit
- [Vitest Documentation](https://vitest.dev/api/)
- [Vitest quick explanation](https://www.youtube.com/watch?v=snCLQmINqCU&ab_channel=LearnVue)
- [Vite introduction with Vue](https://www.youtube.com/watch?v=FJRuG85tXV0&ab_channel=ProgramWithErik)

# Tagging and Deployment Strategy

To ensure safe and traceable deployments, we use a Git tagging strategy.

## Tag Format

The standard tag format is `v<Major>.<Minor>.<Patch>`, for example: `v1.0.1`.

## CI/CD Workflow

The GitHub Action pipeline is configured to:

- **Build and Test** on any pull request and on pushes to `main` and `develop`.
- **Build and Publish Docker Image** when:
- A push occurs on `main` or `develop`.
- A tag matching `v*.*.*` is pushed.
- Manually triggered via `workflow_dispatch` with a custom tag.

Docker images are automatically tagged with:

- The full Git tag (if triggered by a tag).
- The branch name (if triggered by a branch push).
- `latest` (if on the default branch).
- A unique identifier including the run number and SHA.
6 changes: 3 additions & 3 deletions docker/nginx/default.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ server {

# Proxy API and other backend services
location /api {
proxy_pass ${MORE_BACKEND_URL}/api;
proxy_pass ${BACKEND_URL}/api;
}
location /login {
proxy_pass ${MORE_BACKEND_URL}/login;
proxy_pass ${BACKEND_URL}/login;
}
location /logout {
proxy_pass ${MORE_BACKEND_URL}/logout;
proxy_pass ${BACKEND_URL}/logout;
}

}
126 changes: 126 additions & 0 deletions docs/feature/conduct-study-without-app/TechnicalDocumentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# <span style="color: #6E8FAC">Technical Documentation: Conduct a MORE Study without the App</span>

## <span style="color: #6E8FAC">Overview</span>
MORE supports a study mode in which the mobile app is not required. In this mode, participants complete questionnaires via the Participant Portal web application instead of using the MORE mobile app.

Currently, this mode supports LimeSurvey observations only, but the architecture allows extension to additional observation types in the future.

---

## <span style="color: #6E8FAC">System Architecture</span>

In LimeSurvey-only studies, the MORE mobile application is replaced by the Participant Portal as the participant-facing client.

### <span style="color: #6E8FAC">The Participant Portal</span>
- authenticates participants using a generated login URL and code
- retrieves observation metadata via the Gateway
- displays active LimeSurvey observations
- redirects participants to LimeSurvey questionnaires when schedules are active

Survey availability depends on observation schedule activation.

### <span style="color: #6E8FAC">Study Manager Architecture and Extension</span>

#### <span style="color: #6E8FAC">Activate Participant Portal (StudyManager)</span>

Participant Portal access is enabled via an extension of the study configuration schema.

```yaml
# StudyManagerAPI.yaml - Study Schema extension
applicationAccess:
type: array
description: Application types which the user has access to
items:
type: string
```

The `applicationAccess` field defines which applications participants can use besides the MORE mobile app.

Currently supported value:
- `participantPortal`

If present, participants can authenticate via the Participant Portal.

#### <span style="color: #6E8FAC">Participant Portal Access Mechanism</span>
After activating the Participant Portal functionality, access credentials are generated per participant within the StudyManager.

The backend generates:
##### 1. Participant Portal URL
The backend generates a portal URL containing the study ID and a participant reference, such as:
- `participantId`
- `observationId`
- `scheduleId`

This prevents exposure of internal identifiers.

##### 2. Participant Portal Login Code:
The login code acts as the password for the Participant to authenticate with the Participant Portal. It is similar to the login token of the mobile app, but the Participant will need to provide it every time he accesses the Participant Portal.

##### 3. Access Roles
Credential generation is available to users with the roles:
- Study Administrator
- Study Operator

The Participant Portal communicates directly with the MORE Gateway, which performs authentication during portal login.

#### <span style="color: #6E8FAC">Credential Generation Flow</span>

Credential generation is triggered from the StudyManager participant list UI.

Generated credentials include:

| Component | Purpose |
| ---------- | ------------------------------- |
| Portal URL | Identifies portal entry context |
| Login code | Authenticates participant |

The generated URL remains stable even if observation configurations change.

#### <span style="color: #6E8FAC">Observation Linkage Logic</span>
This is the same as before (see also [more-limesurvey repository](https://github.com/MORE-Platform/more-limesurvey):

LimeSurvey observations must be explicitly linked to LimeSurvey survey IDs.

**During observation creation:**
1. A LimeSurvey observation type is selected
2. The survey ID is provided
3. The observation schedule is configured

Observation availability in the Participant Portal depends on schedule activation.

Only active observations expose redirect links.

Further configuration details are available in the MORE LimeSurvey repository:
https://github.com/MORE-Platform/more-limesurvey

#### <span style="color: #6E8FAC">LimeSurvey Integration</span>
LimeSurvey questionnaires are accessed via redirect links generated dynamically by the backend. It is the same process that is also used for the More App. However the final links are put together by the Participant Portal itself.

**Redirect links:**
- are schedule-bound
- are generated per observation instance
- are validated by the Gateway before forwarding

### <span style="color: #6E8FAC">Participant Portal Architecture</span>
The Participant Portal is a standalone web client responsible for:
- participant authentication via login code
- consent state handling
-. observation retrieval via Gateway
- LimeSurvey redirect initiation

Repository: https://github.com/MORE-Platform/more-participant-portal

The portal currently supports LimeSurvey observations only but is designed for extensibility toward additional observation types.

#### <span style="color: #6E8FAC">Tech Stack Used</span>
| Tool | Purpose |
| ----------------- | ---------------------------- |
| Vue 3 | UI framework |
| Vite | Build tooling |
| TypeScript | Static typing |
| Vue Router | Client-side routing |
| Pinia | Client-side state management |
| TanStack Query | Server state synchronization |
| TailwindCSS | Utility-based styling |
| PrimeVue | Component library |
| OpenAPI Generator | Typed API client generation |
Loading
Loading