# amira-nasfi/wiqayati architecture

> Architecture diagram of the GitHub repository amira-nasfi/wiqayati, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/amira-nasfi/wiqayati
- Repository: https://github.com/amira-nasfi/wiqayati
- Video tour (about a minute): https://gitdiagram.com/amira-nasfi/wiqayati/video

## Overview

Wiqayati is a Tunisian diabetes-screening and care platform, with web portals for health workers and administrators and a citizen mobile app. The principal care workflow is patient identification and screening, risk scoring, priority routing, and personalized care-plan review; citizens can also follow recommendations and self-assess. Ministry analytics, audit, authentication, and FHIR interoperability are supporting capabilities. The README documents these product stages; sampled source confirms the web routing, API clients, and care-plan generation, but not detailed endpoint wiring, so uncertain links are omitted.

Main entry points: [`backend/wiqayati/urls.py`](https://github.com/amira-nasfi/wiqayati/blob/main/backend/wiqayati/urls.py) (Django API), [`frontend/src/App.tsx`](https://github.com/amira-nasfi/wiqayati/blob/main/frontend/src/App.tsx) (Web portals), [`backend/apps/screening`](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/screening) (Patient screening), [`backend/apps/care_plan`](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/care_plan) (Care plans)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User applications"]
  node_web_app["Web portals<br/>[App.tsx]"]
  node_web_api_client["Web API client<br/>[client.ts]"]
  node_mobile_app["Citizen mobile"]
  node_mobile_api_client["Mobile API client<br/>[client.ts]"]
end

subgraph group_clinical["Screening and care"]
  node_api["Django API<br/>[urls.py]"]
  node_screening["Patient screening"]
  node_risk["Risk assessment"]
  node_queue["Priority queue"]
  node_care_plan["Care plans"]
  node_plan_generator["Plan generator<br/>[services.py]"]
end

subgraph group_operations["Identity and oversight"]
  node_accounts["Authentication and roles"]
  node_audit["Audit trail"]
  node_analytics["Ministry analytics"]
  node_database[("PostgreSQL")]
end

subgraph group_interop["FHIR integration"]
  node_fhir_bridge["FHIR bridge"]
  node_celery["Async task runner<br/>[celery.py]"]
  node_redis["Redis broker"]
  node_hapi["HAPI FHIR server"]
end

node_citizen(("Citizen"))
node_health_worker(("Health worker"))
node_nutritionist(("Nutritionist"))
node_ministry(("Ministry staff"))

node_citizen -->|"uses portal"| node_web_app
node_health_worker -->|"uses portal"| node_web_app
node_nutritionist -->|"uses portal"| node_web_app
node_ministry -->|"uses portal"| node_web_app
node_citizen -->|"uses app"| node_mobile_app
node_web_app -->|"requests data"| node_web_api_client
node_mobile_app -->|"requests data"| node_mobile_api_client
node_web_api_client -->|"calls API"| node_api
node_mobile_api_client -->|"calls API"| node_api
node_api -->|"authenticates"| node_accounts
node_api -->|"dispatches screening"| node_screening
node_screening -->|"requests scoring"| node_risk
node_api -->|"dispatches queue"| node_queue
node_api -->|"dispatches plans"| node_care_plan
node_care_plan -->|"generates recommendations"| node_plan_generator
node_api -->|"dispatches analytics"| node_analytics
node_api -->|"records access"| node_audit
node_screening -->|"reads and writes"| node_database
node_risk -->|"stores assessments"| node_database
node_queue -->|"reads and writes"| node_database
node_care_plan -->|"reads and writes"| node_database
node_accounts -->|"reads and writes"| node_database
node_audit -->|"stores events"| node_database
node_analytics -->|"reads records"| node_database
node_fhir_bridge -->|"schedules tasks"| node_celery
node_celery -->|"uses broker"| node_redis
node_celery -->|"runs tasks"| node_fhir_bridge
node_fhir_bridge -.->|"exchanges FHIR"| node_hapi

click node_web_app "https://github.com/amira-nasfi/wiqayati/blob/main/frontend/src/App.tsx"
click node_web_api_client "https://github.com/amira-nasfi/wiqayati/blob/main/frontend/src/api/client.ts"
click node_mobile_app "https://github.com/amira-nasfi/wiqayati/tree/main/mobile/src/app"
click node_mobile_api_client "https://github.com/amira-nasfi/wiqayati/blob/main/mobile/src/api/client.ts"
click node_api "https://github.com/amira-nasfi/wiqayati/blob/main/backend/wiqayati/urls.py"
click node_screening "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/screening"
click node_risk "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/risk_engine"
click node_queue "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/nutritionist_queue"
click node_care_plan "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/care_plan"
click node_plan_generator "https://github.com/amira-nasfi/wiqayati/blob/main/backend/apps/care_plan/services.py"
click node_accounts "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/accounts"
click node_audit "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/audit"
click node_analytics "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/screening"
click node_fhir_bridge "https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/fhir_bridge"
click node_celery "https://github.com/amira-nasfi/wiqayati/blob/main/backend/wiqayati/celery.py"

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_app,node_web_api_client,node_mobile_app,node_mobile_api_client toneBlue
class node_api,node_screening,node_risk,node_queue,node_care_plan,node_plan_generator toneAmber
class node_accounts,node_audit,node_analytics,node_database toneMint
class node_fhir_bridge,node_celery,node_redis,node_hapi,node_health_worker toneRose
class node_citizen,node_nutritionist,node_ministry toneIndigo
```

## Components

### User applications

- [Web portals](https://github.com/amira-nasfi/wiqayati/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Web API client](https://github.com/amira-nasfi/wiqayati/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`
- [Citizen mobile](https://github.com/amira-nasfi/wiqayati/tree/main/mobile/src/app): `mobile/src/app`
- [Mobile API client](https://github.com/amira-nasfi/wiqayati/blob/main/mobile/src/api/client.ts): `mobile/src/api/client.ts`

### Screening and care

- [Django API](https://github.com/amira-nasfi/wiqayati/blob/main/backend/wiqayati/urls.py): `backend/wiqayati/urls.py`
- [Patient screening](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/screening): `backend/apps/screening`
- [Risk assessment](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/risk_engine): `backend/apps/risk_engine`
- [Priority queue](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/nutritionist_queue): `backend/apps/nutritionist_queue`
- [Care plans](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/care_plan): `backend/apps/care_plan`
- [Plan generator](https://github.com/amira-nasfi/wiqayati/blob/main/backend/apps/care_plan/services.py): `backend/apps/care_plan/services.py`

### Identity and oversight

- [Authentication and roles](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/accounts): `backend/apps/accounts`
- [Audit trail](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/audit): `backend/apps/audit`
- [Ministry analytics](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/screening): `backend/apps/screening`
- **PostgreSQL**

### FHIR integration

- [FHIR bridge](https://github.com/amira-nasfi/wiqayati/tree/main/backend/apps/fhir_bridge): `backend/apps/fhir_bridge`
- [Async task runner](https://github.com/amira-nasfi/wiqayati/blob/main/backend/wiqayati/celery.py): `backend/wiqayati/celery.py`
- **Redis broker**
- **HAPI FHIR server**

### Other components

- **Citizen**
- **Health worker**
- **Nutritionist**
- **Ministry staff**

## Connections

- Citizen → Web portals: uses portal
- Health worker → Web portals: uses portal
- Nutritionist → Web portals: uses portal
- Ministry staff → Web portals: uses portal
- Citizen → Citizen mobile: uses app
- Web portals → Web API client: requests data
- Citizen mobile → Mobile API client: requests data
- Web API client → Django API: calls API
- Mobile API client → Django API: calls API
- Django API → Authentication and roles: authenticates
- Django API → Patient screening: dispatches screening
- Patient screening → Risk assessment: requests scoring
- Django API → Priority queue: dispatches queue
- Django API → Care plans: dispatches plans
- Care plans → Plan generator: generates recommendations
- Django API → Ministry analytics: dispatches analytics
- Django API → Audit trail: records access
- Patient screening → PostgreSQL: reads and writes
- Risk assessment → PostgreSQL: stores assessments
- Priority queue → PostgreSQL: reads and writes
- Care plans → PostgreSQL: reads and writes
- Authentication and roles → PostgreSQL: reads and writes
- Audit trail → PostgreSQL: stores events
- Ministry analytics → PostgreSQL: reads records
- FHIR bridge → Async task runner: schedules tasks
- Async task runner → Redis broker: uses broker
- Async task runner → FHIR bridge: runs tasks
- FHIR bridge → HAPI FHIR server: exchanges FHIR
