A full-stack Appointment Booking System for Umurenge (Sector) services in Rwanda, enabling citizens to book appointments via USSD and web, while providing sector staff with dashboards, analytics, and digital queue management.
# ⚙️ Umurenge Appointment System – Backend API
## 📌 Overview
This is the backend service for the **Umurenge Appointment Booking System**, built with **NestJS** and **PostgreSQL**. It powers appointment booking via USSD and web platforms, manages sector services, and provides APIs for the admin dashboard.
---
## 🚀 Features
### 📅 Appointment Management
* Create and manage appointments
* Queue number generation
* Appointment status tracking (booked, served, cancelled, missed)
### 📱 USSD Integration
* USSD flow handling (*123#)
* Session management
* Service selection and booking via basic phones
### 👤 User & Staff Management
* Role-based access (Admin, Staff, Super Admin)
* Staff assignment to services
* Availability tracking
### 🧾 Services Management
* Sector-based service listing
* Service provider assignment
* Daily appointment limits
### 🔔 Notifications
* Sector announcements
* Staff availability updates
### 💰 Monetization
* Subscription plans (Free, Basic, Premium)
* Payment tracking (Mobile Money / Bank)
### 🆘 Support System
* Ticket creation and management
* Admin/staff responses
---
## 🧱 Tech Stack
* **NestJS**
* **Sequelize ORM**
* **PostgreSQL**
* Class Validator & DTOs
---
## 📁 Project Structure
```
src/
├── modules/
│ ├── users/
│ ├── staff/
│ ├── districts/
│ ├── sectors/
│ ├── services/
│ ├── appointments/
│ ├── ussd/
│ ├── notifications/
│ ├── payments/
│ ├── subscriptions/
│ └── support/
│
├── config/
├── database/
└── main.ts
```
---
## 🛠️ Getting Started
### 1. Install Dependencies
```bash
npm install
```
---
### 2. Configure Environment
Create `.env` file:
```env
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASS=your_password
DB_NAME=umurenge_db
```
---
### 3. Run the Server
```bash
npm run start:dev
```
Server runs on:
```
localhost
```
---
## 📡 API Endpoints (Examples)
```
POST /ussd → Handle USSD requests
GET /appointments → List appointments
POS …