# livdenner/clinicalstudypb-project architecture

> Architecture diagram of the GitHub repository livdenner/clinicalstudypb-project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/livdenner/clinicalstudypb-project
- Repository: https://github.com/livdenner/clinicalstudypb-project

## Overview

ClinicalStudyPB is a clinical-study management system: researchers configure studies and protocols, then coordinators recruit candidates, assess eligibility, record simulated consent, and include eligible candidates within study limits. The web app uses the REST API with JWT; the backend owns persistence. The README describes the mobile app as an initial two-screen navigation shell, not an integrated workflow. Several web pages and backend controllers were not sampled, so the graph preserves documented capabilities but omits unverified call paths.

Main entry points: [`backend/src/main/java/clinicalstudypb`](https://github.com/livdenner/clinicalstudypb-project/tree/main/backend/src/main/java/clinicalstudypb) (Backend REST API), [`backend/src/main/java/clinicalstudypb/studies/application/StudyService.java`](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/studies/application/StudyService.java) (Study lifecycle), [`backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java`](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java) (Participant inclusion), [`backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java`](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java) (Simulated consent)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User applications"]
  node_web["Web application"]
  node_web_api["Web API client<br/>[apiClient.ts]"]
  node_mobile["Mobile shell"]
  node_mobile_api["Mobile API client<br/>[apiClient.ts]"]
end

subgraph group_identity["Identity and users"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_users["User management<br/>[UserService.java]"]
  node_user_store["User repository"]
end

subgraph group_study["Study protocol"]
  node_studies["Study lifecycle<br/>[StudyService.java]"]
  node_study_store["Study repositories"]
  node_criteria["Eligibility criteria"]
  node_visits["Planned visits"]
  node_visit_api["Visit endpoints"]
  node_visit_store["Visit repository"]
end

subgraph group_recruitment["Recruitment"]
  node_candidates["Candidate management"]
  node_eligibility["Eligibility evaluation"]
  node_eligibility_query["Eligibility responses"]
  node_consent["Simulated consent"]
  node_participants["Participant inclusion"]
  node_participant_query["Participant queries"]
  node_participant_store["Participant repository"]
end

node_researcher(("Researcher"))
node_coordinator(("Coordinator"))
node_postgres[("PostgreSQL")]
node_rest_api["Backend REST API"]

node_researcher -->|"manages studies"| node_web
node_coordinator -->|"recruits candidates"| node_web
node_web -.->|"sends requests"| node_web_api
node_web_api -->|"calls REST"| node_rest_api
node_rest_api -.->|"authenticates"| node_auth
node_rest_api -.->|"manages users"| node_users
node_rest_api -.->|"manages studies"| node_studies
node_rest_api -.->|"configures criteria"| node_criteria
node_rest_api -.->|"configures visits"| node_visit_api
node_visit_api -->|"delegates to"| node_visits
node_rest_api -.->|"manages candidates"| node_candidates
node_rest_api -.->|"evaluates eligibility"| node_eligibility
node_rest_api -.->|"records consent"| node_consent
node_rest_api -.->|"includes candidates"| node_participants
node_studies -->|"persists studies"| node_study_store
node_studies -->|"validates researcher"| node_users
node_criteria -->|"checks protocol"| node_studies
node_criteria -->|"checks responses"| node_eligibility_query
node_visits -->|"checks study"| node_studies
node_visits -->|"persists visits"| node_visit_store
node_users -->|"persists users"| node_user_store
node_auth -->|"looks up accounts"| node_users
node_candidates -->|"checks study"| node_studies
node_consent -->|"checks candidate"| node_candidates
node_consent -->|"checks study"| node_studies
node_participants -.->|"checks study"| node_studies
node_participants -->|"checks candidate"| node_candidates
node_participants -->|"locks consent"| node_consent
node_participant_query -->|"queries participants"| node_participant_store
node_rest_api -->|"persists data"| node_postgres
node_mobile -.->|"uses client"| node_mobile_api

click node_web "https://github.com/livdenner/clinicalstudypb-project/tree/main/web/src"
click node_web_api "https://github.com/livdenner/clinicalstudypb-project/blob/main/web/src/services/api/apiClient.ts"
click node_mobile "https://github.com/livdenner/clinicalstudypb-project/tree/main/mobile/src/app"
click node_mobile_api "https://github.com/livdenner/clinicalstudypb-project/blob/main/mobile/src/services/api/apiClient.ts"
click node_auth "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/auth/application/AuthService.java"
click node_users "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/users/application/UserService.java"
click node_user_store "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/users/infrastructure/UserRepository.java"
click node_studies "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/studies/application/StudyService.java"
click node_study_store "https://github.com/livdenner/clinicalstudypb-project/tree/main/backend/src/main/java/clinicalstudypb/studies/infrastructure"
click node_criteria "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/criteria/application/StudyCriterionService.java"
click node_visits "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/visits/application/PlannedVisitService.java"
click node_visit_api "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/visits/api/PlannedVisitController.java"
click node_visit_store "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/visits/infrastructure/PlannedVisitRepository.java"
click node_candidates "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/candidates/application/CandidateService.java"
click node_eligibility "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/candidates/application/EligibilityEvaluationService.java"
click node_eligibility_query "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/candidates/application/EligibilityResponseQueryService.java"
click node_consent "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java"
click node_participants "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java"
click node_participant_query "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/application/ParticipantQueryService.java"
click node_participant_store "https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/infrastructure/ParticipantRepository.java"
click node_rest_api "https://github.com/livdenner/clinicalstudypb-project/tree/main/backend/src/main/java/clinicalstudypb"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web,node_web_api,node_mobile,node_mobile_api toneBlue
class node_auth,node_users,node_user_store,node_postgres toneAmber
class node_studies,node_study_store,node_criteria,node_visits,node_visit_api,node_visit_store,node_rest_api toneMint
class node_candidates,node_eligibility,node_eligibility_query,node_consent,node_participants,node_participant_query,node_participant_store toneRose
class node_researcher,node_coordinator toneIndigo
```

## Components

### User applications

- [Web application](https://github.com/livdenner/clinicalstudypb-project/tree/main/web/src): `web/src`
- [Web API client](https://github.com/livdenner/clinicalstudypb-project/blob/main/web/src/services/api/apiClient.ts): `web/src/services/api/apiClient.ts`
- [Mobile shell](https://github.com/livdenner/clinicalstudypb-project/tree/main/mobile/src/app): `mobile/src/app`
- [Mobile API client](https://github.com/livdenner/clinicalstudypb-project/blob/main/mobile/src/services/api/apiClient.ts): `mobile/src/services/api/apiClient.ts`

### Identity and users

- [Authentication](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/auth/application/AuthService.java): `backend/src/main/java/clinicalstudypb/auth/application/AuthService.java`
- [User management](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/users/application/UserService.java): `backend/src/main/java/clinicalstudypb/users/application/UserService.java`
- [User repository](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/users/infrastructure/UserRepository.java): `backend/src/main/java/clinicalstudypb/users/infrastructure/UserRepository.java`

### Study protocol

- [Study lifecycle](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/studies/application/StudyService.java): `backend/src/main/java/clinicalstudypb/studies/application/StudyService.java`
- [Study repositories](https://github.com/livdenner/clinicalstudypb-project/tree/main/backend/src/main/java/clinicalstudypb/studies/infrastructure): `backend/src/main/java/clinicalstudypb/studies/infrastructure`
- [Eligibility criteria](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/criteria/application/StudyCriterionService.java): `backend/src/main/java/clinicalstudypb/criteria/application/StudyCriterionService.java`
- [Planned visits](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/visits/application/PlannedVisitService.java): `backend/src/main/java/clinicalstudypb/visits/application/PlannedVisitService.java`
- [Visit endpoints](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/visits/api/PlannedVisitController.java): `backend/src/main/java/clinicalstudypb/visits/api/PlannedVisitController.java`
- [Visit repository](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/visits/infrastructure/PlannedVisitRepository.java): `backend/src/main/java/clinicalstudypb/visits/infrastructure/PlannedVisitRepository.java`

### Recruitment

- [Candidate management](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/candidates/application/CandidateService.java): `backend/src/main/java/clinicalstudypb/candidates/application/CandidateService.java`
- [Eligibility evaluation](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/candidates/application/EligibilityEvaluationService.java): `backend/src/main/java/clinicalstudypb/candidates/application/EligibilityEvaluationService.java`
- [Eligibility responses](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/candidates/application/EligibilityResponseQueryService.java): `backend/src/main/java/clinicalstudypb/candidates/application/EligibilityResponseQueryService.java`
- [Simulated consent](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java): `backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java`
- [Participant inclusion](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java): `backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java`
- [Participant queries](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/application/ParticipantQueryService.java): `backend/src/main/java/clinicalstudypb/participants/application/ParticipantQueryService.java`
- [Participant repository](https://github.com/livdenner/clinicalstudypb-project/blob/main/backend/src/main/java/clinicalstudypb/participants/infrastructure/ParticipantRepository.java): `backend/src/main/java/clinicalstudypb/participants/infrastructure/ParticipantRepository.java`

### Other components

- **Researcher**
- **Coordinator**
- **PostgreSQL**
- [Backend REST API](https://github.com/livdenner/clinicalstudypb-project/tree/main/backend/src/main/java/clinicalstudypb): `backend/src/main/java/clinicalstudypb`

## Connections

- Researcher → Web application: manages studies (evidence: `README.md`)
- Coordinator → Web application: recruits candidates (evidence: `README.md`)
- Web application → Web API client: sends requests (evidence: `web/src/pages/estudos/useDetalhesEstudo.ts`)
- Web API client → Backend REST API: calls REST (evidence: `README.md`)
- Backend REST API → Authentication: authenticates (evidence: `backend/src/main/java/clinicalstudypb/auth/application/AuthService.java`)
- Backend REST API → User management: manages users (evidence: `backend/src/main/java/clinicalstudypb/auth/application/AuthService.java`)
- Backend REST API → Study lifecycle: manages studies (evidence: `backend/src/main/java/clinicalstudypb/visits/application/PlannedVisitService.java`)
- Backend REST API → Eligibility criteria: configures criteria (evidence: `backend/src/main/java/clinicalstudypb/candidates/application/EligibilityEvaluationService.java`)
- Backend REST API → Visit endpoints: configures visits (evidence: `backend/src/main/java/clinicalstudypb/visits/api/PlannedVisitController.java`)
- Visit endpoints → Planned visits: delegates to (evidence: `backend/src/main/java/clinicalstudypb/visits/api/PlannedVisitController.java`)
- Backend REST API → Candidate management: manages candidates (evidence: `backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java`)
- Backend REST API → Eligibility evaluation: evaluates eligibility (evidence: `backend/src/main/java/clinicalstudypb/candidates/application/EligibilityEvaluationService.java`)
- Backend REST API → Simulated consent: records consent (evidence: `backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java`)
- Backend REST API → Participant inclusion: includes candidates (evidence: `backend/src/main/java/clinicalstudypb/participants/api/ParticipantController.java`)
- Study lifecycle → Study repositories: persists studies (evidence: `backend/src/main/java/clinicalstudypb/studies/application/StudyService.java`)
- Study lifecycle → User management: validates researcher (evidence: `backend/src/main/java/clinicalstudypb/studies/application/StudyService.java`)
- Eligibility criteria → Study lifecycle: checks protocol (evidence: `backend/src/main/java/clinicalstudypb/criteria/application/StudyCriterionService.java`)
- Eligibility criteria → Eligibility responses: checks responses (evidence: `backend/src/main/java/clinicalstudypb/criteria/application/StudyCriterionService.java`)
- Planned visits → Study lifecycle: checks study (evidence: `backend/src/main/java/clinicalstudypb/visits/application/PlannedVisitService.java`)
- Planned visits → Visit repository: persists visits (evidence: `backend/src/main/java/clinicalstudypb/visits/application/PlannedVisitService.java`)
- User management → User repository: persists users (evidence: `backend/src/main/java/clinicalstudypb/users/application/UserService.java`)
- Authentication → User management: looks up accounts (evidence: `backend/src/main/java/clinicalstudypb/auth/application/AuthService.java`)
- Candidate management → Study lifecycle: checks study (evidence: `backend/src/main/java/clinicalstudypb/candidates/application/CandidateService.java`)
- Simulated consent → Candidate management: checks candidate (evidence: `backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java`)
- Simulated consent → Study lifecycle: checks study (evidence: `backend/src/main/java/clinicalstudypb/consent/application/SimulatedConsentService.java`)
- Participant inclusion → Study lifecycle: checks study (evidence: `backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java`)
- Participant inclusion → Candidate management: checks candidate (evidence: `backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java`)
- Participant inclusion → Simulated consent: locks consent (evidence: `backend/src/main/java/clinicalstudypb/participants/application/ParticipantService.java`)
- Participant queries → Participant repository: queries participants (evidence: `backend/src/main/java/clinicalstudypb/participants/application/ParticipantQueryService.java`)
- Backend REST API → PostgreSQL: persists data (evidence: `README.md`)
- Mobile shell → Mobile API client: uses client
