Code Monkey home page Code Monkey logo

hzi-braunschweig / sormas-project Goto Github PK

View Code? Open in Web Editor NEW
290.0 29.0 134.0 255.03 MB

SORMAS (Surveillance, Outbreak Response Management and Analysis System) is an early warning and management system to fight the spread of infectious diseases.

Home Page: https://sormas.org

License: GNU General Public License v3.0

Java 94.68% Shell 0.25% JavaScript 0.74% CSS 0.08% HTML 0.07% R 0.03% SCSS 0.24% FreeMarker 0.04% PLpgSQL 0.20% Gherkin 3.68% Dockerfile 0.01%
surveillance infectious-diseases diseases outbreak android web offline-first low-bandwidth covid-19 epidemics contact-tracing sdg-3

sormas-project's Introduction

SORMAS - Surveillance, Outbreak Response Management and Analysis System
License Latest Release Development Build Status


SORMAS

SORMAS (Surveillance Outbreak Response Management and Analysis System) is an open source eHealth system - consisting of separate web and mobile apps - that is geared towards optimizing the processes used in monitoring the spread of infectious diseases and responding to outbreak situations.

FAQ (Frequently Asked Questions)

How Does it Work?

You can give SORMAS a try on our demo server at https://demo.sormas.org!

How Can I Get Involved?

Read through our Contributing Readme and contact us at [email protected] to learn how you can help to drive the development of SORMAS forward, or check out our Discussions to get development support from the core developers and other community members. SORMAS is a community-driven project, and we'd love to have you on board!

If you want to contribute to the code, please strictly adhere to the Development Environment guide to ensure that everything is set up correctly. Please also make sure that you've read the Development Contributing Guidelines before you start to develop.

How Can I Report a Bug or Request a Feature?

If you want to report a security issue, please read and follow our Security Policies. For bugs without security implications, change and feature requests, please create a new issue and read the Submitting an Issue guide for more detailed instructions. We appreciate your help!

Which Browsers and Android Versions are Supported?

SORMAS officially supports and is tested on Chromium-based browsers (like Google Chrome) and Mozilla Firefox, and all Android versions starting from Android 7.0 (Nougat). In principle, SORMAS should be usable with all web browsers that are supported by Vaadin 8 (Chrome, Firefox, Safari, Edge, Internet Explorer 11; see https://vaadin.com/faq).

Making use of the SORMAS web application through a mobile device web browser is possible and acceptable also in countries that are subject to the General Data Protection Regulation (GDPR) as enforced by the European Union. However, in such countries that are subject to the GDPR, the Android application (.apk file) for SORMAS should not be used on mobile devices until further notice.

Is there a ReST API documentation?

Yes! Please download the latest release and copy the content of /deploy/openapi/sormas-rest.yaml to an editor that generates a visual API documentation(e.g. https://editor.swagger.io/). A runtime Swagger documentation of the External Visits Resource (used by external symptom journals such as CLIMEDO or PIA) is available at <<host>>/sormas-rest/openapi.json or <<host>>/sormas-rest/openapi.yaml

Who is responsible for Data Protection and Data Security?

We herewith explicitly would like to draw your attention to the fact, that the respective public health agency running SORMAS is in charge of data security and data protection and has to ensure compliance with national data protection and data security regulations in their respective jurisdiction. It has to ensure that state-of-the art requirements for data protection and data security are fulfilled. All those prerequisites and examinations have to be done in the context of the country and its respective legal framework. For these reasons, HZI cannot take the responsibility from the respective public health agency running the SORMAS systems and is not liable for any violation of data protection of the agency as the data generated by SORMAS belong to that very agency.

Guidelines and Resources

If you want to learn more about the development and contribution process, setting up or customizing your own system, or technical details, please consider the following guides and resources available in this repository. You can also view this readme and all guides outside the Wiki with a full table of content and search functionality here: https://sormas-foundation.github.io/SORMAS-Project/

  • GitHub Wiki - Our wiki contains additional guides for server customization and development instructions. Please have a look at it if you need information on anything that this readme does not contain.

  • Contributing Guidelines - These are mandatory literature if you want to contribute to this repository in any way (e.g. by submitting issues, developing code, or translating SORMAS into new languages).

  • Development Environment Setup Instructions - If you want to get involved with development, this guide tells you how to correctly set up your system in order to contribute to the code in adherence with codestyle guidelines, development practices, etc.

  • Troubleshooting - A collection of solutions to common (mostly development) problems. Please consult this readme when encountering issues before issuing a support request.

  • Server Customization - If you are maintaining a SORMAS server or are a developer, this guide explains core concepts such as turning features on or off, importing infrastructure data or adjusting the configuration file.

  • Internationalization - SORMAS can be translated in any language by using the open source tool Crowdin; this resource explains how this process is working.

  • Disease Definition Instructions - We already support a large number of diseases, but not all of them are fully configured for case-based surveillance, and some might not be part of SORMAS at all yet; if you need SORMAS to support a specific disease, please use these instructions to give us all the information we need in order to extend the software with your requested disease.

  • Sormas2Sormas - The Sormas2Sormas API is used to share entities between SORMAS instances.

  • Security Policies - These contain important information about how to report security problems and the processes we are using to take care of them.

  • Third-Party License Acknowledgement - This resource contains the names and license copies of external resources that SORMAS is using.

If you want to set up a SORMAS instance for production, testing or development purposes, please refer to the following guides:

Project Structure

The project consists of the following modules:

sormas-project's People

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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sormas-project's Issues

Missing spinner values when switching case tabs

The district, community and facility values from the "case data" tab are missing after the following has happened:

  • Open the case
  • Switch to the symptoms tab
  • Wait for a few seconds
  • Switch to the patient tab
  • Switch to the case data tab

The (likely) reason is that the onResume() method of the case data tab is already called when the patient tab is opened which results in the selectedValue variable for the region spinner to return null (which, in turn, means that no district will be selected).

Enhance Contact Lists View

  • add classification column and follow-up column
  • add "number of visits" column, e.g. "5 (3 missed)"
  • add "follow-up days left" column
  • fix "Case disease" caption

Case label in task activity should link to case

When the user open's a task in the app it should be possible to jump to the associated case.

  • Open case on click
  • Redesign label to make obvious that it's a link
  • Make sure that the user is redirected back to the task when clicking the back button

Sprint 10 review:

  • make link method on labelField and give ClickListener as param

Create new contact for case

  • "+" create button in case contacts list
  • ContactNewActivity, add to hierarchie in manifest
  • Create contact form layout based on mockup: https://app.moqups.com/symeda/3NUENEwuOE/edit/page/a824a2bbc
  • First and last name are used to search for a matching person afterwards. Find a good way how to hand this over the next step. Have a look at sormas-ui (ContactCreateFrom) as reference.
  • Next step: search for matching persons. If existend show selector popup: https://app.moqups.com/symeda/3NUENEwuOE/edit/page/a0953e7fe
  • If not existent just create a new person
  • Afterwards jump into ContactEditActivity (see #7 )
  • validate lastContactDate is before reportDateTime

Show name of active case and contact [1]

This should be shown in the top right of the screen.

  • Create this in the moqups
  • Set a style for displaying the name
  • Show name of active case
  • Show name of active contact

Visit app backend

  • Copy visit entity from sormas-backend
  • Adjust annotations to ORMlite
  • Update DatabaseHelper init/update logic, database version++
  • DAO service and entity sync

Define which data should be send to the mobile app (informant & officers) [2]

Example: When an officer is assigned to a contact task he needs to get access to the referenced contact as well and this probably also includes the case referenced by the contact.

Solution A would be to give the officer only access to data he is somehow assigned to (as described in the example).

Solution B is to make all data of the officer's regional area (LGA) available on the phone. In this scenario the list of cases, contacts and events should by default filter to the entries of the officer.

Define the rules that define which data is send to a phone for the following items:

  • Cases
  • Contacts
  • Events
  • Tasks
  • Persons

A person can be multiple cases

  • case.person should be ManyToOne relation (app & backend)
  • remove person.case (app & backend)
  • make sure this doesn't cause problems
  • new case (app): allow the selection of persons that already have a case

Create mockups for sample testing (lab persona) [2]

  • person in hospital will send lab material physically (probably informant)

  • at the same time enters sample data into the system

  • UID of system + another UID from the lab form

  • lab person receive sample and has to match it to entry in sormas

  • enters lab result for the sample

  • list of test typs: relevant disease, result options

  • list of labs with definition of test types

  • possible 2 step process: forward to another lab

  • multiple tests per sample

  • sample: UID, Text-ID, Sample referral (lab), 2nd level sample referral, kind-of material + other, date+time of sampling (collecting), timestamp of shipment, shipment details, status: Shipped, Received & Pending, Further testing, Referred to other lab, Tested

  • test: kind of test, date+time, lab, result (depends on kind of test; can also be text) + text-field, verified (user has to enter verification pin)

Custom fields with two-way-binding

We need custom fields that implement the PropertyField interface (see SymptomStateField for comparison).

  • TextField
  • DateField (see FormTab.addDateField)
  • SpinnerField (see FormTab.makeSpinnerField; the add*SpinnerField methods probably need a better name afterwards)
  • RadioGroupField (e.g. for Contact.contactProximity)
  • Label (caption + text; e.g. Case ID in case data form)
  • Refactor existing layouts to use these fields.
  • Would be great to remove FormTab.getModel.
  • Refactoring (-> outsource spinner creation methods)
  • Replace age and phone fields with number fields
  • Bug: age field edit is not saved
  • Bug: Districts and communities are selectable no matter which region/district has been chosen in location dialog

Logic to calculate "follow-up until" for a contact

This is basic implementation of the logic that is not complete

  • Add status "no follow-up"
  • Show follow-up until and status in contact form
  • Duration: Ebola, Cholera 21 days, Lassa 6 days
  • Leave empty and set follow-up status to "No follow-up" for other diseases
  • Reference for calculation is the reporting date (since this is always later than the last contact date and we can't be sure the last contact date is correct)

E-mail notification for supervisor (task, lab result, symptomatic, case classification) [5]

Supervisors should receive notifications for specific events via e-mail so they (1) have a trigger to look into SORMAS and (2) don't miss important news.

Trigger events:

  • task is to be started or due (supervisor + national)
  • lab result comes in (case & surveillance)
  • contact becomes symptomatic (contact & surveillance) - following the same rules as the "symptomatic" column in visits directory
  • case classification changed (case, contact & surveillance)

Tasks:

  • build a service that can be called when an event happens
  • service handles sending an email (and/or SMS later)
  • define texts for all events. Ideally these should be short, so they work as SMS as well. OR: Provide a short and a long text (with link).
  • call the service from the above triggers (from facade)
  • for tasks add a timed method that checks for due tasks (see app for logic)
  • create e.g. onCaseChanged method that contains email logic and method calls such as updateInvestigationByStatus etc.

Manage buttons in status bar of tab-based activities

Add listener to update the visibilty of chosen buttons in the statusbar in the cases edit activity.

​https://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu
​https://developer.android.com/guide/topics/ui/menus.html#groups 

Update symptoms from Datadictonary

  • define what to do

[api + backend]

  • use sormas-api/tools/Fields.xlsx to update SymptomsDto from DataDictonary (copy into "Fields" worksheet)
  • update .properties (also from Fields.xlsx)
  • use DtoAdoCodeGenerator.generateCopyJava() for SymptomsFacadeEjb.toDto and .fromDto
  • add missing members to Symptoms
  • use DtoAdoCodeGenerator.generateNotMatchingMembersList to find no longer needed members in Symptoms
  • sormas_schema SQL
  • use DtoAdoCoderGenerator.generatePropertyConstantsJava

[ui]

  • update SymptomsForm; order symptoms as in DataDictionary
  • date of onset only required when any symptom
  • update SymptomsForm layout

[app]

  • update Symptoms entity
  • update layout
  • date of onset only required when any symptom. should probably be asked last in app (but displayed first in webui)

Contact Visits backend

  • Add followUpUntil to Contact
  • Split ContactStatus to FollowUpStatus ("Follow-up", "Follow-up completed", "Follow-up canceled", "Lost to follow-up") and ContactClassification ("Possible contact", "Confirmed contact", "Not a contact", "Converted to case", "Dropped (case disproved)")
  • update ContactDto and ContactIndexDto accordingly
  • Create visit based on data dictionary with reference to person and relevant disease

Contact app backend

  • Copy contact entity from sormas-backend
  • Adjust annotations to ORMlite
  • Update DatabaseHelper init/update logic, database version++
  • DAO service and entity sync

Follow up status

  • comment field for the follow-up status (e.g. when lost) or contact description required
  • follow-up duration logic: when no visit took place the last day of follow-up, the duration needs to be extended
  • edit follow up status: "follow-up", canceled and lost - others are set by the system

TaskList for case and contacts

See ContactListFragment in CaseEdit for TaskListFragment

  • use the case- or contact context for loading from db
  • back-navigation from task (edit/create activity) to tasklist inside the case / contact

Task "investigate case"

  • Generate task for case with investigation status pending
  • Assign to officer or supervisor
  • Officer can do task or set it to "not executable"
  • Investigation status is updated accordingly (pending, canceled, done)
  • Creating a new "investigate case" task will update the case investigation status
  • Nobody can change the investigation status manually
  • Wrap logic in own service
  • Process diagram to visualize what is happening

DateField in symptoms and contact data layouts shouldn't pop up

This is caused by the layout auto-focusing the first field and the dateField having a focusListener that shows the pop-up.

Either: Make sure the dateField doesn't show the popup when the focus is set on form enter (see FormTab.addDateField)
Or: Deactivate auto-focus for forms (if possible).

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.