tanjera / infirmary-integrated Goto Github PK
View Code? Open in Web Editor NEWMedical device simulator for training healthcare professionals.
Home Page: http://www.infirmary-integrated.com/
License: Other
Medical device simulator for training healthcare professionals.
Home Page: http://www.infirmary-integrated.com/
License: Other
User interface functionality needs improvement- possibly have buttons open drop-down menus or activate otherwise inactive buttons (similar to Maquet IABP functionality), rather than rotate through options (e.g. how it currently rotates through assist ratios 1:1, 1:2, then 1:3).
Also UI colors slightly tacky.
MD5 hash all identifying information uploaded (username, IP address, mac address)
Keep program information raw (version #, OS)
Then update website and make it clear that data is anonymous (once completed and re-released!)
The next device I'd like to implement is DeviceEFM - the external fetal heart monitor (abbreviated as EFM- "external fetal monitor", also known as cardiotocography...). It is a monitoring device used in hospitals to monitor pregnant women in labor to track the fetus's heart rate and ensure it is healthy (with a healthy heart rate). The machine tracks two waveforms: fetal heart rate and uterine contractions. The framework for the code, both WPF and C#, is mainly copy/pasted from DeviceECG and adapted.
The screen and the printout both look like this:
The top waveform strip is the fetal heart rate, measured in beats per minute (y axis) plotted over time (x axis), with normal heart rates hovering around 130-160 beats per minute. The bottom waveform strip is uterine contractions, measured more subjectively as 0-100% (y axis) plotted over time (x axis).
Steps to do for implementation (non-medical!):
Implement EFMTracing.xaml and EFMTracing.xaml.cs as the control for visualizing the graphs (unassigned)
Implement DeviceEFM.xaml and DeviceEFM.xaml.cs as the actual device screen. (unassigned)
Patient modeling for populating waveform strips in Strip.cs (not medical specific, but integrates with medical-specific functionality) (unassigned)
Then, implementing medical-specific functionality (assigned: Tanjera)
After all the recent debugging, needs testing.
Does not calculate until DeviceIABP activates? Check DABP dip w/ assisted systole logic.
Trigger refresh on frequency change.
Also check if other settings have lag time in updating.
Arterial line waveform should show lower blood pressures at end-diastole when assisted by balloon pump; after balloon deflation, arterial blood pressure lower at end-diastole than it would be if the balloon had not been pumping). Best to be compared with balloon pump in 1:2 or 1:3 ratio.
Use key stored in Access.cs. For secure inability to read/edit save filed and for storing on Server
?? ...
Mirror Patient.cs fields in a SQL server on Infirmary domain name Login to SQL by key (ssh?). Keep key protected on Git repo to prevent public access.
Mirroring places patient values into a SQL table. Store following values:
PatientEditor can have three modes: local, mirror-host and mirror-client. Local is current setup. Hosting mirror pings updates to SQL on Patient.cs PatientEvent.VitalsUpdated. Client pings SQL for updates every ? seconds for last updated time, propogates values.
Populate portions of the CVP waveform based on HasPulse_Atrial or HasPulse_Ventricular. If no atrial pulse, don't populate inflections/deflections that indicate atrial activity, etc.
Can still keep aberrant beat dampening.
Modify UI so foreground colors don't match background colors for ease of visibility.
Can add stepwise simulation, with only certain parameters changing (soft load?) on each step. Interventions to trigger next step can have their own stack of buttons someplace in PatientEditor
Link to pages on website.
!!!
Ability to save a screenshot of the rhythms/waveforms displayed on a device.
Currently, unusable (not yet implemented) devices are visible but greyed out. Hide these on release versions.
Are P-waves being overwritten on concatenation??
From Issue: #29
Implement rhythms:
Significant CPU thread load causes delays or pauses in waveform generation, presenting as brief periods of asystole when applying rhythm changes or dragging UI Window.
Attempted fix in #34. Failed.
Possible solution includes providing independent thread for Patient() object’s timers for waveform generation. Potential threading nightmare- on back-burner for now.
Try to include call stack
Pop up to alert of program update on init. Can save preference to delay alert until next update.
Add an option to run thermodilution. Display readings in a pop-up window. Values should be pulled from PatientEditor's "advanced hemodynamics" section.
Will need patient height & weight (-> BSA) for indices.
Display:
CO (4-8 L/min) ... 4-8 L/min
CI? = CO / BSA ... 2.5 - 4.0 L/min/m2
SV = CO / HR * 1000 ... 50-100 ml/beat
SI? = CI / HR * 1000 ... 25-45 ml/beat/m2
SVR = MAP - CVP / CO * 80 ... 800-1200 dynes/s/cm-5
PVR = MPAP - PDP / CO * 80 ... 50-250 dynes/s/cm-5
Limited to only 5 numerics and 5 tracings... should have more.
Would like a splash screen upon opening the program. Not really necessary, but would be nice and pretty simple to implement.
Requirements:
Student mode may have:
Instructor Mode would be what II already is :)
E.g. if there are many tracings in the window, on a small window, large waveforms (e.g. ventricular tachycardia) override the border and are truncated.
Need to implement pacing
Modify defibrillation waveform for realism?
Accession keys should be SQL-safe (not contain any ' or ` ...). Possibly should filter accession keys to only be alphanumeric.
Link to SQL database at web host, add data per program init.
Data to collect: DateTime. Infirmary version. OS. IP address? User name?
Once in sync or pacer modes, can't toggle back to defib mode.
Implement so it toggles from pacer to defib, and from sync to defib.
The ventricular ejection upstroke up the arterial blood pressure waveform should not start until after the QRS complex of the ECG tracing; it should start somewhere in the middle of the T-wave up-slope. The arterial blood pressure waveform should be phase shifted by ~200-300ms behind the ECG tracing.
Ectopic beats don't perfuse as well as regular beats. Should tag ectopic beats and adjust pressured waveforms (arterial pressure, pulse oximetry pleth) with decreased amplitude.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.