# bisket77/project-clinic architecture

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

- Interactive diagram: https://gitdiagram.com/bisket77/project-clinic
- Repository: https://github.com/bisket77/project-clinic

## Overview

CLINICMS is a clinic-management application spanning registration and queueing, eligibility checks, screening, doctor consultation, pharmacy, billing, appointments, and administration. The primary workflow moves a patient from registration and queue through screening and consultation, then dispensing and payment. The React app presents role-based pages; the Go API routes requests to controllers backed by PostgreSQL, with WebSockets supporting documented real-time updates. README capabilities guide the broader map; sampled source confirms routing, clinical prescription handling, dispensing, billing, and frontend entry-point behavior, but not every subsystem’s internal wiring.

Main entry points: [`golang-backend/internal/routes/routes.go`](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/routes/routes.go) (HTTP routes), [`react-frontend/src/App.tsx`](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/App.tsx) (React application), [`react-frontend/src/services/api.ts`](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/services/api.ts) (API client), [`golang-backend/internal/config/db.go`](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/config/db.go) (PostgreSQL database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend experience"]
  node_app["React application<br/>[App.tsx]"]
  node_registration["Patient registration"]
  node_eligibility["Eligibility checks"]
  node_queueui["Queue dashboard<br/>[QueuePage.tsx]"]
  node_vitalsui["Vitals screening<br/>[VitalsPage.tsx]"]
  node_historyui["Screening history"]
  node_doctorui["Doctor workspace"]
  node_pharmacyui["Pharmacy workspace<br/>[MedicinePage.tsx]"]
  node_billingui["Billing workspace"]
  node_officerui["Officer workspace"]
  node_wscontext["Frontend realtime context"]
end

subgraph group_api["API and access"]
  node_api["API client<br/>[api.ts]"]
  node_routes["HTTP routes<br/>[routes.go]"]
  node_middleware["Auth and roles<br/>[auth.go]"]
end

subgraph group_care["Patient care"]
  node_registrationctl["Patient and queue API"]
  node_eligibilityctl["Eligibility API"]
  node_vitalsctl["Vitals and triage API"]
  node_doctorctl["Examination API"]
end

subgraph group_operations["Clinic operations"]
  node_pharmacyctl["Dispensing API"]
  node_billingctl["Billing and payment API"]
  node_appointments["Appointment API"]
  node_dms["Document management API<br/>[dms_controller.go]"]
  node_admin["Admin access API"]
end

subgraph group_infrastructure["Persistence and realtime"]
  node_db[("PostgreSQL database<br/>[db.go]")]
  node_ws["WebSocket hub<br/>[hub.go]"]
end

node_staff(("Clinic staff"))

node_staff -->|"uses"| node_app
node_app -->|"renders"| node_registration
node_app -->|"renders"| node_eligibility
node_app -->|"renders"| node_queueui
node_app -->|"renders"| node_vitalsui
node_app -->|"renders"| node_historyui
node_app -->|"renders"| node_doctorui
node_app -->|"renders"| node_pharmacyui
node_app -->|"renders"| node_billingui
node_app -->|"renders"| node_officerui
node_registration -->|"requests"| node_api
node_eligibility -->|"requests"| node_api
node_queueui -->|"requests"| node_api
node_vitalsui -->|"requests"| node_api
node_historyui -->|"requests"| node_api
node_doctorui -->|"requests"| node_api
node_pharmacyui -->|"requests"| node_api
node_billingui -->|"requests"| node_api
node_officerui -->|"requests"| node_api
node_api -->|"calls"| node_routes
node_routes -->|"guards"| node_middleware
node_routes -->|"dispatches"| node_registrationctl
node_routes -->|"dispatches"| node_eligibilityctl
node_routes -->|"dispatches"| node_vitalsctl
node_routes -->|"dispatches"| node_doctorctl
node_routes -->|"dispatches"| node_pharmacyctl
node_routes -->|"dispatches"| node_billingctl
node_routes -->|"dispatches"| node_appointments
node_routes -->|"dispatches"| node_dms
node_routes -->|"dispatches"| node_admin
node_registrationctl -->|"reads and writes"| node_db
node_eligibilityctl -->|"reads and writes"| node_db
node_vitalsctl -->|"reads and writes"| node_db
node_doctorctl -->|"reads and writes"| node_db
node_doctorctl -->|"queues prescriptions"| node_pharmacyctl
node_pharmacyctl -->|"records dispensing"| node_db
node_pharmacyctl -->|"creates billing queue"| node_billingctl
node_billingctl -->|"records payments"| node_db
node_appointments -->|"reads and writes"| node_db
node_dms -->|"reads and writes"| node_db
node_admin -->|"reads and writes"| node_db
node_wscontext -->|"connects"| node_ws

click node_app "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/App.tsx"
click node_registration "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Registration/RegistrationPage.tsx"
click node_eligibility "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Eligibility/EligibilityPage.tsx"
click node_queueui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Queue/QueuePage.tsx"
click node_vitalsui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Vitals/VitalsPage.tsx"
click node_historyui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/ScreeningHistory/ScreeningHistoryPage.tsx"
click node_doctorui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/doctor/DoctorExaminationPage.tsx"
click node_pharmacyui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/pharmacy/MedicinePage.tsx"
click node_billingui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/billing/BillingDashboardPage.tsx"
click node_officerui "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/officer/DocumentManagementPage.tsx"
click node_api "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/services/api.ts"
click node_routes "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/routes/routes.go"
click node_middleware "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/middleware/auth.go"
click node_registrationctl "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/patient_controller.go"
click node_eligibilityctl "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/eligibility_controller.go"
click node_vitalsctl "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/vitals_controller.go"
click node_doctorctl "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/examination_controller.go"
click node_pharmacyctl "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/dispensing_controller.go"
click node_billingctl "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/billing_controller.go"
click node_appointments "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/appointment_controller.go"
click node_dms "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/dms_controller.go"
click node_admin "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/admin_controller.go"
click node_db "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/config/db.go"
click node_ws "https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/ws/hub.go"
click node_wscontext "https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/context/WebSocketContext.tsx"

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_app,node_registration,node_eligibility,node_queueui,node_vitalsui,node_historyui,node_doctorui,node_pharmacyui,node_billingui,node_officerui,node_wscontext toneBlue
class node_api,node_routes,node_middleware toneAmber
class node_registrationctl,node_eligibilityctl,node_vitalsctl,node_doctorctl toneMint
class node_pharmacyctl,node_billingctl,node_appointments,node_dms,node_admin toneRose
class node_db,node_ws,node_staff toneIndigo
```

## Components

### Frontend experience

- [React application](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/App.tsx): `react-frontend/src/App.tsx`
- [Patient registration](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Registration/RegistrationPage.tsx): `react-frontend/src/pages/Registration/RegistrationPage.tsx`
- [Eligibility checks](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Eligibility/EligibilityPage.tsx): `react-frontend/src/pages/Eligibility/EligibilityPage.tsx`
- [Queue dashboard](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Queue/QueuePage.tsx): `react-frontend/src/pages/Queue/QueuePage.tsx`
- [Vitals screening](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/Vitals/VitalsPage.tsx): `react-frontend/src/pages/Vitals/VitalsPage.tsx`
- [Screening history](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/ScreeningHistory/ScreeningHistoryPage.tsx): `react-frontend/src/pages/ScreeningHistory/ScreeningHistoryPage.tsx`
- [Doctor workspace](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/doctor/DoctorExaminationPage.tsx): `react-frontend/src/pages/doctor/DoctorExaminationPage.tsx`
- [Pharmacy workspace](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/pharmacy/MedicinePage.tsx): `react-frontend/src/pages/pharmacy/MedicinePage.tsx`
- [Billing workspace](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/billing/BillingDashboardPage.tsx): `react-frontend/src/pages/billing/BillingDashboardPage.tsx`
- [Officer workspace](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/pages/officer/DocumentManagementPage.tsx): `react-frontend/src/pages/officer/DocumentManagementPage.tsx`
- [Frontend realtime context](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/context/WebSocketContext.tsx): `react-frontend/src/context/WebSocketContext.tsx`

### API and access

- [API client](https://github.com/bisket77/project-clinic/blob/main/react-frontend/src/services/api.ts): `react-frontend/src/services/api.ts`
- [HTTP routes](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/routes/routes.go): `golang-backend/internal/routes/routes.go`
- [Auth and roles](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/middleware/auth.go): `golang-backend/internal/middleware/auth.go`

### Patient care

- [Patient and queue API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/patient_controller.go): `golang-backend/internal/controllers/patient_controller.go`
- [Eligibility API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/eligibility_controller.go): `golang-backend/internal/controllers/eligibility_controller.go`
- [Vitals and triage API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/vitals_controller.go): `golang-backend/internal/controllers/vitals_controller.go`
- [Examination API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/examination_controller.go): `golang-backend/internal/controllers/examination_controller.go`

### Clinic operations

- [Dispensing API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/dispensing_controller.go): `golang-backend/internal/controllers/dispensing_controller.go`
- [Billing and payment API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/billing_controller.go): `golang-backend/internal/controllers/billing_controller.go`
- [Appointment API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/appointment_controller.go): `golang-backend/internal/controllers/appointment_controller.go`
- [Document management API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/dms_controller.go): `golang-backend/internal/controllers/dms_controller.go`
- [Admin access API](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/controllers/admin_controller.go): `golang-backend/internal/controllers/admin_controller.go`

### Persistence and realtime

- [PostgreSQL database](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/config/db.go): `golang-backend/internal/config/db.go`
- [WebSocket hub](https://github.com/bisket77/project-clinic/blob/main/golang-backend/internal/ws/hub.go): `golang-backend/internal/ws/hub.go`

### Other components

- **Clinic staff**

## Connections

- Clinic staff → React application: uses
- React application → Patient registration: renders
- React application → Eligibility checks: renders
- React application → Queue dashboard: renders
- React application → Vitals screening: renders
- React application → Screening history: renders
- React application → Doctor workspace: renders
- React application → Pharmacy workspace: renders
- React application → Billing workspace: renders
- React application → Officer workspace: renders
- Patient registration → API client: requests
- Eligibility checks → API client: requests
- Queue dashboard → API client: requests
- Vitals screening → API client: requests
- Screening history → API client: requests
- Doctor workspace → API client: requests
- Pharmacy workspace → API client: requests
- Billing workspace → API client: requests
- Officer workspace → API client: requests
- API client → HTTP routes: calls
- HTTP routes → Auth and roles: guards
- HTTP routes → Patient and queue API: dispatches
- HTTP routes → Eligibility API: dispatches
- HTTP routes → Vitals and triage API: dispatches
- HTTP routes → Examination API: dispatches
- HTTP routes → Dispensing API: dispatches
- HTTP routes → Billing and payment API: dispatches
- HTTP routes → Appointment API: dispatches
- HTTP routes → Document management API: dispatches
- HTTP routes → Admin access API: dispatches
- Patient and queue API → PostgreSQL database: reads and writes
- Eligibility API → PostgreSQL database: reads and writes
- Vitals and triage API → PostgreSQL database: reads and writes
- Examination API → PostgreSQL database: reads and writes
- Examination API → Dispensing API: queues prescriptions
- Dispensing API → PostgreSQL database: records dispensing
- Dispensing API → Billing and payment API: creates billing queue
- Billing and payment API → PostgreSQL database: records payments
- Appointment API → PostgreSQL database: reads and writes
- Document management API → PostgreSQL database: reads and writes
- Admin access API → PostgreSQL database: reads and writes
- Frontend realtime context → WebSocket hub: connects
