Code Monkey home page Code Monkey logo

dnpm-dip-portal's Introduction

Portal 🩺

This repository contains the Portal of DNPM:DIP.

Table of Contents

Packages

The repository contains the following packages:

  • @dnpm-dip/core: This package contains common constants, functions, types, ...
  • @dnpm-dip/kit: This package contains utilities to register dnpm dip modules to the portal.
  • @dnpm-dip/portal: This package contains the User Interface (UI).
  • @dnpm-dip/admin: This package contains the admin module.
  • @dnpm-dip/rd: This package contains the module for Rare Diseases (RD).
  • @dnpm-dip/mtb: This package contains the module for Molecular Tumor Boards (MTBs).

Usage

Production

Prerequirements

  • Docker v.24+ must be installed on the host machine

Run

$ docker run -d -p 3000:3000 \
    --restart=always \
    ghcr.io/kohlbacherlab/dnpm-dip-portal:latest

Development

To start the portal with the associated modules such as rd, mtb, etc, the following steps must be performed in sequence.

Prerequirements

  • Node.js v.18+ must be installed on the host machine

Download

$ git clone https://github.com/KohlbacherLab/dnpm-dip-portal
$ cd dnpm-dip-portal

Installation

The following step installs all dependencies and dev dependencies necessary for the execution and development of the ecosystem.

$ npm i

Build

The following step creates an initial build of all packages.

$ npm run build

Run

The following step is necessary to start the portal in development mode and the related features like hot module replacement (HMR).

$ npm run dev --workspace=packages/portal

Credits

If you have any questions, feel free to contact the author & creator Peter Placzek of the project. The project is being developed as part of the author's master's thesis.

License

Made with 💚

Published under MIT License.

dnpm-dip-portal's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar tada5hi avatar

Watchers

 avatar  avatar  avatar

dnpm-dip-portal's Issues

Feature: Variants

  • display missing common variant attributes
  • display variant specific attributes in dedicated slot of base variant component

Feature: Anpassung Farbschema bei Response + Gender

Bei den Response-Diagrammen in das Farbschema direkt die "Wertung" der RECIST-Werte reinnehmen, also dass positive Response mit einer "guten" Entwarnung symbolisierenden Farbe dargestellt wird, und "schlechte" Werte eher als Warn-Farbe.

Ordnung der RECIST-Werte, von "gut" nach "schlecht":
CR -> Grün?
PR -> schwächer Grün?
MR -> schach Orange?
SD > Orange?
PD -> Rot?
NA, NYA sind neutral -> Blau?

s. https://github.com/KohlbacherLab/dnpm-dip-mtb-model/blob/9bd7c50c6eb2c20c7036bb914fcd8c7454abc6cf/dto_model/src/main/scala/de/dnpm/dip/mtb/model/Response.scala#L25

Meeting: 27.11.2023

Priority for 4.12.2023

  • change api endpoint /patients to /patient-matches
  • add additional diagrams of query api endpoint
  • global patient filter for summary and patients ( + add site filter )
  • global diagnoses & hpo Filter
  • patient match overview add (patient.age, patient.vitalStatus, patient.site)
  • set extended patient view as default view
  • patient match overview, prio hpo.display value
  • add code:display pattern for search diagnosis category + hpo term

BUG: Selection field for Diagrams

In selection fields to request diagrams for a given label, for instance "Verteilung nach Variante" to select recommended medication by supporting variant, selecting the first entry systematically doesn't work. Only from the 2nd entry on does it work to select an entry and get the diagrams.

Meeting: 15.11.2023

  • restore search form from query object
  • prepared queries
  • switch diagram type with dropdown selection
  • disable search submit button on load
  • global toggle for extended/minimal view
  • query overview no id
  • tooltip ( lokal & föderiert) (Patientenakte einsehen)

Feature: Customizable search form

  • enable the user to customize the search form with different criteria ( grid like )
  • store customization via store and local storage

Refactor: Components

Refactor components to be prefixed with VP e.g. to make better distinction to other types, interfaces & components (inc. other libraries)

Feature Idea: Medikationsauswahl über ATC hinaus

Idee:

Bei der Medikationsauswahl sollte zwar ATC zur unterstützten Auswahl eingebunden werden. Es sollte aber darüber hinaus möglich sein, in ATC nicht vorkommende Wirkstoff(-Namen) anzugeben.

Im "normalen" Fall von Auswahl eines ATC-Eintrags würde ein entsprechendes ATC-Coding (d.h. mit "code" bzw "system" von ATC) in das MedicationCriteria-Objekt gesteckt.

Im "custom"-Fall würde das Wirkstoff-Coding als "code" bzw. als "system" einen Platzhalter (z.B "-", "undefined", "unregistered") haben.
Damit wäre dann im Backend eine jeweils gesonderte Handhabung möglich, und insgesamt eben auch Suche nach in ATC unregistrierten Wirkstoffen möglich

HINWEIS: Muss aber nach Absprache erst Backend-seitig umgesetzt werden.

Bug/Feature: Scrolling in selection drop-down menus

The drop-down menus for selections currently show only 6 entries.
Even though they support text-based search for entries, this requires knowledge of what they could contain to write a meaningful entry search, so that discovery of the contents in a potentially long selection list is hampered.

Please add scrolling functionality for easier navigation of entry list.

BUG: CNV Gen-Auswahl

MTB-Suchmaske:

Wenn man bei einer CNV z.B. 2 betroffene Gene aussucht, und dann den ersten Chip wieder über das X entfernt, werden beide Chips gelöscht.

BUG: Vital-Status in Patienten-Filter tut nicht korrekt

In Ergebnis-Ansicht, Patienten-Liste:

Beispiel: Im Patienten-Filter wählt man bei Geschlecht nur "Weiblich" und bei Vital-Status nur "Lebend" aus, aber nach Anwendung des Filters in der Liste tauchen trotzdem verstorbene Patienten auf.
Bei Untersuchung mit Web-Tools im Browser kommt bei der Anfrage als Request-URI /api/mtb/queries/{id}/patient-matches?gender=female&..., es fehlt der Query-Parameter vitalStatus=alive.

Bug?: Filter in MTB Query Portal

When applying the filter in one of the MTB Query Portal's tab/page, it is not applied when one switches to another tab/page, but has to be re-set and re-applied. Could that be fixed?

Feature: Search Form

  • Restore search form from stored (localstorage) configuration

  • two buttons for federated/local

  • initial fields:

    • diagnosis: category - multiple chip
    • hpoTerms: multiple chip
  • scope: diagnosis to diagnoses

Fix: minor issues/todos

  • RD kachel homepage
  • pagination keep query strings ( preparedQueryId )
  • nuxt link wrapper component to keep query strings ( preparedQueryId )

Featue: Roadmap

Essentials

  • ci/cd pipeline
  • linter, monorepo management ( lerna/changesets)
  • types/interfaces for domain resources: patient, consent, case, ....
  • api client for resources
  • interaction between rare-deseases and portal (ink. navigation, pages, api client ...)
  • basic styling
  • layout navigation
  • outsource reusable components, composables, ... to extra package (core)
  • pages for rd search, query, patient-record
  • lazy load single resources ( template slot for loading )
  • unify loading and rendering of single/collection resources
  • enhance styling, usability, pages
  • implement features
  • docker image for cd

Notes MA

  • Hintergrund

    • Allgemeine Info Rare Diseases (Paper)
    • Welchen Vorteil hat Portal für RD?
  • Requirement Engineering - Peter K.

    • Context zu RD.
  • Ergebnis:

    • Entwicklung beschreiben
    • User Studie (z.B Umfrage)
  • MI: 06 Uhr

  • Fr: alternative

Feature: Form Validation

  • define conditions (required, maxLength, minLength, ...) for search criteria
  • display validation messages below the input, textarea, ... fields

Feature: Component Library

Create component library for modules.

Components:

  • SearchFormElement (props: code, criteria): It should render select, input, textarea field depending on props)

Feature: Query session store

  • refresh query session before expiration
  • store and restore session from local storage (expiration date, criteria, ... )

Feature: Text-based selection in menus for diagram display

Feature:

In the selection menus for certain diagrams (e.g. "Medikation: Empfehlungen nach stützender mol. Alteration") turn the drop-down menu into a text-based search field for easier selection of an entry one already has in mind by name.

Questions

  • Are the scopes of a query fixed (hpo, diagnosis, variant, ...) ?
  • Why is the criteria object value an array?
  • Should the Patient type be a subset of the PatientRecord?

Feature: Add input validation to protein change

For variant search criterion "protein change" (both in MTB and RD), add regex-based validation that user input conforms to 3-letter code format, by checking that the entered String contains at least one 3-letter amino acid code.

Regex:

(?i)(Ter|Asn|Thr|Tyr|Sec|Phe|Ala|Met|Ile|Asx|Pro|Cys|His|Trp|Asp|Glu|Xaa|Gly|Val|Gln|Leu|Lys|Arg|Glx|Ser)

BUG: Wiederherstellung Medikations-Auswahl in MTB-Suche

MTB-Such-Modul, Situation:

Man wählt in der Such-Maske bei Medikation z.B. "Verabreicht" zusammen mit einer oder mehrerer Medikationen aus, setzt die Suche ab, und geht dann auf "Anpassen" der Such-Kriterien:
Bei der Medikations-Auswahl fehlen die ausgewählten Medikationen, und anstatt dass der Schalter "Verabreicht" aktiv wäre, erscheint ein Chip, wie er eigentlich für die Medikations-Einträge verwendet wird, mit Name "Verabreicht".

Feature TODO: Wording on Labels

The following changes of wording have been requested on the MTB Query Result portal:

  • On the diagrams for frequency distribution of tumor entities and morphologies, respectively, included the code in the display label, i.e. {code}: {display}
  • On the overview of recommended/used medication, adapt wording: "Empfehlung" -> "Therapie-Empfehlungen"; "Therapien" -> "Umgesetzte Therapien"

Umbenennungs-Hinweise

Umbenennungsvorschläge:

  • MTB-Suchmaske: "Medikament" zu "Medikation" umbennen
  • MTB-ResultSet Summary, Reiter "Demographie":
    • "Verteilung von Geschlechtern" zu "Geschlechterverteilung" umbenenn
    • "Verteilung des Alters" zu "Altersverteilung"
  • MTB-ResultSet Summary, Reiter "Diagnose":
    • Buchstaben-Verdreher bei "IDC-O-3-M" -> "ICD-O-3-M"
  • MTB-ResultSet Summary, Reiter "Medikation":
    • Bei "Empfehlungen", "Verteilung nach Variante" umbenennen "Empfehlungen nach stützender molekularer Alteration"
    • Bei "Therapien", "Verteilung nach Variante" umbenennen "Response-Verteilung nach Medikation"
  • In der Ergebnis-Ansicht nach Absetzen einer Suche: Reiter "Einstellungen" umbenennen zu "Such-Kriterien" oder "Suche"

User Feedback Problem: Auswahl aus Drop-Down-Listen

In den Such-Masken:

Bei den Feldern, die Mehrfach-Auswahl zulassen, bleibt die Auswahl-Liste nach Anklicken (Auswählen) von Einträgen offen.
Da die Chips, die die Auswahl darstellen, aber von der ausgeklappten Liste bedeckt sind, gibt es praktisch kein Feedback dazu, dass etwas passiert ist.
Das muss behoben werden: in irgendeiner Form braucht man klares visuelles Feedback, dass die Auswahl getätigt wurde.

Bug: Medikationswahl MTB-Suchmaske

Wenn man einen Wirkstoff zur Suche aussucht, kommen trotzdem alle Patienten zurück.
Als ich es mit developer tools untersucht habe, war da das "criteria" Unter-Objekt in der Request leer, statt dass da der "medication"-Teil gesetzt war.

Feature: Colour Handling

The colour scheme in most diagrams (bar/pie charts) is rather unsystematic at the moment. For instance, in the diagram for age distribution, the colours jump from green to blue to black, etc.
On the other hand, sometime different labels result in the same colour, for instance in the Kaplan-Meier curve for PFS by therapy.

It would be good to improve the following points:

  • Ensure that different labels obtain distinct colours.
  • Use some kind of "colour palette" on some diagrams, e.g. on age distribution, instead of the seemingly random colour jumps for different age intervals, have some kind of gradient from a start to an end colour

Idea: Display for hierarchical distributions

REMINDER:

Look for solution to display concept hierarchy in distributions.
For instance, in the diagram for distribution of tumor entities, the top-level entries show the frequency of ICD-10-GM "top category", but the detailed distribution of sub-categories is also included in the data and should be accessible on demand.

Option: display the whole underlying data as a table?

Feature: Admin View for connection status report

/api/admin/connection-report

{
    "createdAt": "2024-04-04T15:47:43.62715529",
    "peers": [
        {
            "details": "Error in peer-to-peer response from site Beispielhausen: Connection refused: localhost/127.0.0.1:9002",
            "site": {
                "code": "UKBsp",
                "display": "Beispielhausen",
                "system": "dnpm-dip/site"
            },
            "status": "offline"
        },
        {
            "details": "Error in peer-to-peer response from site Berlichingen: Connection refused: localhost/127.0.0.1:9003",
            "site": {
                "code": "UKBrl",
                "display": "Berlichingen",
                "system": "dnpm-dip/site"
            },
            "status": "offline"
        }
    ]
}

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.