/Healthcare-Management-App-Flutter_Firebase

Complete Healthcare Management (Patient, OPD, IPD, Rx, Lab) Flutter Firebase App for iOS, Android, Web & Desktop

Primary LanguageDartMIT LicenseMIT

Flutter FireBase Healthcare Management App

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 HMS

Elish Healthcare Management System App

Objective

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.

Getting Started

This project is a community version and is absolutely free for private use.
click here for Demo & Video tutorials

Technologies

Frontend: Flutter
Backend:Google Firestore/Firebase
Messages: LOOM SDK
WebView: loom-app (using Angular version

Related Apps

Features

  • 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)
send email to info@elishcosulting.com for Pro version enquiries.

Product Images

Pic 1 Pic 2 Pic 3 Pic 4

How to Install

  • 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";
        // }
        }
        }
    

Pic 4 Pic 4 Pic 4