Skip to content

xinzzu/Hospital-Reservation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

34 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ₯ Hospital Queue Reservation System

A web-based hospital queue reservation system that allows patients to search for doctors, make reservations, and receive digital tickets with QR codes. Features a complete FHIR-based patient health record management system.

Version License

🎯 Key Features

  • βœ… Register & Login with JWT authentication
  • βœ… Patient Dashboard with health summary & hospital information
  • βœ… Doctor Search by name/specialization
  • βœ… Doctor Detail with practice schedule
  • βœ… Online Reservation with schedule validation
  • βœ… Digital Ticket with QR code
  • βœ… Status Monitoring for real-time reservation tracking
  • βœ… Admin Dashboard for hospital staff
  • βœ… Admin Reservation Detail with full information
  • βœ… FHIR-based Patient Health Records (Conditions, Observations, Medications, Allergies)
  • βœ… Lab Results with interpretation badges (Normal, High, Low, Critical)
  • βœ… Prescriptions with dosage, frequency, and dispensing info
  • βœ… Medical Records with diagnosis history and severity tracking
  • βœ… Allergy Management with criticality levels and reaction details

πŸ› οΈ Tech Stack

Layer Technology
Frontend Next.js 14 (App Router) + Tailwind CSS + Zustand
Backend Go (Fiber framework)
Database PostgreSQL 15
Container Docker + Docker Compose
Auth JWT
Health Standard FHIR (Fast Healthcare Interoperability Resources)

πŸ“ Directory Structure

hospital-reservation/
β”œβ”€β”€ backend/                     # Golang Fiber Backend
β”‚   β”œβ”€β”€ cmd/server/              # Entry point
β”‚   β”œβ”€β”€ internal/
β”‚   β”‚   β”œβ”€β”€ config/              # Configuration
β”‚   β”‚   β”œβ”€β”€ database/            # Database connection
β”‚   β”‚   β”œβ”€β”€ handlers/            # HTTP handlers
β”‚   β”‚   β”œβ”€β”€ middleware/          # JWT middleware
β”‚   β”‚   β”œβ”€β”€ models/              # Data models (FHIR + Reservation)
β”‚   β”‚   β”œβ”€β”€ repository/          # Database queries
β”‚   β”‚   └── services/            # Business logic
β”‚   β”œβ”€β”€ migrations/              # SQL migrations
β”‚   β”œβ”€β”€ scripts/                 # Utility scripts
β”‚   └── Dockerfile
β”‚
β”œβ”€β”€ frontend/                    # Next.js Frontend
β”‚   β”œβ”€β”€ app/                     # App Router pages
β”‚   β”‚   β”œβ”€β”€ patient/             # Patient pages
β”‚   β”‚   β”‚   β”œβ”€β”€ dashboard/       # Health summary dashboard
β”‚   β”‚   β”‚   β”œβ”€β”€ appointments/    # Reservation list with status filter
β”‚   β”‚   β”‚   β”œβ”€β”€ lab-results/     # Lab results with category filter
β”‚   β”‚   β”‚   β”œβ”€β”€ prescriptions/   # Medication prescriptions
β”‚   β”‚   β”‚   β”œβ”€β”€ records/         # Medical records / conditions
β”‚   β”‚   β”‚   β”œβ”€β”€ allergies/       # Allergy data
β”‚   β”‚   β”‚   └── profile/         # User profile management
β”‚   β”‚   β”œβ”€β”€ admin/               # Admin pages
β”‚   β”‚   └── doctors/             # Doctor listing & detail
β”‚   β”œβ”€β”€ components/              # React components
β”‚   β”‚   └── patient/             # Patient-specific components
β”‚   β”œβ”€β”€ store/                   # Zustand stores
β”‚   β”œβ”€β”€ lib/                     # API utilities (axios client)
β”‚   └── Dockerfile
β”‚
β”œβ”€β”€ docs/                        # Documentation
β”œβ”€β”€ design-system/               # Design system assets
β”œβ”€β”€ docker-compose.yml            # Docker Compose
β”œβ”€β”€ tests/                       # Test files
β”œβ”€β”€ README.md                    # This file
└── .env.example                 # Environment template

πŸš€ Quick Start

Prerequisites

Option 1: Docker (Recommended)

# Clone repository
git clone <repository-url>
cd hospital-reservation

# Start all services
docker-compose up -d

# Or use the run script (Windows)
run.bat

Option 2: Manual Setup

Database Setup

# Create database
psql -U postgres -c "CREATE DATABASE hospital_db;"
psql -U postgres -d hospital_db -f backend/scripts/init_db.sql
psql -U postgres -d hospital_db -f backend/migrations/001_init.sql
psql -U postgres -d hospital_db -f backend/migrations/002_fhir_tables.sql

Backend

cd backend
go mod download
go run cmd/server/main.go

Frontend

cd frontend
npm install
npm run dev

🌐 Application Access

Service URL
Frontend http://localhost:3000
Backend API http://localhost:8080
Health Check http://localhost:8080/health

πŸ“‘ API Endpoints

Authentication

Method Endpoint Description
POST /api/auth/register Register new patient
POST /api/auth/login Login, return JWT token
GET /api/auth/me Get current user profile
POST /api/auth/forgot-password Request password reset
POST /api/auth/reset-password Reset password with token

Hospital

Method Endpoint Description
GET /api/hospital/info Get hospital general information

Doctors

Method Endpoint Description
GET /api/doctors List all doctors (+ query: ?search=&specialization=)
GET /api/doctors/:id Doctor detail with schedules
GET /api/doctors/:id/schedules Doctor schedules by date
GET /api/doctors/specializations List all specializations

Reservations

Method Endpoint Description
POST /api/reservations Create new reservation
GET /api/reservations/me Patient's reservation history
GET /api/reservations/:code Get ticket by queue_code
PATCH /api/reservations/:code/status Update status (admin)

FHIR Patient Health Records

Method Endpoint Description
GET /api/fhir/me Get patient's full health summary
GET /api/fhir/conditions Get patient's conditions/diagnoses
POST /api/fhir/conditions Create new condition
GET /api/fhir/observations Get observations (+ query: ?category=laboratory|vital-signs|imaging)
GET /api/fhir/observations/:category Get observations by category
POST /api/fhir/observations Create new observation
GET /api/fhir/medications Get medication requests/prescriptions
POST /api/fhir/medications Create new medication request
GET /api/fhir/allergies Get allergy intolerances
POST /api/fhir/allergies Create new allergy record
GET /api/fhir/Patient/:id Get patient by ID (FHIR standard)
PUT /api/fhir/Patient/:id Update patient (FHIR standard)

Admin API

Method Endpoint Description
GET /api/admin/stats Dashboard statistics
GET /api/admin/reservations List all reservations (filterable)
GET /api/admin/reservations/:id Reservation detail
GET /api/admin/doctors List all doctors
PUT /api/admin/doctors/:id Update doctor
DELETE /api/admin/doctors/:id Delete doctor
POST /api/admin/doctors/:id/schedules Add doctor schedule
PUT /api/admin/schedules/:id Update schedule
DELETE /api/admin/schedules/:id Delete schedule
GET /api/admin/patients List all patients
GET /api/admin/patients/:id Patient detail
PUT /api/admin/patients/:id Update patient
POST /api/admin/patients/:id/deactivate Deactivate patient
GET /api/admin/patients/:id/ehr Get full EHR for patient
POST /api/admin/patients/:id/conditions Create condition for patient
POST /api/admin/patients/:id/observations Create observation for patient
POST /api/admin/patients/:id/medications Create medication for patient
POST /api/admin/patients/:id/allergies Create allergy for patient
PATCH /api/admin/medications/:id/status Update medication status
PATCH /api/admin/allergies/:id/status Update allergy status

πŸ“‹ Queue Code Format

Format: [DOCTOR-CODE][DATE][NUMBER]

Example: DR01-100524-007

  • DR01 β€” Doctor code (2 digits)
  • 100524 β€” Reservation date (DDMMYY)
  • 007 β€” Queue number (3 digits)

πŸ‘€ Default Test Accounts

Admin Account

Email Password Role
admin@medicare.co.id admin123 Administrator

Access: http://localhost:3000/admin/login

Doctor Accounts

Email Password Role
sarah@hospital.com doctor123 Doctor
ahmad@hospital.com doctor123 Doctor
lisa@hospital.com doctor123 Doctor

Patient Account

πŸ’‘ Patients can register directly through the UI at /register

πŸ—„οΈ Database Schema

Tables

Core Tables

  • users β€” Patient and doctor data
  • doctors β€” Doctor profiles
  • schedules β€” Doctor practice schedules
  • reservations β€” Reservation data with queue code
  • hospital_info β€” Hospital information
  • password_resets β€” Password reset tokens

FHIR Tables

  • fhir_patients β€” FHIR patient extension (links to users)
  • fhir_conditions β€” Diagnosis/conditions (ICD-10 coded)
  • fhir_observations β€” Lab results, vitals, imaging (LOINC coded)
  • fhir_medication_requests β€” Prescriptions and medication orders
  • fhir_allergies β€” Allergy and intolerance records
  • fhir_audit_log β€” FHIR resource audit trail

ER Diagram Concept

users (1) ──────────< (N) reservations
  β”‚                       β”‚
  β”‚                       β–Ό
  β”‚                   doctors (1) ────< schedules
  β”‚
  └───> fhir_patients (1) ────< fhir_conditions
                            β”œβ”€β”€β”€β”€< fhir_observations
                            β”œβ”€β”€β”€β”€< fhir_medication_requests
                            └────< fhir_allergies

🎨 Frontend Architecture

Patient Pages

All patient pages follow a consistent pattern:

Page Route Description
Dashboard /patient/dashboard Health summary with counts
Appointments /patient/appointments Reservation list with status filter (Semua, Menunggu, Dipanggil, Selesai, Dibatalkan)
Lab Results /patient/lab-results Observations with category filter (Semua, Laboratory, Vital Signs, Imaging)
Prescriptions /patient/prescriptions Medication requests with status badges
Records /patient/records Medical conditions/diagnoses
Allergies /patient/allergies Allergy data with criticality levels
Profile /patient/profile Account & health info management

Consistent UI Patterns

  • Loading state: Skeleton pulse animation in card container
  • Error state: Red error message in centered card
  • Empty state: Gray icon + contextual message (e.g., "Belum ada hasil laboratorium")
  • Data list: White card with divide-y borders, px-6 py-4 per item
  • Status badges: bg-<color>-100 text-<color>-800 with rounded-full pills
  • Filter buttons: Teal active state (bg-teal-600), gray inactive with hover
  • CTA buttons: Teal primary (bg-teal-600 hover:bg-teal-700)

API Response Handling

All patient pages use consistent fetch pattern:

// 1. Set loading + clear error
setLoading(true);
setError(null);

// 2. Fetch data
const response = await api.getData();
const data = response?.data;

// 3. Handle response
if (Array.isArray(data) && data.length > 0) {
  setData(data);        // Show data list
} else {
  setData([]);          // Show empty state (no error)
}

// 4. Handle error
catch (err) {
  setError('Gagal memuat...');  // Show error state
}

πŸ”§ Development

Backend (Go)

cd backend

# Run
go run cmd/server/main.go

# Build
go build -o server ./cmd/server

# Test
go test ./...

Frontend (Next.js)

cd frontend

# Development
npm run dev

# Build
npm run build

# Lint
npm run lint

Database Commands

# Connect to PostgreSQL
psql -U hospital_user -d hospital_db

# Run migrations
psql -U hospital_user -d hospital_db -f backend/migrations/001_init.sql
psql -U hospital_user -d hospital_db -f backend/migrations/002_fhir_tables.sql

πŸ› Troubleshooting

Docker Issues

# Check Docker status
docker info

# View logs
docker-compose logs -f

# Restart services
docker-compose restart

# Clean rebuild
docker-compose down -v
docker-compose up --build -d

Common Issues

  1. Port already in use: Change port mapping in docker-compose.yml
  2. Database connection failed: Ensure PostgreSQL is running and credentials are correct
  3. Frontend can't connect to API: Check NEXT_PUBLIC_API_URL environment variable
  4. 500 error on FHIR endpoints: Check backend logs β€” may be SQL scan type mismatch (DECIMAL β†’ *float64)

πŸ“„ License

MIT License - see LICENSE file for details.


Made with ❀️ for Hospital Queue Reservation System

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors