Commit 0b3a3775 authored by Aaron Bray's avatar Aaron Bray
Browse files

Documentation updates for the CDM Tables

parent f0f0f077
......@@ -5,9 +5,13 @@ package com.kitware.physiology.datamodel.doxygen;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.*;
import java.util.stream.Collectors;
import com.kitware.physiology.cdm.AnesthesiaMachineEnums.eAnesthesiaMachine;
import com.kitware.physiology.cdm.Enums.*;
import com.kitware.physiology.cdm.PatientActionEnums.*;
import com.kitware.physiology.cdm.PatientAssessmentEnums.ePatientAssessment;
import com.kitware.physiology.cdm.PatientAssessmentEnums.eUrinalysis;
import com.kitware.physiology.cdm.PatientEnums.*;
import com.kitware.physiology.datamodel.compartment.SECompartment;
......@@ -67,30 +71,60 @@ public class CDM2MD
skipProperties.add("ScenarioTime");
// PATIENT
writer.append("#### The following tables describe the patient to Pulse.\n\n");
WriteDoxyTable(SEPatient.class, "", writer, skipProperties);
WriteDoxyTable(ePatient.Event.class, "ePatient_", writer, skipProperties);
WriteDoxyTable(eBrainInjury.Type.class, "eBrainInjury_", writer, skipProperties);
WriteDoxyTable(eHemorrhage.Type.class, "eHemorrhage_", writer, skipProperties);
WriteDoxyTable(eIntubation.Type.class, "eIntubation_", writer, skipProperties);
WriteDoxyTable(eSubstanceAdministration.Route.class, "eSubstanceAdministration", writer, skipProperties);
Set<Class<? extends SEPatientAction>> pActions = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.actions", SEPatientAction.class);
for(Class<?> c : pActions)
WriteDoxyTable(ePatient.Sex.class, "ePatient_", writer, skipProperties);
writer.append("#### The following tables describe the states of the patient Pulse supports.\n\n");
WriteDoxyTable(ePatient.Event.class, "ePatient_", writer, skipProperties);
// PATIENT CONDITIONS
writer.append("#### The following tables describe the conditions that can be applied to the patient before starting the simulation.\n\n");
Set<Class<? extends SEPatientCondition>> pConditions = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.conditions", SEPatientCondition.class);
List<Class<? extends Object>> pConditionsSorted = pConditions.stream().collect(Collectors.toList());
Collections.sort(pConditionsSorted, (o1, o2) -> o1.getName().compareTo(o2.getName()));
for(Class<?> c : pConditionsSorted)
WriteDoxyTable(c, "", writer, skipProperties);
// PHYSIOLOGY
writer.append("#### The following tables describe the system data that is calculated each time step.\n\n");
Set<Class<? extends Object>> phys = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.physiology");
List<Class<? extends Object>> physSorted = phys.stream().collect(Collectors.toList());
Collections.sort(physSorted, (o1, o2) -> o1.getName().compareTo(o2.getName()));
for(Class<?> c : physSorted)
WriteDoxyTable(c, "", writer, skipProperties);
// PATIENT ACTIONS/CONDITIONS/ASSESSMENTS
writer.append("#### The following tables describe the are actions that may be performed on the patient\n\n");
Set<Class<? extends SEPatientAction>> pActions = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.actions", SEPatientAction.class);
List<Class<? extends SEPatientAction>> pActionsSorted = pActions.stream().collect(Collectors.toList());
Collections.sort(pActionsSorted, (o1, o2) -> o1.getName().compareTo(o2.getName()));
for(Class<?> c : pActionsSorted)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends SEConsciousRespirationCommand>> cmds = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.actions", SEConsciousRespirationCommand.class);
for(Class<?> c : cmds)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends SEPatientCondition>> pConditions = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.conditions", SEPatientCondition.class);
for(Class<?> c : pConditions)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends SEPatientAssessment>> pAsses = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.assessments", SEPatientAssessment.class);
WriteDoxyTable(eBrainInjury.Type.class, "eBrainInjury_", writer, skipProperties);
WriteDoxyTable(eHemorrhage.Type.class, "eHemorrhage_", writer, skipProperties);
WriteDoxyTable(eIntubation.Type.class, "eIntubation_", writer, skipProperties);
WriteDoxyTable(eSubstanceAdministration.Route.class, "eSubstanceAdministration_", writer, skipProperties);
Set<Class<? extends Object>> pNutrition = FindObjects.findAllClasses("com.kitware.physiology.datamodel.patient.nutrition");
for(Class<?> c : pNutrition)
WriteDoxyTable(c, "", writer, skipProperties);
writer.append("#### The following tables describe the assessments that may be performed on the patient\n\n");
Set<Class<? extends SEPatientAssessment>> pAsses = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.patient.assessments", SEPatientAssessment.class);
for(Class<?> c : pAsses)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends Object>> pNutrition = FindObjects.findAllClasses("com.kitware.physiology.datamodel.patient.nutrition");
for(Class<?> c : pNutrition)
WriteDoxyTable(c, "", writer, skipProperties);
WriteDoxyTable(ePatientAssessment.Type.class, "ePatientAssessment_", writer, skipProperties);
WriteDoxyTable(eUrinalysis.PresenceIndicator.class, "eUrinalysis_", writer, skipProperties);
WriteDoxyTable(eUrinalysis.ClarityIndicator.class, "eUrinalysis_", writer, skipProperties);
WriteDoxyTable(eUrinalysis.UrineColor.class, "eUrinalysis_", writer, skipProperties);
WriteDoxyTable(eUrinalysis.MicroscopicObservationType.class, "eUrinalysis_", writer, skipProperties);
WriteDoxyTable(eUrinalysis.MicroscopicObservationAmount.class, "eUrinalysis_", writer, skipProperties);
// ENVIRONMENT
Set<Class<? extends Object>> env = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.environment");
writer.append("#### The following tables describe the external environment that surrounds the patient\n\n");
Set<Class<? extends Object>> env = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.environment");
for(Class<?> c : env)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends SEEnvironmentAction>> eActions = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.system.environment.actions", SEEnvironmentAction.class);
......@@ -101,7 +135,8 @@ public class CDM2MD
WriteDoxyTable(c, "", writer, skipProperties);
// ANESTHESIA MACHINE
WriteDoxyTable(eAnesthesiaMachine.Event.class, "Anesthesia", writer, skipProperties);
writer.append("#### The following tables describe the anesthesia machine\n\n");
WriteDoxyTable(eAnesthesiaMachine.Event.class, "Anesthesia", writer, skipProperties);
Set<Class<? extends Object>> anes = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.equipment.anesthesia");
for(Class<?> c : anes)
WriteDoxyTable(c, "", writer, skipProperties);
......@@ -110,25 +145,23 @@ public class CDM2MD
WriteDoxyTable(c, "", writer, skipProperties);
// ECG
Set<Class<? extends Object>> ecg = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.equipment.electrocardiogram");
writer.append("#### The following tables describe the ECG\n\n");
Set<Class<? extends Object>> ecg = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.equipment.electrocardiogram");
for(Class<?> c : ecg)
WriteDoxyTable(c, "", writer, skipProperties);
// INHALER
Set<Class<? extends Object>> inhaler = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.equipment.inhaler");
writer.append("#### The following tables describe the inhaler\n\n");
Set<Class<? extends Object>> inhaler = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.equipment.inhaler");
for(Class<?> c : inhaler)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends SEInhalerAction>> iActions = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.system.equipment.inhaler.actions", SEInhalerAction.class);
for(Class<?> c : iActions)
WriteDoxyTable(c, "", writer, skipProperties);
// PHYSIOLOGY
Set<Class<? extends Object>> phys = FindObjects.findAllClasses("com.kitware.physiology.datamodel.system.physiology");
for(Class<?> c : phys)
WriteDoxyTable(c, "", writer, skipProperties);
// SUBSTSANCE
Set<Class<? extends Object>> subs = FindObjects.findAllClasses("com.kitware.physiology.datamodel.substance");
writer.append("#### The following tables describe substances used in Pulse\n\n");
Set<Class<? extends Object>> subs = FindObjects.findAllClasses("com.kitware.physiology.datamodel.substance");
for(Class<?> c : subs)
WriteDoxyTable(c, "", writer, skipProperties);
Set<Class<? extends Object>> subQs = FindObjects.findAllClasses("com.kitware.physiology.datamodel.substance.quantity");
......@@ -136,15 +169,24 @@ public class CDM2MD
WriteDoxyTable(c, "", writer, skipProperties);
// COMPARTMENT
Set<Class<? extends SECompartment>> cmpts = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.compartment",SECompartment.class);
writer.append("#### The following tables describe anatomical compartments\n\n");
Set<Class<? extends SECompartment>> cmpts = FindObjects.findClassSubTypes("com.kitware.physiology.datamodel.compartment",SECompartment.class);
for(Class<?> c : cmpts)
WriteDoxyTable(c, "", writer, skipProperties);
// SCENARIO
Set<Class<? extends Object>> sce = FindObjects.findAllClasses("com.kitware.physiology.datamodel.scenario");
writer.append("#### The following tables describe a simulation scenario\n\n");
Set<Class<? extends Object>> sce = FindObjects.findAllClasses("com.kitware.physiology.datamodel.scenario");
for(Class<?> c : sce)
WriteDoxyTable(c, "", writer, skipProperties);
// General Enums
writer.append("#### The following tables describe general enumerations\n\n");
WriteDoxyTable(eSide.class, "", writer, skipProperties);
WriteDoxyTable(eGate.class, "", writer, skipProperties);
WriteDoxyTable(eSwitch.class, "", writer, skipProperties);
WriteDoxyTable(eCharge.class, "", writer, skipProperties);
writer.close();
}
......@@ -216,33 +258,13 @@ public class CDM2MD
writer.println("");
writer.println("@anchor "+StringUtils.removeSpaces(tableName)+"Table");
if(c.isEnum())
writer.println("## "+tableName);
writer.println("##### "+tableName);
else
{
if (tableNameLinks.contains(tableName))
writer.println("## %"+tableName);
writer.println("##### %"+tableName);
else
writer.println("## "+tableName);
/*
String tName = StringUtils.spaceCamelCase(tableName);
String[] words = tName.split(" ");
if(words.length>0)
{
tName = "";
for(String word : words)
tName += "%"+word+" ";
}
else if(!tName.trim().isEmpty())
{
tName = "%"+tName;
}
if (tName.trim().length()>1)
// Put a % before each word, so it does not link to classes
writer.println("## "+tName);
else
tName = "";
*/
writer.println("##### "+tableName);
}
writer.println(descPrepend+"");
......@@ -289,8 +311,8 @@ public class CDM2MD
}
else if(bag.propertyName.equals("GasFraction"))
{
writer.print("|"+"List of SESubstanceFractionAmount");
writer.print("|"+"@ref SubstanceFractionAmountTable");
writer.print("|"+"List of SESubstanceFraction");
writer.print("|"+"@ref SubstanceFractionTable");
}
else if(bag.propertyName.equals("Aerosol"
+ ""))
......@@ -337,6 +359,7 @@ public class CDM2MD
{
Log.error("Error writing cdm table for "+tableName,ex);
}
writer.print("\n<hr>\n");
}
protected static String pad(String s, int max)
{
......
......@@ -62,6 +62,10 @@ public class SECardiacArrest extends SEPatientAction
{
this.state = (s==eSwitch.NullSwitch) ? eSwitch.Off : s;
}
public boolean hasState()
{
return this.state==null || this.state==eSwitch.NullSwitch ? false : true;
}
public String toString()
{
......
......@@ -73,7 +73,7 @@ public class SEChestOcclusiveDressing extends SEPatientAction
}
public boolean hasSide()
{
return side == null ? false : true;
return side == null ? false : side!=eSide.NullSide;
}
public eSwitch getState()
......@@ -84,6 +84,10 @@ public class SEChestOcclusiveDressing extends SEPatientAction
{
this.state = (s==eSwitch.NullSwitch) ? eSwitch.Off : s;
}
public boolean hasState()
{
return state == null ? false : state!=eSwitch.NullSwitch;
}
public String toString()
{
......
......@@ -110,6 +110,10 @@ public class SEHemorrhage extends SEPatientAction
{
type = t;
}
public boolean hasType()
{
return type != null;
}
public String toString()
{
......
......@@ -56,7 +56,7 @@ public class SESubstanceBolus extends SEPatientAction
public boolean isValid()
{
return hasAdminRoute() && hasDose() && hasConcentration() && hasSubstance();
return hasAdministrationRoute() && hasDose() && hasConcentration() && hasSubstance();
}
public static void load(SubstanceBolusData src, SESubstanceBolus dst)
......@@ -84,21 +84,21 @@ public class SESubstanceBolus extends SEPatientAction
dst.setDose(SEScalarVolume.unload(src.dose));
if (src.hasConcentration())
dst.setConcentration(SEScalarMassPerVolume.unload(src.concentration));
if (src.hasAdminRoute())
if (src.hasAdministrationRoute())
dst.setAdministrationRoute(src.adminRoute);
if (src.hasSubstance())
dst.setSubstance(src.substance.getName());
}
public Route getAdminRoute()
public Route getAdministrationRoute()
{
return adminRoute;
}
public void setAdminRoute(Route adminRoute)
public void setAdministrationRoute(Route adminRoute)
{
this.adminRoute = adminRoute;
}
public boolean hasAdminRoute()
public boolean hasAdministrationRoute()
{
return adminRoute == null ? false : true;
}
......@@ -139,7 +139,7 @@ public class SESubstanceBolus extends SEPatientAction
+ "\n\tDose: " + getDose()
+ "\n\tConcentration: " + getConcentration()
+ "\n\tSubstance: " + getSubstance().getName()
+ "\n\tAdministration Route: " + getAdminRoute();
+ "\n\tAdministration Route: " + getAdministrationRoute();
else
return "Action not specified properly";
}
......
......@@ -23,6 +23,7 @@ import org.reflections.util.*;
*/
public class FindObjects
{
/**
* Examine the system and find all classes of a specific type
* Instantiate all modules and put them in a list.
......
......@@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME = Physiology Engine
PROJECT_NAME = Pulse
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
......
<center>
<img src="./Images/PulseLogo.png" alt="Pulse Physiology Engine">
</center>
Distributed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0.</a>
See accompanying <a href="https://gitlab.kitware.com/physiology/engine/blob/master/NOTICE">NOTICE</a> file for details.
......@@ -29,26 +32,24 @@ Check out the @ref ExtraFAQ for more insight.
- - -
## What's new in Pulse v1.1 (June 25th, 2018)
## What's new in Pulse v2.0 (Jan 20th, 2018)
The latest code base includes the following notable updates:
- Updated Wiki for using Pulse in your application
- Added C# example interface
- Refactored respiratory system for improvements determining the transition between inhale and exhale
- Important for determining correct vital signs (e.g., respiration rate, tidal volume, end tidal CO2)
- Most noticeable improvement is with external sources, such as a ventilator
- Added aerosols (e.g., albuterol) to the mechanical ventilator
- Added the ability to remove the cardiac arrest action and transition from asystole to normal sinus
- Added norepinephrine to the drug library
- Switched the included logger from log4cpp to log4cplus
- Updated to the latest versions of Eigen and Protobufs
- Transitioned results file extension from .txt to .csv
- Exposed action and condition information via the API
- Improved exception handling
- Discretized verification data sets for easier management
- Cleaned up headers
- CMake build improvements
- Pulse builds and runs on single board pc's and all major operating systems
- Software Architecture
- Converted ASCII file I/O to JSON (Compliant to Protobuf IDLs)
- Updated Engine Interface to support Both ASCII and Binary serialization
- Started a formal C# CDM Library for use in .NET applications
- Created a C interface to Pulse for external application integration
- Updated to the latest versions of Eigen/Protobufs/log4cplus
- Unity integration support and examples
- Physiology Models
- Internal Hemorrhage Support
- External hemorrhage from specific compartments (only Vena Cava before)
- Added support for Packed Red Blood Cells infusion
- Added dissolved oxygen and carbon dioxide to IV fluids to resolve issues with fluid resuscitation
(Interested in a previous @ref version?)
......@@ -56,10 +57,8 @@ The latest code base includes the following notable updates:
## Planned Software Improvements
- Offical contribution plan for pulling/merging methodology changes
- Official contribution plan for pulling/merging methodology changes
- Modularity improvements for model swapping
- Public CDash server integration
- Unity Game Integration Example
- - -
......
......@@ -5,9 +5,9 @@ simulator that will drive medical education, research, and training technologies
The engine enables accurate and consistent physiology simulation across the medical community.
The engine can be used as a standalone application or integrated with simulators, sensor interfaces, and models of all fidelities.
We plan to further advance the engine and explore new avenues of research, such as pediatrics, patient-specific modeling and virtual surgery planning/rehearsal.
<img src="./Images/PulseRunner.png" width="550">
<center>
<img src="./Images/PulseRunner.png" width="550" align="middle">
</center>
The Pulse Physiology Engine is a fork of the BioGears Physiology Engine.
This fork was driven by several community needs, including:
......@@ -77,7 +77,9 @@ There is a wide range of potential applications, a few include:
- Pairing with virtual surgery planning/rehearsal
## What can the physiology engine do?
<center>
<img src="./Images/PulseMontage.png" width="365">
</center>
An instance of an engine models a single patient's physiology.
- The patient is defined by parameters, such as height, weight, systolic and diastolic pressure.
......@@ -93,10 +95,13 @@ The Pulse Physiology Engine is a powerful tool in computing the physiological re
However, without a visualization tool the information is difficult to understand.
As part of the Kitware physiology repository, we have developed a new visualization tool built on Qt and ParaView to provide a visualization tool to use and display the data generated by the physiology engine.
<img src="./Images/PulseExplorer-ParaView.png" width="365">
<center><em>
For more information on getting and using this tool, visit the Explorer [Wiki](https://gitlab.kitware.com/physiology/explorer/wikis/home)
</em></center>
<center>
<img src="./Images/PulseExplorer-ParaView.png" width="365"/>
<em>
For more information on getting and using this tool, visit [the Explorer Wiki](https://gitlab.kitware.com/physiology/explorer/wikis/home)
</em>
</center>
## What kind of data can I get from the physiology engine?
......
......@@ -13,6 +13,27 @@ This versioning follows the <a href="http://semver.org">Semantic Versioning 2.0.
## Pulse Version History
### Pulse v1.1 (June 25th, 2018)
The latest code base includes the following notable updates:
- Updated Wiki for using Pulse in your application
- Added C# example interface
- Refactored respiratory system for improvements determining the transition between inhale and exhale
- Important for determining correct vital signs (e.g., respiration rate, tidal volume, end tidal CO2)
- Most noticeable improvement is with external sources, such as a ventilator
- Added aerosols (e.g., albuterol) to the mechanical ventilator
- Added the ability to remove the cardiac arrest action and transition from asystole to normal sinus
- Added norepinephrine to the drug library
- Switched the included logger from log4cpp to log4cplus
- Updated to the latest versions of Eigen and Protobufs
- Transitioned results file extension from .txt to .csv
- Exposed action and condition information via the API
- Improved exception handling
- Discretized verification data sets for easier management
- Cleaned up headers
- CMake build improvements
- Pulse builds and runs on single board pc's and all major operating systems
### Pulse v1.0 (September 1st, 2017) included the following notable updates:
- Fixed multi-platform compiling bugs
- Moved from an in-source to out-of-source build
......
......@@ -3,31 +3,35 @@ package cdm;
option java_package = "com.kitware.physiology.cdm";
option optimize_for = SPEED;
/** @brief Enumeration for left/right side */
enum eSide
{
NullSide = 0;
Left = 1;
Right = 2;
NullSide = 0;/**<< @brief Not provided */
Left = 1;/**<< @brief Left side. */
Right = 2;/**<< @brief Right side. */
}
/** @brief Enumeration for an open/closed gate */
enum eGate
{
NullGate = 0;
Open = 1;
Closed = 2;
NullGate = 0;/**<< @brief Not provided */
Open = 1;/**<< @brief Gate is open. */
Closed = 2;/**<< @brief Gate is closed. */
}
/** @brief Enumeration for a on/off switch */
enum eSwitch
{
NullSwitch = 0;
Off = 1;
On = 2;
NullSwitch = 0;/**<< @brief Not provided */
Off = 1;/**<< @brief Switch is off. */
On = 2;/**<< @brief Switch is on. */
}
/** @brief Enumeration for electrical charge */
enum eCharge
{
NullCharge = 0;/** @brief Not provided */
Negative = 1;
Neutral = 2;
Positive = 3;
NullCharge = 0;/**<< @brief Not provided */
Negative = 1;/**<< @brief Charge is negative. */
Neutral = 2;/**<< @brief Charge is neutral. */
Positive = 3;/**<< @brief Charge is positive. */
}
......@@ -12,13 +12,13 @@ message PatientData
/** @brief An active patient event, and how long it has been active */
message ActiveEventData
{
ePatient.Event Event = 1; /**<< @brief The active event. */
ePatient.Event Event = 1; /**<< @ref ePatient_EventTable. */
ScalarTimeData Duration = 2; /**<< @brief The duration since last activated. */
}
/** Physical Characteristics */
string Name = 1; /**<< @brief Patient Identifier. */
ePatient.Sex Sex = 2; /**<< @brief @copybrief PatientData_eSex */
ePatient.Sex Sex = 2; /**<< @brief @ref ePatient_SexTable */
ScalarTimeData Age = 3; /**<< @brief Patient age. */
ScalarMassData Weight = 4; /**<< @brief Patient weight. */
ScalarLengthData Height = 5; /**<< @brief Patient height. */
......
......@@ -3,31 +3,33 @@ package cdm;
option java_package = "com.kitware.physiology.cdm";
option optimize_for = SPEED;
/** @brief Types of Brain Injury that provided different nervous responses.*/
message eBrainInjury
{
/** @brief Types of Brain Injury that provided different nervous responses.*/
enum Type
{
Diffuse = 0; /**<< @brief A brain injury dialating both eye pupils */
LeftFocal = 1; /**<< @brief A brain injury dialating the left eye pupil */
RightFocal = 2; /**<< @brief A brain injury dialating the right eye pupil */
Diffuse = 0; /**<< @brief A brain injury dilating both eye pupils */
LeftFocal = 1; /**<< @brief A brain injury dilating the left eye pupil */
RightFocal = 2; /**<< @brief A brain injury dilating the right eye pupil */
}
}
/** @brief Types of Hemorrhages.*/
message eHemorrhage
{
/** @brief Types of Hemorrhages.*/
enum Type
{
External = 0; /**<< @brief Hemorrhage blood of the body */
Internal = 1; /**<< @brief Hemorrhage blood into a body cavity*/
External = 0; /**<< @brief A loss of blood from the vascular system out of the body */
Internal = 1; /**<< @brief A loss of blood from the vascular system into a body cavity or space. */
}
}
/** @brief Types of Intubation.*/
message eIntubation
{
/** @brief Enumeration Types of Intubation.*/
enum Type
{
Off = 0; /**<< @brief Remove intubation */
......@@ -38,9 +40,10 @@ message eIntubation
}
}
/** @brief Types of Substance Administration means.*/
message eSubstanceAdministration
{
/** @brief Types of Substance Administration means.*/
enum Route
{
Intravenous = 0; /**<< @brief Injection into a vein */
......
......@@ -50,28 +50,28 @@ message PatientActionData
message PatientAssessmentRequestData
{
PatientActionData PatientAction = 1;
ePatientAssessment.Type Type = 2;
ePatientAssessment.Type Type = 2;/**<<@brief @ref ePatientAssessment_TypeTable */
}
/** @brief Fight or flight. The body prepares to defend itself. */
message AcuteStressData
{
PatientActionData PatientAction = 1;
Scalar0To1Data Severity = 2;/**<<@brief */
Scalar0To1Data Severity = 2;/**<<@brief Scale of affect, 0 being none, 1 being the highest possible. */
}
/** @brief A blockage of the Airway leading to no respiration/air flow in or out of the body. */