Online Clinic Management System

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Page 01

ONLINE CLINIC MANAGEMENT SYSTEM

A PROJECT REPORT AND DOCUMENTATION

Submitted by
SUBHODIP CHOWDHURY (BWU/BCA/18/088)
DIPTA PAUL (BWU/BCA/18/078)
SURYA KARMAKAR (BWU/BCA/18/110)
NISHAN SARKAR (BWU/BCA/18/153)
ANIKET DAS (BWU/BCA/18/095)
KHOKAN BARMAN (BWU/BCA/18/166)

in partial fulfillment for the award of the degree


of

BACHELOR OF COMPUTER APPLICATION


in

COMPUTATIONAL APPLICATION

BRAINWARE UNIVERSITY

398, Ramkrishnapur Road, Barasat, North 24 Parganas, Kolkata - 700 125


Page 02

BRAINWARE UNIVERSITY
398, Ramkrishnapur Road, Barasat, North 24 Parganas, Kolkata - 700 125

DEPARTMENT Of Computational Science

BONAFIDE CERTIFICATE

Certified that this project report “ONLINE CLINIC” is the bonafide work of “SUBHODIP
CHOWDHURY, DIPTA PAUL, NISHAN SARKAR, SURYA KARMAKAR, ANIKET DAS, KHOKAN
BARMAN ” who carried out the project work under my supervision.

DR. SANDIP ROY DR. MAUPARNA NANDAN


SIGNATURE SIGNATURE

DR. SANDIP ROY DR. MAUPARNA NANDAN


HEAD OF THE DEPARTMENT SUPERVISOR
TABLE OF CONTENTS
Page 03

Chapter Title Page No.

ABSTRACT Iv

INTRODUCTION Iv
1

[BASICS]
OBJECTIVE V

REQUIREMENTS VII

DIAGRAMS VIII,IX,X,XI
2

[DFD]
GNATT CHART XII

3
SCREENSHOTS & CODE XIII-XXIV
[ SCREENSHOTS &
SOURCE CODE ]

TESTING XXIV

[CONCLUSION & FUTURE SCOPE XXV


REFERENCES]

REFERENCES XXV
Page 04

Chapter 1 [BASICS]

ABSTRACT

This system is easy and simple to use by the user. This system is able to
check the inventory for the medicine in the clinic. . If any medicine will be
out of stock then that particular medicine name will be highlighted with red
color. The target user for this system is staff of the clinic, doctor and also
the management. Other than that, the system is user friendly and it can help
the clinic to manage their activity. Overall this system is able to support the
daily clinic operation based on evaluation from real user and the system is
able to perform the task correctly. The patient gets the treatment and data
about the treatment is recorded into the system. The system has few
modules such as patient registration, medicine registration, disease
registration and treatment history, patient record search, appointment and
reporting.

INTRODUCTION

Clinic Management System is developed to support and automate the clinic


daily operation. Clinic Management System is a system that can help the
clinic to manage their daily activity. This system will involve all the clinic
operation starting from patient registration until billing the patient. Here the
patients can register through online and get their appointment. This system
help reduce the problems occur when using the manual system. The
important thing is it will become easier for the data record and retrieval.
This software also stores all the patient details, patients lab reports, bill
calculation, billing, monthly reports, daily reports. This system enables
doctors and clinic assistant to manage patient records, medicine stock, and
appointment and produce reports. This system will be able to generate
report regarding the clinic operation. User can enter the patient details.
what ever treatment he has taken will also be saved in the database. Other
than that, the system is user friendly and it can help the clinic to manage
their activity. For example, the number of patient per day and total
Page 01
Page 05

collection per day. This Clinic Management System Project will keep track
of each and every medicine which is available in medicine store.

OBJECTIVE

● To promote the benefit of the patients of the Health Centre - without


distinction of gender, race, colour or political, religious or other
opinions or characteristics of individuals - by encouraging
development and quality of health promotion and health care
services

● To achieve this aim by liaising with the doctors and staff, other
community health workers, and other persons or organisations
concerned with health care.

● The Group will NOT represent any patient with a complaint


concerning medical treatment received from the Health Centre.
There is a standard procedure for this and the procedure is available
from the Practice Manager.

● The Group is 'non-party in politics' and 'non-sectarian in religion'. It


will, at all times, respect diversity and will be committed to the
principles contained within the Equality Act.

● To offer patients' perspective on services provided.

● To provide practical support and to help and encourage patients to


take more responsibility for their own health.

● To contribute to the continuous improvement of services.

● To foster improved communication between the Practice and its


patients, and to break down any barriers.
Page 06

● To assist in implementing any changes.

● To encourage the development of voluntary community care,


especially for the housebound and the elderly.

● Where appropriate, to act as a 'community pressure group in order


to bring local needs to the attention of health and/or local
authorities.

● To help patients to know what services are available to them.

● To undertake fundraising to enable the provision of extra facilities for


the practice and its patients.

● The Group has the power to affiliate to:


- The National Association of Patient Participation Groups (NAPP)
- Healthwatch Surrey
- Healthwatch and Public Involvement Association (HAPIA)
- Ashford and St. Peter's Hospital NHS Foundation Trust

and to other organisations with similar charitable objects.


Page 07

SOFTWARE AND HARDWARE REQUIREMENTS

1. Technology Used: Node.js


2. Framework Used : Express.js
3. Modules Used (dependencies):

 Bcrypt
 cool-ascii-faces
 cors
 dotenv
 ejs
 express
 express-flash
 express-ip
 express-session
 passport
 passport-local
 pg
 pg-hstore
 sequelize

4. Database
The connection of database with the web pages been done using
PostgreSQL.

5. Server : Localhost
Page 08

CHAPTER-2
SDLC Model followed
LEVEL-0 DFD DIAGRAM

MAKE PAYMENT

BOOK APPOINTMENT

APPOINTMENT DETAILS

REGISTRATION REGISTRATION /LOG IN


/LOG IN
USER ONLINE CLINIC DOCTOR
MANAGEMENT
AUTHENTIFICATION SYSTEM
DISPLAY APPOINTMENT SUMMARY

DISPLAY APPOINTMENT DETAILS

PAYMENT MANAGE USER DETAILS & REGISTRATION /LOG IN

CONFERMATION MANAGE DOCTOR DETAILS

ADMIN
Page 09

LEVEL 1 DFD DIAGRAM

VIEW PAYMENT DETAILS


P1

REGISTER / DOCTOR
USER
PAYMENT TABLE LOG IN LOG IN

SEE APPOINTMENT SUMMARY

REGISTRATION/ LOG IN DETAILS LOG IN


TABLE

VIEW APPOINTMENT ADMIN


DETAILS APPOINTMENT
DETAILS

BOOK APPOINTMENT DETAILS

APPOINTMENT CONFIRMED

P3
PAYMENT
Page 10

USER AUTHENTIFICATION

ONLINE CLINIC
MANAGEMENT
SYSTEM

P1.1.1 P1.1.1 P1.1.1


CUSTOMER DOCTORS ADMIN
LOG IN LOG IN LOG IN

Validation of data

P1.1.2 P1.2.2 LATEST USER ID P1.2.1


ACCOUNT Generate ANALYZE
VALIDATION CHECK ACCOUNT User ID LATEST USER
DATA ID

ACCOUNT DATA WITH


USER ID

P1.2.3
USER ID
VALIDATION

VALIDATED ACCOUNT

CUSTOMER
& USER RECORD
Page 11

System Hierarchical Diagram

Medex Clinic

Admin Panel CLIENTS PANEL

DOCTORS’ PANEL USER PANEL

Menu Bar

HOME ABOUT US CONTACT US REGISTER LOG IN SERVICES DOCTORS

Log In

Description USERS New Users Existing Users

Successfully
Registered

Payment

Payment Payment failed


Done
Go to home page
Page 12

Gnatt Chart
Page 13
Chapter 3
Screenshots:
Front Page:

Sign in Page:
Page 14

Doctors Panel:

Doctor’s Panel:
Page 15

Admin Panel:

Admin Panel Doctors


Page 16

Admin Panel Payment

Admin Panel Income


Page 17

Payment Gateway:

Payment Invoice Download :


Page 18

Web application Source Code:

const express = require("express");


const { pool } = require("./dbConfig");
const bcrypt = require("bcrypt");
const passport = require("passport");
const flash = require("express-flash");
const session = require("express-session");
require("dotenv").config();
const app = express();
const expressip = require("express-ip");
var url = require('url');
var cors = require('cors');
const PORT = process.env.PORT || 3000;
app.use(expressip().getIpInfoMiddleware);
const initializePassport = require("./passportConfig");
initializePassport(passport);
app.use(express.static(__dirname + '/views'));
app.use(cors());
// Middleware
// Parses details from a form
app.use(express.urlencoded({ extended: false }));
app.set("view engine", "ejs");
app.use(
session({
// Key we want to keep secret which will encrypt all of our information
secret: process.env.SESSION_SECRET,
// Should we resave our session variables if nothing has changes which we dont
resave: false,
// Save empty value if there is no vaue which we do not want to do
saveUninitialized: false
})
);
// Funtion inside passport which initializes passport
app.use(passport.initialize());
// Store our variables to be persisted across the whole session. Works with app.use(Session) above
app.use(passport.session());
app.use(flash());
var r_code;
app.get("/", (req, res) => {
res.render("index");
});
app.get("/about", (req, res) => {
res.render("about.ejs");
});
app.get("/services", (req, res) => {
res.render("services.ejs");
});
app.get("/doctors", (req, res) => {
res.render("doctors.ejs");
Page 19
});

app.get("/departments", (req, res) => {


res.render("department.ejs");
});
app.get("/pricing", (req, res) => {
res.render("pricing.ejs");
});
app.get("/gallery", (req, res) => {
res.render("gallery.ejs");
});
app.get("/blog", (req, res) => {
res.render("blog.ejs");
});
app.get("/contact", (req, res) => {
res.render("contact.ejs");
});
app.get("/blog-single", (req, res) => {
res.render("blog-single.ejs");
});
app.get("/doctors-panel", checkNotAuthenticated, (req, res) => {
res.render("docpanel.ejs", { user: req.user.name, doctor_id: req.user.id });
});
app.post("/index", async (req, res) => {
//const ipInfo = req.ipInfo;
//var country = `${ipInfo.country}`;

et { first_name, last_name, age, service, doctor_id, phone_no, email, appointment_date,


appointment_time, message } = req.body;
//console.log(first_name, last_name, age, service, doctor_id, phone_no, email, appointment_date,
appointment_time, message);
let errors = [];
if (!first_name || !last_name || !age || !service || !doctor_id || !phone_no || !email || !appointment_date
|| !appointment_time || !message) {
errors.push({ message: "Please enter all fields" });
}
if (errors.length > 0) {
res.render("index", { errors, first_name, last_name, age, service, doctor_id, phone_no, email,
appointment_date, appointment_time, message });
} else{
// Validation passed
pool.query(
`INSERT INTO appointment_booking (first_name, last_name, age, service, doctor_id,
phone_no, email, appointment_date, appointment_time, message )
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
RETURNING id`,
[first_name, last_name, age, service, doctor_id, phone_no, email, appointment_date,
appointment_time, message],
(err, results) => {
if (err) {
throw err;
Page 20
}
res.redirect("/");
}
);
}
});
app.get("/doctors-panel/register", checkAuthenticated, (req, res) => {
res.render("register.ejs");
});
app.get("/doctors-panel/login", checkAuthenticated, (req, res) => { // flash sets a messages variable.
passport sets the error message
console.log(req.session.flash.error);
res.render("login.ejs");
});
app.get('/doctors-panel/getdata', checkNotAuthenticated1, function(req, res) {
var data = url.parse(req.url, true);
data = data.query;
date = data.date;
time = data.time;
time = time+ ":00:00";
console.log(date);
var doctor_id = req.user.id;
console.log(doctor_id);
pool.query(
`SELECT * FROM appointment_booking
WHERE doctor_id = ($1) and appointment_date = ($2) and appointment_time = ($3)
ORDER BY id`,
[doctor_id, date, time],
// WHERE id = 1`,
(err, results) => {
if (err) {
throw err;
}
let data = results.rows;

res.send(data);
}
);
});
app.get('/doctors-panel/getdata/count-total', checkNotAuthenticated1, function(req, res) {
var data = url.parse(req.url, true);
data = data.query;
date = data.date;
var doctor_id = req.user.id;
console.log(doctor_id);
pool.query(
`SELECT count(appointment_booking.id), users.fees, count(appointment_booking.id)*users.fees
as total
FROM appointment_booking, users
WHERE appointment_booking.doctor_id = users.id and users.id = ($1) and appointment_date =
($2)
Page 21

and appointment_booking.status = 'Done'


group by (users.id)`,
[doctor_id, date],
// WHERE id = 1`,

(err, results) => {


if (err) {
throw err;
}
let data = results.rows;

res.send(data);
}
);
});
app.get("/doctors-panel/status", async (req, res) => {

var data = url.parse(req.url, true);


data = data.query;
var status = data.set_status;

if(status == 'done') {
status = 'Done';
}
else if(status == 'absent') {
status = 'Absent';
}
else {
status = 'null';
}

var patient_id = data.patient_id;

pool.query(
`UPDATE appointment_booking
SET status = ($1)
WHERE id = ($2)`,
[status, patient_id],
(err, results) => {
if (err) {
throw err;
}
//res.redirect("/doctors-panel");
res.send();
}
);
});

app.get("/doctors-panel/logout", (req, res) => {


req.logout();
Page 22
res.redirect("/");
});

app.post("/doctors-panel/register", async (req, res) => {


let { name, fees, email, password, password2 } = req.body;

let errors = [];

console.log({
name,
fees,
email,
password,
password2
});

if (!name || !fees || !email || !password || !password2) {


errors.push({ message: "Please enter all fields" });
}

if (password.length < 6) {
errors.push({ message: "Password must be a least 6 characters long" });
}

if (password !== password2) {


errors.push({ message: "Passwords do not match" });
}

if (errors.length > 0) {
res.render("register", { errors, name, fess, email, password, password2 });
} else {
hashedPassword = await bcrypt.hash(password, 10);
console.log(hashedPassword);
// Validation passed
pool.query(
`SELECT * FROM users
WHERE email = $1`,
[email],
(err, results) => {
if (err) {
console.log(err);
}
console.log(results.rows);

if (results.rows.length > 0) {
return res.render("register", {
message: "Email already registered"
});
} else {
pool.query(
Page 23
`INSERT INTO users (name, fees, email, password)
VALUES ($1, $2, $3, $4)
RETURNING id, password`,
[name, fees, email, hashedPassword],
(err, results) => {
if (err) {
throw err;
}
console.log(results.rows);
req.flash("success_msg", "You are now registered. Please log in");
res.redirect("/doctors-panel/login");
}
);
}
}
);
}
});
app.post(
"/doctors-panel/login",
passport.authenticate("local", {
successRedirect: "/doctors-panel",
failureRedirect: "/doctors-panel/login",
failureFlash: true
})
);
function checkAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return res.redirect("/doctors-panel");
}
next();
}
function checkNotAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/doctors-panel/login");
}
function checkNotAuthenticated1(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect("/doctors-panel/login");
}
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
app.get('/index/getdoctors', function(req, res) {
pool.query(
`SELECT id, name, fees, email FROM users
WHERE status = 'Activated'
Page 24
order by name;`,
(err, results) => {
if (err) {
throw err;
}
let data = results.rows;
res.send(data) } );
});

Chapter 4
Testing
Alpha Testing :
Alpha Testing is a type of software testing performed to identify bugs before
releasing the software product to the real users or public. It is a type
of acceptance testing. The main objective of alpha testing is to refine the software
product by finding and fixing the bugs that were not discovered through previous
tests.

Beta Testing :
Beta testing starts right after Alpha testing. Product's beta version is ready to be tested.
User manuals are ready and published containing all the list of known issues. Maintaining a
log of bugs, feedback using a tool which can help in documentation as well.

FUTURE SCOPE

FUTURE SCOPE: Their number might differ depending on the clinic needs, however, it
usually includes some basic Clinic information system modules.

Client management

It is used to control patient flow. It can be used to register them, get the data of the
patients’ health condition, view the treatment and check the medical history and reports.

Facility management
The facility management module is responsible for tracking and maintaining the room
availability, the occupancy status as well as various kinds of administrative
documentation.
Page 25

Staff Management
Staff management module provides the human resources administration. It updates the
job description of employees, updates the hospital structure, tracks the recruiting records.

Medicine management
Medicine management module contains the list of drugs that usually used for the specific
treatment. It keeps records of every patient’ drugs used during their treatment.

Laboratory and tests management


Lab management module shows the test results of the particular patient. The lab data can
be viewed by the staff and generated for the patients’ reports. It is usually integrated with
other hospital information system modules for the better overall functionality of the
system.

REFERENCES

List of References –The reference material should be listed in the alphabetical order of the first
author. The name of the author/authors should be immediately followed by the year and other
details.

A typical illustrative list given below relates to the citation example quoted above.

REFERENCES

1. www.W3School.com

2. www.stackoverflow.com

3. www.google.com

4. www.youtube.com

Thank You

You might also like