# yennego/sms architecture

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

- Interactive diagram: https://gitdiagram.com/yennego/sms
- Repository: https://github.com/yennego/sms

## Overview

This is a multi-tenant school-management system: school staff and platform administrators use a versioned API to manage tenants, people, academic records, fees, and communications. Requests enter the FastAPI application, resolve tenant context, and reach domain services backed by PostgreSQL models and CRUD operations. The README also describes notifications, reporting, file management, and RBAC; several are roadmap or incompletely sampled, so their internal flows are not asserted here. Edges reflect excerpts, SOURCE INDEX references, or explicit README statements; unsampled implementations are represented by their existing directories.

Main entry points: [`Backend/sms-backend/src/services/academics/class_enrollment_service.py`](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/academics/class_enrollment_service.py) (Enrollment service), [`Backend/sms-backend/main.py`](https://github.com/yennego/sms/blob/main/Backend/sms-backend/main.py) (FastAPI app), [`Backend/sms-backend/src/api/v1/api.py`](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/api/v1/api.py) (Versioned API), [`Backend/sms-backend/src/services/finance/fee_service.py`](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/finance/fee_service.py) (Fee management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and tenancy"]
  node_api_app["FastAPI app<br/>[main.py]"]
  node_versioned_api["Versioned API<br/>[api.py]"]
  node_tenant_resolution["Tenant resolution<br/>[tenant.py]"]
end

subgraph group_identity["Identity and people"]
  node_auth_api["Authentication"]
  node_admissions["Admissions"]
  node_student_records["Student records<br/>[student.py]"]
  node_rbac["Access control<br/>[permissions.py]"]
end

subgraph group_academics["Academic management"]
  node_academic_api["Academic endpoints"]
  node_enrollment_service["Enrollment service"]
  node_class_model["Class model<br/>[class_model.py]"]
  node_enrollment_model["Enrollment model<br/>[enrollment.py]"]
end

subgraph group_operations["School operations"]
  node_fee_service["Fee management<br/>[fee_service.py]"]
  node_ledger["Fee ledger<br/>[ledger.py]"]
  node_communication["Communications"]
  node_notifications["Notification delivery"]
  node_reporting["Reporting<br/>[reports.py]"]
  node_file_storage["File management<br/>[storage.py]"]
end

subgraph group_data["Persistence"]
  node_db_session["Database sessions<br/>[session.py]"]
  node_school_store[("School records")]
end

node_school_users(("School users"))

node_school_users -->|"use API"| node_api_app
node_api_app -->|"mounts routes"| node_versioned_api
node_api_app -->|"installs middleware"| node_tenant_resolution
node_api_app -->|"uses sessions"| node_db_session
node_tenant_resolution -->|"resolves tenant"| node_db_session
node_versioned_api -.->|"routes requests"| node_auth_api
node_versioned_api -.->|"routes requests"| node_academic_api
node_auth_api -.->|"checks permissions"| node_rbac
node_academic_api -.->|"handles enrollment"| node_enrollment_service
node_enrollment_service -->|"reads and writes"| node_enrollment_model
node_enrollment_service -->|"checks classes"| node_class_model
node_enrollment_service -->|"checks students"| node_student_records
node_admissions -->|"uses student CRUD"| node_student_records
node_admissions -->|"sets up fees"| node_fee_service
node_enrollment_service -->|"uses fee service"| node_fee_service
node_fee_service -->|"calculates balances"| node_ledger
node_communication -->|"dispatches alerts"| node_notifications
node_db_session -.->|"persists records"| node_school_store
node_school_users -.->|"request reports"| node_reporting
node_school_users -.->|"upload files"| node_file_storage

click node_api_app "https://github.com/yennego/sms/blob/main/Backend/sms-backend/main.py"
click node_versioned_api "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/api/v1/api.py"
click node_tenant_resolution "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/core/middleware/tenant.py"
click node_db_session "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/session.py"
click node_school_store "https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/db/models"
click node_auth_api "https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/api/v1/endpoints/auth"
click node_admissions "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/people/admission_service.py"
click node_student_records "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/crud/people/student.py"
click node_academic_api "https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/api/v1/endpoints/academics"
click node_enrollment_service "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/academics/class_enrollment_service.py"
click node_class_model "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/models/academics/class_model.py"
click node_enrollment_model "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/models/academics/enrollment.py"
click node_fee_service "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/finance/fee_service.py"
click node_ledger "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/finance/ledger.py"
click node_communication "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/communication/communication_service.py"
click node_notifications "https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/services/notification"
click node_reporting "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/tenant/reports.py"
click node_file_storage "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/files/storage.py"
click node_rbac "https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/core/security/permissions.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_api_app,node_versioned_api,node_tenant_resolution,node_school_users toneBlue
class node_auth_api,node_admissions,node_student_records,node_rbac toneAmber
class node_academic_api,node_enrollment_service,node_class_model,node_enrollment_model toneMint
class node_fee_service,node_ledger,node_communication,node_notifications,node_reporting,node_file_storage toneRose
class node_db_session,node_school_store toneIndigo
```

## Components

### Application and tenancy

- [FastAPI app](https://github.com/yennego/sms/blob/main/Backend/sms-backend/main.py): `Backend/sms-backend/main.py`
- [Versioned API](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/api/v1/api.py): `Backend/sms-backend/src/api/v1/api.py`
- [Tenant resolution](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/core/middleware/tenant.py): `Backend/sms-backend/src/core/middleware/tenant.py`

### Identity and people

- [Authentication](https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/api/v1/endpoints/auth): `Backend/sms-backend/src/api/v1/endpoints/auth`
- [Admissions](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/people/admission_service.py): `Backend/sms-backend/src/services/people/admission_service.py`
- [Student records](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/crud/people/student.py): `Backend/sms-backend/src/db/crud/people/student.py`
- [Access control](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/core/security/permissions.py): `Backend/sms-backend/src/core/security/permissions.py`

### Academic management

- [Academic endpoints](https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/api/v1/endpoints/academics): `Backend/sms-backend/src/api/v1/endpoints/academics`
- [Enrollment service](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/academics/class_enrollment_service.py): `Backend/sms-backend/src/services/academics/class_enrollment_service.py`
- [Class model](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/models/academics/class_model.py): `Backend/sms-backend/src/db/models/academics/class_model.py`
- [Enrollment model](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/models/academics/enrollment.py): `Backend/sms-backend/src/db/models/academics/enrollment.py`

### School operations

- [Fee management](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/finance/fee_service.py): `Backend/sms-backend/src/services/finance/fee_service.py`
- [Fee ledger](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/finance/ledger.py): `Backend/sms-backend/src/services/finance/ledger.py`
- [Communications](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/communication/communication_service.py): `Backend/sms-backend/src/services/communication/communication_service.py`
- [Notification delivery](https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/services/notification): `Backend/sms-backend/src/services/notification`
- [Reporting](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/tenant/reports.py): `Backend/sms-backend/src/services/tenant/reports.py`
- [File management](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/services/files/storage.py): `Backend/sms-backend/src/services/files/storage.py`

### Persistence

- [Database sessions](https://github.com/yennego/sms/blob/main/Backend/sms-backend/src/db/session.py): `Backend/sms-backend/src/db/session.py`
- [School records](https://github.com/yennego/sms/tree/main/Backend/sms-backend/src/db/models): `Backend/sms-backend/src/db/models`

### Other components

- **School users**

## Connections

- School users → FastAPI app: use API
- FastAPI app → Versioned API: mounts routes (evidence: `Backend/sms-backend/main.py`)
- FastAPI app → Tenant resolution: installs middleware (evidence: `Backend/sms-backend/main.py`)
- FastAPI app → Database sessions: uses sessions (evidence: `Backend/sms-backend/main.py`)
- Tenant resolution → Database sessions: resolves tenant (evidence: `Backend/sms-backend/src/core/middleware/tenant.py`)
- Versioned API → Authentication: routes requests
- Versioned API → Academic endpoints: routes requests
- Authentication → Access control: checks permissions
- Academic endpoints → Enrollment service: handles enrollment
- Enrollment service → Enrollment model: reads and writes (evidence: `Backend/sms-backend/src/services/academics/class_enrollment_service.py`)
- Enrollment service → Class model: checks classes (evidence: `Backend/sms-backend/src/services/academics/class_enrollment_service.py`)
- Enrollment service → Student records: checks students (evidence: `Backend/sms-backend/src/services/academics/class_enrollment_service.py`)
- Admissions → Student records: uses student CRUD (evidence: `Backend/sms-backend/src/services/people/admission_service.py`)
- Admissions → Fee management: sets up fees (evidence: `Backend/sms-backend/src/services/people/admission_service.py`)
- Enrollment service → Fee management: uses fee service (evidence: `Backend/sms-backend/src/services/academics/class_enrollment_service.py`)
- Fee management → Fee ledger: calculates balances (evidence: `Backend/sms-backend/src/services/finance/fee_service.py`)
- Communications → Notification delivery: dispatches alerts (evidence: `Backend/sms-backend/src/services/communication/communication_service.py`)
- Database sessions → School records: persists records
- School users → Reporting: request reports
- School users → File management: upload files
