Complete Healthcare Management (Patient, OPD, IPD, Rx, Lab) in Flutter Firebase App for iOS Android and Web
- If you like this project, please consider giving it a star (*) and follow me at GitHub & YouTube.
Elish Healthcare Management System App
Manage OPD, IPD, Pathology, WebMD, Rx, Patient Appointments
Due to current Covid-19 situation,
Patient's private data is not stored in app and location tracing functionality is not available with out government/authorities approval.
This project is a community version and is absolutely free for private use.
click here for Demo & Video tutorials
Frontend: Flutter
Backend:Google Firestore/Firebase
Messages: LOOM SDK
WebView: loom-app (using Angular version
- Vaccine Distribution App
- Pandemic Contact Tracing, Visitor Management, Mobile Assets/Employee Attendance App
- Store millions of records with lightening fast data retrieval
- hands free /voice activated typing
- Secured App (Role based access with Admin panel)
- Local dictionary based auto-completion
- Global dictionary based auto-completion/auto-sync (Pro)
- GBs of pictures, documents, Lab reports, Receipts (Pro)
- Self learning (auto complete) data entry (Pro)
- Social authentication (Pro)
- SMS, EMAIL, WhatsAPP API (Pro)
- Install Flutter environment
- Download This GitHub repository
- install Flutter packages *pub get) and Flutter web -> Flutter create .
- Setup firebase account/project
- Copy Firebase Project Config settings and replace variable firebaseConfig at src/web/index.html
- enable Firebase social authentications
- update Firebase Rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /roles/{document} {
// fix this, anyone who is logged in, can read these document & passwords
// allow read: if isSignedIn();
allow read, write: if false;
}
match /users/{document} {
allow create: if true;
allow read : if isSignedIn() && (isDocOwner() || isAdmin());
allow update: if isSignedIn() && isDocOwner() && onlyContentChanged();
allow update, delete: if isAdmin();
}
match /person/{document=**} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Vaccine/{doc=**} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/OPD/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Lab/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Rx/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Messages/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /appointments/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /records/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
}
match /vaccine/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
}
match /purchase/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /msr/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /vendor/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /warehouse/{document} {
allow create: if true;
allow read: if isSignedIn()
allow update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /item/{document} {
allow create: if true;
allow read: if isSignedIn()
allow update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
// helper functions
function isSignedIn() {
return request.auth.uid != null;
}
function onlyContentChanged() {
return request.resource.data.role == resource.data.role;
// make sure user is not signing in with any role or changin his role during update
}
function isDocOwner() {
return request.auth.uid == resource.data.author;
}
// function isDocCreater() {
// return request.auth.uid == request.resource.data.author;
// }
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "admin";
}
// function isEmployee() {
// return get(/databases/$(database)/documents/settings/$(request.auth.uid)).data.role == "employee";
// }
}
}