Code Monkey home page Code Monkey logo

sormas-foundation / sormas-project Goto Github PK

View Code? Open in Web Editor NEW
291.0 28.0 133.0 260.08 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.71% Shell 0.24% JavaScript 0.73% CSS 0.08% HTML 0.07% R 0.03% SCSS 0.24% FreeMarker 0.04% PLpgSQL 0.20% Gherkin 3.66% Dockerfile 0.01%
surveillance infectious-diseases diseases outbreak android web offline-first low-bandwidth covid-19 epidemics

sormas-project's People

Contributors

alexandru-pirvu avatar alexcaruntu-vita avatar barnabartha avatar carina29 avatar christopherriedel avatar cisymeda avatar davidbaldsiefen avatar dinua avatar faatihi avatar fhauptmann avatar fredrikschaefer avatar hms-sgent avatar holgerreisevsys avatar jonascir avatar jp-sgent avatar lb-sgent avatar legolas38 avatar leventegal-she avatar martinwahnschaffe avatar matestrysewske avatar mk-sgent avatar mp-sgent avatar pk-sgent avatar rdutu-vg avatar sergiupacurariu avatar sormas-vitagroup avatar stefankock avatar stefanszczesny avatar syntakker avatar vidi42 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  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).

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

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

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

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

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

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

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

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

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.

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).

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 

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

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

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

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)

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)

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

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.