GithubHelp home page GithubHelp logo

coronasafe / care Goto Github PK

View Code? Open in Web Editor NEW
206.0 16.0 248.0 22.77 MB

Care is a Digital Public Good enabling TeleICU & Decentralised Administration of Healthcare Capacity across States.

Home Page: https://careapi.ohc.network/swagger

License: MIT License

Python 97.62% CSS 0.04% JavaScript 0.03% HTML 1.94% Shell 0.20% Dockerfile 0.08% SCSS 0.02% Makefile 0.06% Procfile 0.01%
covid-19 sustainable-development-goals public-goods digital-public-goods

care's Introduction

Care Backend

care logo

Deploy Care License: MIT Cookiecutter Django Code style: black Chat Open in Dev Containers

This is the backend for care. an open source platform for managing patients, health workers, and hospitals.

Features

Care backend makes the following features possible:

  • Realtime Analytics of Beds, ICUs, Ventilators, Oxygen and other resources in hospitals
  • Facility Management with Inventory Monitoring
  • Integrated Tele-medicine & Triage
  • Patient Management and Consultation History
  • Realtime video feed and vitals monitoring of patients
  • Clinical Data Visualizations.

Getting Started

Docs and Guides

You can find the docs at https://care-be-docs.coronasafe.network

Staging Deployments

Dev and staging instances for testing are automatically deployed on every commit to the develop and staging branches. The staging instances are available at:

Self hosting

Compose

docker compose is the easiest way to get started with care. put the required environment variables in a .env file and run:

make up

to load dummy data for testing run:

make load-dummy-data

Note

If you are unable to compose up care in windows, ensure line endings are set to LF (docker-entrypoint.sh won't work with CRLF line endings).

git config core.autocrlf false

Docker

Prebuilt docker images for server deployments are available on ghcr

Contributing

We welcome contributions from everyone. Please read our contributing guidelines to get started.

care's People

Contributors

abhiabhi94 avatar abinmn avatar aeswibon avatar afzalibnsh avatar agzuniverse avatar anroopak avatar apurva-nagar avatar ashesh3 avatar aswinmohanme avatar biswaz avatar bodhish avatar dependabot[bot] avatar divyagar avatar farisshajahan avatar gigincg avatar gokulramghv avatar iamsdas avatar khavinshankar avatar marmik2003 avatar mathew-alex avatar muhammed-ajmal avatar pranshu1902 avatar rejuls avatar reshma-t avatar rithviknishad avatar sainak avatar shaileshaanand avatar skks1212 avatar tomahawk-pilot avatar vigneshhari avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

care's Issues

Api Endpoints

create api endpoints with GEt for count of facilities and staff

Add KSDMA logo to footer

Add KSDMA Logo
ksdma

Update footer text:
Corona Care is a part of the Corona Safe Network created as an open source platform by volunteers along with the State Sisaster Management Authority Government of Kerala.

Create an API for capturing patient details

required fields.

  • name: string (hash)
  • age: positve int
  • district_id: District.id
  • panchayat_id: Panchayat.id
  • ward: string ?
  • Have you tavelled to a foreign country?: bool
  • Travelled country: option(string)
  • travel_history_dates: option(date)
  • Are you experiencing any symptoms: bool
  • symptoms: option [check question 9 in pdf]
  • elderly_people_at_home: bool
  • chronic_disease: option[check question 11 in pdf]
  • undergoing_treatment: bool
  • do_you_have_memedicines: bool
  • anyone_with_fever_symptoms_at_home: bool
  • number_of_people_with_fever_symptoms_at_home: positive int
  • anyone_with_fever_symptoms_in_neighbourhood: bool
  • number_of_people_with_fever_symptoms_in_neighbourhood: positive int
  • attended_public_events: bool
  • public_events_attended: optional(string)
  • Add question 20/21

isolation details form.pdf
]

Issue with requirements

After successfully running the command

pip -r requirements.txt

and installing everything successfully. When I try to run a command

python manage.py createsuperuser

I get an error:

ModuleNotFoundError: No module named 'debug_toolbar'

I think we need to add debug_toolbar to requirements.txt somewhere.
Also, the project installed sentry during development, I don't think we need sentry for development.

Generate reports

Report generation triggered in regular intervals or using management commands.

Run aggregation queries for Facilities, doctors, bed counts grouping by district, types (doctor type, fac type).

Store this in a new model called Report, in a json field.

Phase 2

per facility aggregations like by, bed type, doctor type etc should be stored in another table, not report.

unnecessary tests?

test_views.py is testing classes which are commented out in the main file.

from care.users.views import UserRedirectView, UserUpdateView

the following classes have been commented out in the project.

should the tests be removed as well for now?

add google analytics tag at root

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-160173841-21"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-160173841-21'); </script>

Create a model for Ambulance and expose API

Vehicle Details

  • Vehicle Registration Number: string (validation: A-Z and 0-9 (Alpha numeric only))
  • Insurance Valid till: date (validation- year should one of 2020 / 2021 / 2022)
  • Name of Owner: string
  • Cell Number of Owner: number (10 digit mobile number)
  • Smart Phone: bool
  • Primary District Served: District.id
  • Secondary District Served: District.id
  • Third District Served: District.id
  • Oxygen Yes / No
  • Ventilator Yes / No
  • Suction Machine Yes / No
  • Defibrillator Yes / No

Driver Details

Name of Driver 1
Cell Number of Driver 1
Smart Phone Yes / No

Driver Details

Name of Driver 2
Cell Number of Driver 2
Smart Phone Yes / No

Checklist

  • Create the table and organize the data
  • Add a CRUD API for front-end
  • Add an API to get ambulance details given an array of registration number

Superuser creation fails because of null_value in user_type

Stacktrace:

Traceback (most recent call last):
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.NotNullViolation: null value in column "user_type" violates not-null constraint
DETAIL:  Failing row contains (2, argon2$argon2i$v=19$m=512,t=2,p=2$bzJ4OHp4Wk9uQUh3$yh93Cj2/p0dmT..., null, t, yahya31415, , , [email protected], t, t, 2020-03-21 05:49:22.252838+00, null, null, , null, null, null, f).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 30, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 61, in execute
    return super().execute(*args, **options)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 156, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/contrib/auth/models.py", line 162, in create_superuser
    return self._create_user(username, email, password, **extra_fields)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/contrib/auth/models.py", line 145, in _create_user
    user.save(using=self._db)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/contrib/auth/base_user.py", line 66, in save
    super().save(*args, **kwargs)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/base.py", line 741, in save
    force_update=force_update, update_fields=update_fields)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/base.py", line 779, in save_base
    force_update, using, update_fields,
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/base.py", line 870, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/base.py", line 908, in _do_insert
    using=using, raw=raw)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/query.py", line 1186, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py", line 1375, in execute_sql
    cursor.execute(sql, params)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 99, in execute
    return super().execute(sql, params)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/yahya/Developer/care/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: null value in column "user_type" violates not-null constraint
DETAIL:  Failing row contains (2, argon2$argon2i$v=19$m=512,t=2,p=2$bzJ4OHp4Wk9uQUh3$yh93Cj2/p0dmT..., null, t, yahya31415, , , [email protected], t, t, 2020-03-21 05:49:22.252838+00, null, null, , null, null, null, f).

How to recreate

  1. Clone the repo
  2. Install dependencies
  3. Install postgresql and create database care
  4. run python manage.py createsuperuser in venv

Minor corrections on copy

after sign up (faculty admin)

  • add Success Notification: You successfully logged in to the corona care network

  • add the following title

The next step is to register your Hospital into the corona care network and enter details about total capacity of regular beds, ICU beds, and ventilators.

Once you connect your hospital to the corona care network, You will be able to view hospital details using th view hospital button.

create hospital form

  • rename labels on the form as follows
  • Enter the name of your hospital
  • Pick your District
  • Enter your emergency contact mobile number of your hospital

change button text : Add Your Hospital Information

capacity/add form

  • Add the following above the buttons.
  1. Save and Add information about another bed type.
  2. Save the entered information and submit to the network
  3. Cancel
  • The Error message for duplicates should be changed to : The bed type you are trying to add is already been added to the hospital, Please pick a different bed type.

  • Rename the Buttons
    Save & Enter more Information
    Save & Submit
    Cancel

doctor form

  • [] change label to - Area of specialization

Facility Home.

Add all the actions to top right

  • Add a Update hospital information

  • Update Information on hospital bed

  • Update Information on Doctor availability

  • Add a total count of bed and doctors at the top

Sign Up button rendering outside <form> element in signup.html

Signup.html:

<div class="max-w-md mt-8">
  <form class="signup" id="signup_form" method="post" action="">
    {% csrf_token %} {% crispy form %} {% if redirect_field_value %}
    <input
      type="hidden"
      name="{{ redirect_field_name }}"
      value="{{ redirect_field_value }}"
    />
    {% endif %}
    <button class="mt-8 btn btn-primary w-full" type="submit">
      {% trans "Sign Up" %} &raquo;
    </button>
  </form>
</div>

Rendered html:

<div class="max-w-md mt-8">
  <form class="signup" id="signup_form" method="post" action="">
    <input type="hidden" name="csrfmiddlewaretoken" value="obmYDlMRWBCMPcnZPHG8lNzvTOTV3qPr5KuLOr8g3NdsRy8nLeKzGmtJZRvQQtjL" class="w-full block my-1 form-input"> 

 <input type="hidden" name="csrfmiddlewaretoken" value="obmYDlMRWBCMPcnZPHG8lNzvTOTV3qPr5KuLOr8g3NdsRy8nLeKzGmtJZRvQQtjL" class="w-full block my-1 form-input"> <div id="div_id_username" class="form-group"> <label for="id_username" class=" requiredField">
                Username<span class="asteriskField">*</span> </label> <div class=""> <input type="text" name="username" maxlength="150" autofocus="" class="textinput textInput form-control w-full block my-1 form-input" placeholder="Desired Username" required="" id="id_username" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAfBJREFUWAntVk1OwkAUZkoDKza4Utm61iP0AqyIDXahN2BjwiHYGU+gizap4QDuegWN7lyCbMSlCQjU7yO0TOlAi6GwgJc0fT/fzPfmzet0crmD7HsFBAvQbrcrw+Gw5fu+AfOYvgylJ4TwCoVCs1ardYTruqfj8fgV5OUMSVVT93VdP9dAzpVvm5wJHZFbg2LQ2pEYOlZ/oiDvwNcsFoseY4PBwMCrhaeCJyKWZU37KOJcYdi27QdhcuuBIb073BvTNL8ln4NeeR6NRi/wxZKQcGurQs5oNhqLshzVTMBewW/LMU3TTNlO0ieTiStjYhUIyi6DAp0xbEdgTt+LE0aCKQw24U4llsCs4ZRJrYopB6RwqnpA1YQ5NGFZ1YQ41Z5S8IQQdP5laEBRJcD4Vj5DEsW2gE6s6g3d/YP/g+BDnT7GNi2qCjTwGd6riBzHaaCEd3Js01vwCPIbmWBRx1nwAN/1ov+/drgFWIlfKpVukyYihtgkXNp4mABK+1GtVr+SBhJDbBIubVw+Cd/TDgKO2DPiN3YUo6y/nDCNEIsqTKH1en2tcwA9FKEItyDi3aIh8Gl1sRrVnSDzNFDJT1bAy5xpOYGn5fP5JuL95ZjMIn1ya7j5dPGfv0A5eAnpZUY3n5jXcoec5J67D9q+VuAPM47D3XaSeL4AAAAASUVORK5CYII=&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%;"> <small id="hint_id_username" class="form-text text-muted">Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.</small> </div> </div> <div id="div_id_first_name" class="form-group"> <label for="id_first_name" class="">
                First Name
            </label> <div class=""> <input type="text" name="first_name" maxlength="30" class="textinput textInput form-control w-full block my-1 form-input" placeholder="Your first name" id="id_first_name"> </div> </div> <div id="div_id_last_name" class="form-group"> <label for="id_last_name" class="">
                Last Name
            </label> <div class=""> <input type="text" name="last_name" maxlength="150" class="textinput textInput form-control w-full block my-1 form-input" placeholder="Your last name" id="id_last_name"> </div> </div> <div id="div_id_email" class="form-group"> <label for="id_email" class="">
                Email Address
            </label> <div class=""> <input type="email" name="email" maxlength="254" class="emailinput form-control w-full block my-1 form-input" placeholder="Your Email Address" id="id_email"> </div> </div> <div id="div_id_district" class="form-group"> <label for="id_district" class=" requiredField">
                District<span class="asteriskField">*</span> </label> <div class=""> <select name="district" class="select form-control w-full block my-1 form-select" required="" id="id_district"> <option value="" selected="">---------</option> <option value="1">Thiruvananthapuram</option> <option value="2">Kollam</option> <option value="3">Pathanamthitta</option> <option value="4">Alappuzha</option> <option value="5">Kottayam</option> <option value="6">Idukki</option> <option value="7">Ernakulam</option> <option value="8">Thrissur</option> <option value="9">Palakkad</option> <option value="10">Malappuram</option> <option value="11">Kozhikode</option> <option value="12">Wayanad</option> <option value="13">Kannur</option> <option value="14">Kasaragod</option>

</select> </div> </div> <div id="div_id_phone_number" class="form-group"> <label for="id_phone_number" class=" requiredField">
                10 Digit Mobile Number<span class="asteriskField">*</span> </label> <div class=""> <input type="text" name="phone_number" maxlength="14" class="' textinput textInput form-control w-full block my-1 form-input" placeholder="Your 10 Digit Mobile Number" required="" id="id_phone_number"> </div> </div> <div id="div_id_gender" class="form-group"> <label for="id_gender" class=" requiredField">
                Gender<span class="asteriskField">*</span> </label> <div class=""> <select name="gender" class="select form-control w-full block my-1 form-select" required="" id="id_gender"> <option value="" selected="">---------</option> <option value="1">Male</option> <option value="2">Female</option> <option value="3">Other</option>

</select> </div> </div> <div id="div_id_age" class="form-group"> <label for="id_age" class=" requiredField">
                Age<span class="asteriskField">*</span> </label> <div class=""> <input type="number" name="age" class="numberinput form-control w-full block my-1 form-input" placeholder="Your age in numbers" required="" id="id_age"> </div> </div> <div id="div_id_skill" class="form-group"> <label for="id_skill" class="">
                Skill
            </label> <div class=""> <select name="skill" class="select form-control w-full block my-1 form-select" id="id_skill"> <option value="" selected="">---------</option>

</select> </div> </div> <div id="div_id_password1" class="form-group"> <label for="id_password1" class=" requiredField">
                Password<span class="asteriskField">*</span> </label> <div class=""> <input type="password" name="password1" class="textinput textInput form-control w-full block my-1 form-input" placeholder="Password Confirmation" required="" id="id_password1" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABKRJREFUWAnNl0tsVGUUxzvTTlslZUaCloZHY6BRFkp9sDBuqgINpaBp02dIDImwKDG6ICQ8jBYlhg0rxUBYEALTpulMgBlqOqHRDSikJkZdGG0CRqAGUuwDovQ1/s7NPTffnTu3zMxGvuT2vP7n8Z3vu+dOi4r+5xUoJH8sFquamZmpTqfTVeIfCARGQ6HQH83NzaP5xsu5gL6+vuVzc3NdJN1Kkhd8Ev1MMYni4uJjra2tt3wwLvUjCxgYGFg8Pj7+MV5dPOUub3/hX0zHIpFId0NDw6Q/jO4tZOzv76+Znp6+AOb5TBw7/YduWC2Hr4J/IhOD/GswGHy7vb39tyw2S+VbAC1/ZXZ29hKoiOE8RrIvaPE5WvyjoS8CX8sRvYPufYpZYtjGS0pKNoD/wdA5bNYCCLaMYMMEWq5IEn8ZDof3P6ql9pF9jp8cma6bFLGeIv5ShdISZUzKzqPIVnISp3l20caTJsaPtwvc3dPTIx06ziZkkyvY0FnoW5l+ng7guAWnpAI5w4MkP6yy0GQy+dTU1JToGm19sqKi4kBjY+PftmwRYn1ErEOq4+i2tLW1DagsNGgKNv+p6tj595nJxUbyOIF38AwipoSfnJyMqZ9SfD8jxlWV5+fnu5VX6iqgt7d3NcFeUiN0n8FbLEOoGkwdgY90dnbu7OjoeE94jG9wd1aZePRp5AOqw+9VMM+qLNRVABXKkLEWzn8S/FtbdAhnuVQE7LdVafBPq04pMYawO0OJ+6XHZkFcBQA0J1xKgyhlB0EChEWGX8RulsgjvOjEBu+5V+icWOSoFawuVwEordluG28oSCmXSs55SGSCHiXhmDzC25ghMHGbdwhJr6sAdpnyQl0FYIyoEX5CeYOuNHg/NhvGiUUxVgfV2VUAxjtqgPecp9oKoE4sNnbX9HcVgMH8nD5nAoWnKM/5ZmKyySRdq3pCmDncR4DxOwVC64eHh0OGLOcur1Vey46xUZ3IcVl5oa4OlJaWXgQwJwZyhUdGRjqE14VtSnk/mokhxnawiwUvsZmsX5u+rgKamprGMDoA5sKhRCLxpDowSpsJ8vpCj2AUPzg4uIiNfKIyNMkH6Z4hF3k+RgTYz6vVAEiKq2bsniZIC0nTtvMVMwBzoBT9tKkTHp8Ak1V8dTrOE+NgJs7VATESTH5WnVAgfHUqlXK6oHpJEI1G9zEZH/Du16leqHyS0UXBNKmeOMf5NvyislJPB8RAFz4g8IuwofLy8k319fUP1EEouw7L7mC3kUTO1nn3sb02MTFxFpsz87FfJuaH4pu5fF+reDz+DEfxkI44Q0ScSbyOpDGe1RqMBN08o+ha0L0JdeKi/6msrGwj98uZMeon1AGaSj+elr9LwK9IkO33n8cN7Hl2vp1N3PcYbUXOBbDz9bwV1/wCmXoS3+B128OPD/l2LLg8l9APXVlZKZfzfDY7ehlQv0PPQDez6zW5JJdYOXdAwHK2dGIv7GH4YtHJIvEOvvunLCHPPzl3QOLKTkl0hPbKaDUvlTU988xtwfMqQBPQ3m/4mf0yBVlDCSr/CRW0CipAMnGzb9XU1NSRvIX7kSgo++Pg9B8wltxxbHKPZgAAAABJRU5ErkJggg==&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%;"> <small id="hint_id_password1" class="form-text text-muted"><ul><li>Your password can't be too similar to your other personal information.</li><li>Your password must contain at least 8 characters.</li><li>Your password can't be a commonly used password.</li><li>Your password can't be entirely numeric.</li></ul></small> </div> </div> <div id="div_id_password2" class="form-group"> <label for="id_password2" class=" requiredField">
                Password confirmation<span class="asteriskField">*</span> </label> <div class=""> <input type="password" name="password2" class="textinput textInput form-control w-full block my-1 form-input" placeholder="Password" required="" id="id_password2" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAABKRJREFUWAnNl0tsVGUUxzvTTlslZUaCloZHY6BRFkp9sDBuqgINpaBp02dIDImwKDG6ICQ8jBYlhg0rxUBYEALTpulMgBlqOqHRDSikJkZdGG0CRqAGUuwDovQ1/s7NPTffnTu3zMxGvuT2vP7n8Z3vu+dOi4r+5xUoJH8sFquamZmpTqfTVeIfCARGQ6HQH83NzaP5xsu5gL6+vuVzc3NdJN1Kkhd8Ev1MMYni4uJjra2tt3wwLvUjCxgYGFg8Pj7+MV5dPOUub3/hX0zHIpFId0NDw6Q/jO4tZOzv76+Znp6+AOb5TBw7/YduWC2Hr4J/IhOD/GswGHy7vb39tyw2S+VbAC1/ZXZ29hKoiOE8RrIvaPE5WvyjoS8CX8sRvYPufYpZYtjGS0pKNoD/wdA5bNYCCLaMYMMEWq5IEn8ZDof3P6ql9pF9jp8cma6bFLGeIv5ShdISZUzKzqPIVnISp3l20caTJsaPtwvc3dPTIx06ziZkkyvY0FnoW5l+ng7guAWnpAI5w4MkP6yy0GQy+dTU1JToGm19sqKi4kBjY+PftmwRYn1ErEOq4+i2tLW1DagsNGgKNv+p6tj595nJxUbyOIF38AwipoSfnJyMqZ9SfD8jxlWV5+fnu5VX6iqgt7d3NcFeUiN0n8FbLEOoGkwdgY90dnbu7OjoeE94jG9wd1aZePRp5AOqw+9VMM+qLNRVABXKkLEWzn8S/FtbdAhnuVQE7LdVafBPq04pMYawO0OJ+6XHZkFcBQA0J1xKgyhlB0EChEWGX8RulsgjvOjEBu+5V+icWOSoFawuVwEordluG28oSCmXSs55SGSCHiXhmDzC25ghMHGbdwhJr6sAdpnyQl0FYIyoEX5CeYOuNHg/NhvGiUUxVgfV2VUAxjtqgPecp9oKoE4sNnbX9HcVgMH8nD5nAoWnKM/5ZmKyySRdq3pCmDncR4DxOwVC64eHh0OGLOcur1Vey46xUZ3IcVl5oa4OlJaWXgQwJwZyhUdGRjqE14VtSnk/mokhxnawiwUvsZmsX5u+rgKamprGMDoA5sKhRCLxpDowSpsJ8vpCj2AUPzg4uIiNfKIyNMkH6Z4hF3k+RgTYz6vVAEiKq2bsniZIC0nTtvMVMwBzoBT9tKkTHp8Ak1V8dTrOE+NgJs7VATESTH5WnVAgfHUqlXK6oHpJEI1G9zEZH/Du16leqHyS0UXBNKmeOMf5NvyislJPB8RAFz4g8IuwofLy8k319fUP1EEouw7L7mC3kUTO1nn3sb02MTFxFpsz87FfJuaH4pu5fF+reDz+DEfxkI44Q0ScSbyOpDGe1RqMBN08o+ha0L0JdeKi/6msrGwj98uZMeon1AGaSj+elr9LwK9IkO33n8cN7Hl2vp1N3PcYbUXOBbDz9bwV1/wCmXoS3+B128OPD/l2LLg8l9APXVlZKZfzfDY7ehlQv0PPQDez6zW5JJdYOXdAwHK2dGIv7GH4YtHJIvEOvvunLCHPPzl3QOLKTkl0hPbKaDUvlTU988xtwfMqQBPQ3m/4mf0yBVlDCSr/CRW0CipAMnGzb9XU1NSRvIX7kSgo++Pg9B8wltxxbHKPZgAAAABJRU5ErkJggg==&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%;"> <small id="hint_id_password2" class="form-text text-muted">Enter the same password as before, for verification.</small> </div> </div> </form>
 
    <button class="mt-8 btn btn-primary w-full" type="submit">
      Sign Up »
    </button>
  
</div>

As you see, the submit button is rendered outside the form element.
Possibly related to Crispy Forms Issue #677

Add pre-commit hooks to maintain code styles

Add some common code styles as pre-commit hooks.

Proposed hooks -

  • trailing-whitespace
    name: trim trailing whitespace
    description: This hook trims trailing whitespace on files
    entry: trailing-whitespace-fixer
  • check-merge-conflict
    name: check for merge conflict
    description: Prevent accidentally commiting files with merge conflicts.
  • end-of-file-fixer
    name: fix end of files.
    description: Ensures that a file is either empty, or ends with one newline.
  • seed-isort-config
    description: sorts the imports, hence consistency in the import statements
  • isort
    description: additional to seed-isort-config
  • black
    description: ensures that commits don't go through without specific coding style

UI Changes

Home Page

  • Rename hosptial SIGN UP to Hospital Administrator Signup

Staff Sign Up form

  • Rename Phone Number to 10 digit mobile number
  • Replace submit button text with Hosital Administrator Signup

Facility Register form (facility/create/)

  • Label - name should be changed to Name of Hospital
  • Label - address should be changed to Enter Hospital Address
  • Submit button text - Click to Submit Hospital Details

Capacity page

  • Add title Enter Your Hospital Capacity
  • Add the following description
The Chief Ministers's office request to know imformation about  total capacity and current Utlisation of Normal Beds, ICU Beds and Ventilators in your Hospital

1. Normal Beds
2. ICU Beds
3. Ventilators
  • Rename room type to Bed Type
  • Rename capacity to Total Capacity
  • Rename current_capacity tp Current Capacity Utilisation
  • Replace Button text Save add more Bed Types

Doctors Page (/doctorcount/add/)

  • Title - Add the number of doctors in different specialization
  • Seed default values for doctor specialization, Use the folllowing
General Medicine, Pulmonology, Critical Care, Paediatrics

Facility show

  • Rename update button text to Edit

Facility Index

  • Add title - The Chief Ministers's office request to know Live Data
  • List the facility as a big card as its going to be mostly one facilty per user.

Limit the use of ALL CAPS

We are currently using ALL CAPS very liberally, although it is an attention grabber, it makes the UI look polluted and overwhelming.

We should limit the Use of ALL-CAPS or try to remove emphasis by reducing the size of the all caps elements.

Also is the all caps used for transalation. We could put normal text inside elements and use the uppercase tailwind class to style them to ALL CAPS.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.