| Item | Details |
|---|
| Project Title | Doctor Appointment – ASP.NET MVC (C#) + SQLite |
| One-line Summary | Web app to browse doctors, view availability, and book/reschedule/cancel appointments with email/SMS-style notifications and role-based access. |
| Tech Stack | Frontend: Razor Views, Bootstrap/Tailwind, jQuery/Fetch • Backend: ASP.NET MVC 5/ASP.NET Core MVC, C# • ORM: Entity Framework (Core) • DB: SQLite • Auth: ASP.NET Identity • Build/Deploy: dotnet CLI, IIS/Kestrel |
| Core Features | Patient self-service booking • Doctor schedule management (time slots, breaks, vacations) • Reschedule/cancel with policy windows • Specialty & location filtering • Appointment states (Pending/Confirmed/Completed/Cancelled/No-show) • Email notifications (e.g., SMTP/SendGrid-ready) • Admin panel (users, doctors, specialties, reports). |
| Roles & Permissions | Patient: register, manage profile, book/reschedule/cancel, view history • Doctor: manage availability, confirm/complete visits, notes • Admin: CRUD on doctors, specialties, clinics, users; view reports & audit. |
| Data Model (SQLite) | User(Id, Email, PasswordHash, Role) • Patient(Id, UserId, Name, DOB, Phone) • Doctor(Id, UserId, Name, SpecialtyId, ClinicId, Bio) • Specialty(Id, Name) • Clinic(Id, Name, Address, TimeZone) • AvailabilitySlot(Id, DoctorId, StartUtc, EndUtc, IsRecurring, RecurrenceRule) • Appointment(Id, PatientId, DoctorId, StartUtc, EndUtc, Status, Reason, Notes, CreatedAtUtc) • AuditLog(Id, UserId, Action, Entity, EntityId, TimestampUtc). |
| Scheduling Logic | Generates “bookable” slots from AvailabilitySlot minus overlaps (existing appointments, breaks, vacations). Enforces buffer times, clinic hours, lead/cancel windows, and prevents double-booking with DB transactions + unique index on (DoctorId, StartUtc). |
| Controllers (Examples) | DoctorsController (index, details, search) • AppointmentsController (create, confirm, reschedule, cancel, my-appointments) • AvailabilityController (CRUD for doctors) • AdminController (users, doctors, specialties, reports). |
| Example Routes | GET /doctors?specialty=cardiology&city=… • GET /doctors/{id} • GET /appointments/new?doctorId=&date= • POST /appointments • POST /appointments/{id}/reschedule • POST /appointments/{id}/cancel • GET /account/login |
| Validation & UX | Client + server validation (DataAnnotations) • Disabled past dates • Time-zone aware date pickers • Conflict checks on submit • Toasts for success/errors • Accessible forms & keyboard navigation. |
| Security | ASP.NET Identity with salted hashes • Role-based authorization ([Authorize(Roles=…)]) • Anti-forgery tokens • Parameterized queries via EF • Output encoding to prevent XSS • Audit logging for admin/doctor actions. |
| Notifications | On create/reschedule/cancel: send confirmation emails (templated) and calendar .ics attachment; optional reminder (e.g., 24h before). |
| Reports | Daily/weekly appointments by doctor/clinic • No-show rate • Utilization of time slots • Export CSV. |
| Performance | SQLite with indexes on Appointment(DoctorId, StartUtc), AvailabilitySlot(DoctorId, StartUtc) • Async EF calls • Pagination on listings • Caching static lookups (Specialties). |
| Testing | Unit tests for scheduling & conflicts • Integration tests for booking flow • In-memory SQLite for tests • UI smoke tests (Playwright/Selenium optional). |
| Setup (Dev) | dotnet new mvc → add EF Core + SQLite packages → dotnet ef migrations add Init → dotnet ef database update → dotnet run. Seed admin, sample doctors, specialties. |
| Stretch Goals | Patient intake forms & file uploads • Telemedicine meeting links • Insurance/billing codes • Waitlist & auto-fill cancellations • Doctor-defined appointment types (durations). |