Index: leahi.pro =================================================================== diff -u -r08ffb068817ab0bb1c7f2fe2705986142ac68601 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- leahi.pro (.../leahi.pro) (revision 08ffb068817ab0bb1c7f2fe2705986142ac68601) +++ leahi.pro (.../leahi.pro) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -171,9 +171,11 @@ sources/model/fp/data/MFPROPumpData.h \ sources/model/fp/data/MFPTemperatureData.h \ sources/model/fp/data/MFPValvesStatesData.h \ + sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.h \ sources/model/td/adjustment/settings/MAdjustTDSerialNumberResponse.h \ sources/model/td/adjustment/settings/MAdjustTDVersionsRequest.h \ sources/model/td/adjustment/settings/MAdjustTDVersionsResponse.h \ + sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.h \ sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.h \ sources/model/td/data/MTDAirBubbleData.h \ sources/model/td/data/MTDAirPumpData.h \ @@ -228,6 +230,8 @@ sources/view/fp/data/VFPTemperatureData.h \ sources/view/fp/data/VFPValvesStatesData.h \ sources/view/hd/data/VTreatmentRanges.h \ + sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.h \ + sources/view/settings/VAdvancedInstitutionalRecord.h \ sources/view/td/data/VTDAirBubbleData.h \ sources/view/td/data/VTDAirPumpData.h \ sources/view/td/data/VTDAirTrapData.h \ @@ -241,6 +245,8 @@ sources/model/td/adjustment/treatment/MTreatmentAdjustSalineResponse.h \ \ # ---------- Models - TD - Adjustment - Settings sources/model/td/adjustment/settings/MAdjustTDDateTimeResponse.h \ + sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.h \ + sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.h \ \ # ---------- Models - DD - Adjustment - Settings sources/model/dd/adjustment/settings/MAdjustDDDateTimeResponse.h \ \ # ---------- Models - confirm @@ -259,7 +265,6 @@ sources/model/hd/adjustment/settings/MAdjustHDServiceModeResponse.h \ sources/model/dg/adjustment/settings/MAdjustDGServiceDatesResponse.h \ sources/model/hd/adjustment/settings/MAdjustHDServiceDatesResponse.h \ - sources/model/hd/adjustment/settings/MAdjustHDInstitutionalRecordResponse.h \ sources/model/dg/adjustment/settings/MDuetRoWaterDG.h \ \ # ---------- Models - Alarm sources/model/hd/alarm/MAlarmStatusData.h \ @@ -382,6 +387,7 @@ sources/view/settings/VCloudSync.h \ sources/view/settings/VHDUsageInfo.h \ sources/view/settings/VAdjustmentInstitutionalRecord.h \ + sources/view/settings/VInstitutionalRecord.h \ \ # ---------- Views - TD - Adjustment - In-Treatment sources/view/td/adjustment/treatment/VTreatmentAdjustmentUltrafiltrationState.h \ sources/view/td/adjustment/treatment/VTreatmentAdjustmentUltrafiltrationEdit.h \ @@ -502,9 +508,11 @@ sources/model/fp/data/MFPROPumpData.cpp \ sources/model/fp/data/MFPTemperatureData.cpp \ sources/model/fp/data/MFPValvesStatesData.cpp \ + sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.cpp \ sources/model/td/adjustment/settings/MAdjustTDSerialNumberResponse.cpp \ sources/model/td/adjustment/settings/MAdjustTDVersionsRequest.cpp \ sources/model/td/adjustment/settings/MAdjustTDVersionsResponse.cpp \ + sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.cpp \ sources/model/td/adjustment/treatment/MTreatmentAdjustVitalsResponse.cpp \ sources/model/td/data/MTDAirBubbleData.cpp \ sources/model/td/data/MTDAirPumpData.cpp \ @@ -572,7 +580,6 @@ sources/model/hd/adjustment/settings/MAdjustHDServiceModeResponse.cpp \ sources/model/dg/adjustment/settings/MAdjustDGServiceDatesResponse.cpp \ sources/model/hd/adjustment/settings/MAdjustHDServiceDatesResponse.cpp \ - sources/model/hd/adjustment/settings/MAdjustHDInstitutionalRecordResponse.cpp \ sources/model/dg/adjustment/settings/MDuetRoWaterDG.cpp \ \ # ---------- Models - Alarm sources/model/hd/alarm/MAlarmStatusData.cpp \ @@ -587,6 +594,8 @@ sources/model/td/adjustment/treatment/MTreatmentAdjustSalineResponse.cpp \ \ # ---------- Models - TD - Adjustment - Settings sources/model/td/adjustment/settings/MAdjustTDDateTimeResponse.cpp \ + sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.cpp \ + sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.cpp \ \ # ---------- Models - DD - Adjustment - Settings sources/model/dd/adjustment/settings/MAdjustDDDateTimeResponse.cpp \ \ # ---------- Models - HD - Adjustment @@ -676,6 +685,8 @@ sources/view/VGeneralEvent.cpp \ sources/device/DeviceView.cpp \ \ # ---------- Views - TD - States Data + sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.cpp \ + sources/view/settings/VAdvancedInstitutionalRecord.cpp \ sources/view/td/data/VTDAirBubbleData.cpp \ sources/view/td/data/VTDAirPumpData.cpp \ sources/view/td/data/VTDAirTrapData.cpp \ @@ -709,6 +720,7 @@ sources/view/settings/VAdjustmentDGCleaningUsage.cpp \ sources/view/settings/VHDUsageInfo.cpp \ sources/view/settings/VAdjustmentInstitutionalRecord.cpp \ + sources/view/settings/VInstitutionalRecord.cpp \ \ # ---------- Views - HD - Adjustment sources/view/VAdjustmentResponseBase.cpp \ \ # ---------- Views - HD - Adjustment - common Index: leahi.qrc =================================================================== diff -u -r1f9e84f74ead9e10577c8caa204c6eb911e12ab8 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- leahi.qrc (.../leahi.qrc) (revision 1f9e84f74ead9e10577c8caa204c6eb911e12ab8) +++ leahi.qrc (.../leahi.qrc) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -27,6 +27,7 @@ sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml sources/gui/qml/pages/settings/SettingsLocalization.qml sources/gui/qml/pages/settings/SettingsUserMode.qml + sources/gui/qml/pages/settings/SettingsAdvancedInstitutional.qml sources/gui/qml/dialogs/ConfirmDialog.qml @@ -180,6 +181,8 @@ sources/gui/qml/compounds/LabelUnitContainer.qml sources/gui/qml/compounds/ValueAdjuster.qml sources/gui/qml/compounds/TreatmentAdjustmentUltrafiltrationMetrics.qml + sources/gui/qml/compounds/InstitutionalContainer.qml + sources/gui/qml/compounds/ValueAdjusterCustom.qml qtquickcontrols2.conf Index: main.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- main.cpp (.../main.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ main.cpp (.../main.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -544,7 +544,7 @@ //! - Qt Application initialization and parameters settings // Qt Core Application parameters settings - QApplication::setApplicationName(QLatin1String("Denali")); + QApplication::setApplicationName(QLatin1String("Leahi")); QApplication::setOrganizationName(QLatin1String("Diality Inc.")); //! - Check the required font(s) present and can be loaded Index: sources/ApplicationController.cpp =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -669,12 +669,22 @@ * \details Sends an institutional record request */ void ApplicationController::institutionalRequest() { - AdjustInstitutionalRequestData adjustInstitutionalRequestData; - emit didAdjustment(adjustInstitutionalRequestData); + InstitutionalRequestData InstitutionalRequestData; + emit didAdjustment(InstitutionalRequestData); LOG_DEBUG("POSTInstitutionalRecordReq Sent"); } /*! + * \brief ApplicationController::institutionalRequest + * \details Sends an institutional record request + */ +void ApplicationController::advancedInstitutionalRequest() { + AdvancedInstitutionalRequestData AdvancedInstitutionalRequestData; + emit didAdjustment(AdvancedInstitutionalRequestData); + LOG_DEBUG("POSTAdvancedInstitutionalRecordReq Sent"); +} + +/*! * \brief ApplicationController::onstartPOST * \details The POST entry point * - Sends the first async check-in to the HD to let HD know it can start it's POST and UI is ready to communicate. @@ -732,9 +742,10 @@ // UI is done, let HD start the communication [ UI Check-in is the HD commjunication listener starter ] checkIn(); emit didCheckInBegin (); - alarmTrigger (Gui::GuiAlarmID::ALARM_ID_NO_ALARM, true); // send queued fails - postDoneRequest (); // send HD the POST result - versionsRequest (); // send HD the version request - institutionalRequest (); // send HD the institutional record request + alarmTrigger (Gui::GuiAlarmID::ALARM_ID_NO_ALARM, true); // send queued fails + postDoneRequest (); // send HD the POST result + versionsRequest (); // send HD the version request + institutionalRequest (); // send TD the institutional record request + advancedInstitutionalRequest (); // send TD the advanced institutional record request emit didPOSTPass (_post.isDone( )); // GuiController -> GuiView : didPOSTPass(bool) } Index: sources/ApplicationController.h =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/ApplicationController.h (.../ApplicationController.h) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/ApplicationController.h (.../ApplicationController.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -84,6 +84,7 @@ void postDoneRequest(); void versionsRequest(); void institutionalRequest(); + void advancedInstitutionalRequest(); void alarmTrigger (Gui::GuiAlarmID vAlarmID, bool vSend = false, bool vSingle = false); Index: sources/canbus/MessageDispatcher.cpp =================================================================== diff -u -r08ffb068817ab0bb1c7f2fe2705986142ac68601 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision 08ffb068817ab0bb1c7f2fe2705986142ac68601) +++ sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -818,18 +818,136 @@ /*! * \brief MessageDispatcher::onAdjustment - * \details This method transmits the HD institutional record request to HD. + * \details This method transmits adjusting the TD institutional record request to TD. * \param vData - * \return void */ -void MessageDispatcher::onAdjustment(const AdjustInstitutionalRequestData &) +void MessageDispatcher::onAdjustment(const AdjustInstitutionalRequestData &vData) { - QVariantList mData; + QVariantList mData ; + mData += vData.mBloodFlowMin ; + mData += vData.mBloodFlowMax ; + mData += vData.mBloodFlowDef ; + mData += vData.mDialysateFlowMin ; + mData += vData.mDialysateFlowMax ; + mData += vData.mDialysateFlowDef ; + mData += vData.mTreatmentDurationMin ; + mData += vData.mTreatmentDurationMax ; + mData += vData.mTreatmentDurationDef ; + mData += vData.mHepBolusVolumeMin ; + mData += vData.mHepBolusVolumeMax ; + mData += vData.mHepBolusVolumeDef ; + mData += vData.mHepDispRateMin ; + mData += vData.mHepDispRateMax ; + mData += vData.mHepDispRateDef ; + mData += vData.mHepStopTimeMin ; + mData += vData.mHepStopTimeMax ; + mData += vData.mDialysateTempMin ; + mData += vData.mDialysateTempMax ; + mData += vData.mDialysateTempDef ; + mData += vData.mPotassiumMin ; + mData += vData.mPotassiumMax ; + mData += vData.mCalciumMin ; + mData += vData.mCalciumMax ; + mData += vData.mDialysateBicarbonateMin ; + mData += vData.mDialysateBicarbonateMax ; + mData += vData.mDialysateBicarbonateDef ; + mData += vData.mDialysateSodiumMin ; + mData += vData.mDialysateSodiumMax ; + mData += vData.mDialysateSodiumDef ; + mData += vData.mFluidBolusVolumeMin ; + mData += vData.mFluidBolusVolumeMax ; + mData += vData.mFluidBolusVolumeDef ; + mData += vData.mArterialWindowMin ; + mData += vData.mArterialWindowMax ; + mData += vData.mArterialWindowDef ; + mData += vData.mVenousWindowMin ; + mData += vData.mVenousWindowMax ; + mData += vData.mVenousWindowDef ; + mData += vData.mVenousAsymmetricMin ; + mData += vData.mVenousAsymmetricMax ; + mData += vData.mVenousAsymmetricDef ; + mData += vData.mTMPWindowMin ; + mData += vData.mTMPWindowMax ; + mData += vData.mTMPWindowDef ; + mData += vData.mUltrafiltrationVolumeMin ; + mData += vData.mUltrafiltrationVolumeMax ; + mData += vData.mUltrafiltrationVolumeDef ; + mData += vData.mVitalsIntervalDef ; + mData += vData.mRinsebackVolumeMin ; + mData += vData.mRinsebackVolumeMax ; + mData += vData.mRinsebackVolumeDef ; + mData += vData.mRinsebackFlowRateMin ; + mData += vData.mRinsebackFlowRateMax ; + mData += vData.mRinsebackFlowRateDef ; + mData += vData.mSubstitutionVolumeMin ; + mData += vData.mSubstitutionVolumeMax ; + mData += vData.mSubstitutionVolumeDef ; + onActionTransmit(GuiActionType::ID_AdjustInstitutionalRecordReq, mData); } /*! * \brief MessageDispatcher::onAdjustment + * \details This method transmits the TD institutional record request to TD. + * \param vData - + * \return void + */ +void MessageDispatcher::onAdjustment(const InstitutionalRequestData &) +{ + QVariantList mData; + onActionTransmit(GuiActionType::ID_InstitutionalRecordReq, mData); +} + +/*! + * \brief MessageDispatcher::onAdjustment + * \details This method transmits the TD institutional record request to TD. + * \param vData - + * \return void + */ +void MessageDispatcher::onAdjustment(const AdvancedInstitutionalRequestData &) +{ + QVariantList mData; + onActionTransmit(GuiActionType::ID_AdvancedInstitutionalRecordReq, mData); +} + +/*! + * \brief MessageDispatcher::onAdjustment + * \details This method transmits adjusting the TD advanced institutional record request to TD. + * \param vData - + * \return void + */ +void MessageDispatcher::onAdjustment(const AdjustAdvancedInstitutionalRequestData &vData) +{ + QVariantList mData ; + mData += vData.mMinRORejectionRatioAlarmMin ; + mData += vData.mMinRORejectionRatioAlarmMax ; + mData += vData.mMinRORejectionRatioAlarmDef ; + mData += vData.mDisinfectionFrequencyMin ; + mData += vData.mDisinfectionFrequencyMax ; + mData += vData.mDisinfectionFrequencyDef ; + mData += vData.mDisinfectionParametersCycleTimeMin; + mData += vData.mDisinfectionParametersCycleTimeMax; + mData += vData.mDisinfectionParametersCycleTimeDef; + mData += vData.mMaxBloodPumpStopTimeMin ; + mData += vData.mMaxBloodPumpStopTimeMax ; + mData += vData.mMaxBloodPumpStopTimeDef ; + mData += vData.mInletWaterCondLowThresholdMin ; + mData += vData.mInletWaterCondLowThresholdMax ; + mData += vData.mInletWaterCondLowThresholdDef ; + mData += vData.mInletWaterCondHighThresholdMin ; + mData += vData.mInletWaterCondHighThresholdMax ; + mData += vData.mInletWaterCondHighThresholdDef ; + mData += vData.mChlorineWaterSampleCheckMin ; + mData += vData.mChlorineWaterSampleCheckMax ; + mData += vData.mChlorineWaterSampleCheckDef ; + mData += vData.mWaterSampleTestResultRequiredDef ; + + onActionTransmit(GuiActionType::ID_AdjustAdvancedInstitutionalRecordReq, mData); +} + +/*! + * \brief MessageDispatcher::onAdjustment * \details This method transmits the Disposables Removal Confirm Adjustment Denali message. * \param vData - Data model contains Service Mode adjustment. * \return void Index: sources/canbus/MessageDispatcher.h =================================================================== diff -u -r08ffb068817ab0bb1c7f2fe2705986142ac68601 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/canbus/MessageDispatcher.h (.../MessageDispatcher.h) (revision 08ffb068817ab0bb1c7f2fe2705986142ac68601) +++ sources/canbus/MessageDispatcher.h (.../MessageDispatcher.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -160,6 +160,9 @@ GuiActionType::ID_AdjustDDDateTimeReq , GuiActionType::ID_HDUsageInfoReq , GuiActionType::ID_AdjustInstitutionalRecordReq , + GuiActionType::ID_InstitutionalRecordReq , + GuiActionType::ID_AdjustAdvancedInstitutionalRecordReq , + GuiActionType::ID_AdvancedInstitutionalRecordReq , // Treatment Log GuiActionType::ID_AdjustTreatmentLogReq , GuiActionType::ID_TreatmentLogAvrgeData , Index: sources/canbus/MessageGlobals.h =================================================================== diff -u -r08ffb068817ab0bb1c7f2fe2705986142ac68601 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision 08ffb068817ab0bb1c7f2fe2705986142ac68601) +++ sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -300,9 +300,18 @@ {Gui::GuiActionType::ID_HDGeneralEvent , 5 * 4 }, // 5 parameters each 4bytes {Gui::GuiActionType::ID_DGGeneralEvent , 5 * 4 }, // 5 parameters each 4bytes - {Gui::GuiActionType::ID_AdjustInstitutionalRecordReq , 0 * 4 }, // 0 parameter - {Gui::GuiActionType::ID_AdjustInstitutionalRecordRsp , 27 * 4 }, //27 parameters each 4 bytes + {Gui::GuiActionType::ID_InstitutionalRecordReq , 0 * 4 }, // 0 parameter + {Gui::GuiActionType::ID_InstitutionalRecordRsp , 60 * 4 }, // 60 parameters each 4 bytes + {Gui::GuiActionType::ID_AdjustInstitutionalRecordReq , 58 * 4 }, // 58 parameters each 4 bytes + {Gui::GuiActionType::ID_AdjustInstitutionalRecordRsp , 59 * 4 }, // 59 parameters each 4 bytes + + {Gui::GuiActionType::ID_AdvancedInstitutionalRecordReq , 0 * 4 }, // 0 parameter + {Gui::GuiActionType::ID_AdvancedInstitutionalRecordRsp , 24 * 4 }, // 24 parameters each 4 bytes + + {Gui::GuiActionType::ID_AdjustAdvancedInstitutionalRecordReq , 22 * 4 }, // 22 parameters each 4 bytes + {Gui::GuiActionType::ID_AdjustAdvancedInstitutionalRecordRsp , 23 * 4 }, // 23 parameters each 4 bytes + // HD reset request in service mode {Gui::GuiActionType::ID_ResetHDInServiceModeReq , 0 * 4 }, // 0 parameters each 4bytes }; Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -r87be1a4b3a1d19c60b37908f1cba8e310799a963 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 87be1a4b3a1d19c60b37908f1cba8e310799a963) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -230,7 +230,10 @@ case Gui::GuiActionType::ID_AdjustDDDateTimeReq : INTERPRET_TRANSMIT_MESSAGE(AdjustDDDateTimeRequestData ); break; case Gui::GuiActionType::ID_AdjustServiceDatesReq : INTERPRET_TRSMT_MT_MESSAGE(AdjustServiceDatesRequestData ); break; case Gui::GuiActionType::ID_HDUsageInfoReq : INTERPRET_TRSMT_MT_MESSAGE(HDUsageInfoRequestData ); break; - case Gui::GuiActionType::ID_AdjustInstitutionalRecordReq : INTERPRET_TRSMT_MT_MESSAGE(AdjustInstitutionalRequestData ); break; + case Gui::GuiActionType::ID_AdjustInstitutionalRecordReq : INTERPRET_TRANSMIT_MESSAGE(AdjustInstitutionalRequestData ); break; + case Gui::GuiActionType::ID_InstitutionalRecordReq : INTERPRET_TRSMT_MT_MESSAGE(InstitutionalRequestData ); break; + case Gui::GuiActionType::ID_AdjustAdvancedInstitutionalRecordReq : INTERPRET_TRANSMIT_MESSAGE(AdjustAdvancedInstitutionalRequestData ); break; + case Gui::GuiActionType::ID_AdvancedInstitutionalRecordReq : INTERPRET_TRSMT_MT_MESSAGE(AdvancedInstitutionalRequestData ); break; // Pre-Treatment case Gui::GuiActionType::ID_AdjustInitTreatmentReq : INTERPRET_TRANSMIT_MESSAGE(AdjustInitTreatmentRequestData ); break; case Gui::GuiActionType::ID_AdjustParametersValidationReq : INTERPRET_TRANSMIT_MESSAGE(AdjustParametersValidationRequestData ); break; @@ -469,7 +472,12 @@ case Gui::GuiActionType::ID_AdjustTDDateTimeRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustTDDateTimeRsp ); break; case Gui::GuiActionType::ID_HDUsageInfoRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_HDUsageInfoRsp ); break; case Gui::GuiActionType::ID_AdjustInstitutionalRecordRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustInstitutionalRecordRsp ); break; - // ----- States + case Gui::GuiActionType::ID_InstitutionalRecordRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_InstitutionalRecordRsp ); break; + case Gui::GuiActionType::ID_AdjustAdvancedInstitutionalRecordRsp: ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustAdvancedInstitutionalRecordRsp); break; + case Gui::GuiActionType::ID_AdvancedInstitutionalRecordRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdvancedInstitutionalRecordRsp ); break; + + + // ----- States case Gui::GuiActionType::ID_TDOpModeData : ok = notify(vMessage, vData, Gui::GuiActionType::ID_TDOpModeData ); break; case Gui::GuiActionType::ID_PreTreatmentStates : ok = notify(vMessage, vData, Gui::GuiActionType::ID_PreTreatmentStates ); break; case Gui::GuiActionType::ID_TreatmentStates : ok = notify(vMessage, vData, Gui::GuiActionType::ID_TreatmentStates ); break; Index: sources/gui/GuiGlobals.cpp =================================================================== diff -u -r9048646630717f980a852df54349805ba63773e0 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 9048646630717f980a852df54349805ba63773e0) +++ sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -51,6 +51,9 @@ #include "VCloudSync.h" #include "VHDUsageInfo.h" #include "VAdjustmentInstitutionalRecord.h" +#include "VInstitutionalRecord.h" +#include "VAdjustmentAdvancedInstitutionalRecord.h" +#include "VAdvancedInstitutionalRecord.h" // states data #include "VTDOpModeData.h" #include "VPreTreatmentStatesData.h" Index: sources/gui/GuiGlobals.h =================================================================== diff -u -r1f9e84f74ead9e10577c8caa204c6eb911e12ab8 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision 1f9e84f74ead9e10577c8caa204c6eb911e12ab8) +++ sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -105,7 +105,7 @@ ID_AdjustSerialDDRsp = 0x5200, // 82 //// ----- @LEAHIZED // Service Information - ID_AdjustServiceDatesReq = 0x8900, // 137 + ID_AdjustServiceDatesReq = 0x890F, // 137 //// ----- @CRAPIZED: had to change to avoid duplication ID_AdjustServiceDatesHDRsp = 0x8A0F, // 138 //// ----- @CRAPIZED: had to change to avoid duplication ID_AdjustServiceDatesDGRsp = 0x8C0F, // 140 //// ----- @CRAPIZED: had to change to avoid duplication @@ -311,9 +311,17 @@ ID_DuetRoWaterModeDGr = 0xC400, // 196 UI <- DG // DG responses Mode Set // Institutional record request and response - ID_AdjustInstitutionalRecordReq = 0xCF00, // 207 UI -> HD request institutional record - ID_AdjustInstitutionalRecordRsp = 0xD000, // 208 HD -> UI response institutional record + ID_InstitutionalRecordReq = 0x8200, // 130 UI -> TD request institutional record + ID_InstitutionalRecordRsp = 0x8300, // 131 TD -> UI response institutional record + ID_AdjustInstitutionalRecordReq = 0x8400, // 132 UI -> TD request institutional record + ID_AdjustInstitutionalRecordRsp = 0x8500, // 133 TD -> UI response institutional record + // Advanced Institutional record request and response + ID_AdvancedInstitutionalRecordReq = 0x8600, // 134 UI -> TD request institutional record + ID_AdvancedInstitutionalRecordRsp = 0x8700, // 135 TD -> UI response institutional record + ID_AdjustAdvancedInstitutionalRecordReq = 0x8800, // 136 UI -> TD request institutional record + ID_AdjustAdvancedInstitutionalRecordRsp = 0x8900, // 137 TD -> UI response institutional record + // HD reset request in service mode ID_ResetHDInServiceModeReq = 0xB900, // 185 UI -> HD reset in service mode }; Index: sources/gui/qml/compounds/InstitutionalContainer.qml =================================================================== diff -u --- sources/gui/qml/compounds/InstitutionalContainer.qml (revision 0) +++ sources/gui/qml/compounds/InstitutionalContainer.qml (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,201 @@ +/*! + * + * Copyright (c) 2021-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file InstitutionalContainer.qml + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ + +import "qrc:/globals" +import "qrc:/components" + +import QtQuick 2.12 +import QtQuick.Controls 2.2 + +LabelUnitContainer { id: _root + height : Variables.institutionaltContainerHeight + + readonly property alias minValue : _min.value + readonly property alias maxValue : _max.value + readonly property alias defValue : _def.value + readonly property alias defCustomValue : _defCustom.currentIndex + + readonly property int subcomponentWidth : contentArea.width / 3 + readonly property int none : -1 + + property alias minText : _minText.text + property alias maxText : _maxText.text + property alias defText : _defText.text + property real min : 0 + property real max : 0 + property real step : 0 + property real decimal : 0 + property bool canOff : false + property bool minEditable : true + property bool maxEditable : true + property bool defEditable : true + property bool defCustomEditable : true + property real minVal : 0 + property real maxVal : 0 + property real defVal : 0 + property int rejectionMin : 0 + property int rejectionMax : 0 + property int rejectionDef : 0 + property var defModel : [] + property bool grabbed : false + + contentItem : Row { id: _row + spacing : 10 + anchors.fill: parent + Rectangle { + width : _root.subcomponentWidth + height : _root.height + color : Colors.transparent + radius : 8.5 + border { + width: 1 + color: _root.rejectionMin ? Colors.panelInvalidBorderColor : Colors.transparent + } + + ValueAdjuster { id: _min + anchors.fill : parent + editable : _root.minEditable + minimum : _root.min + maximum : _max.value + step : _root.step + value : _root.minVal + decimal : _root.decimal + isActive : true + canOff : _root.canOff + visible : _root.minVal !== _root.none + + onGrabbedChanged: { + _root.grabbed = grabbed + } + + onDidChange : function(vValue) { + _root.rejectionMin = Variables.noRejectReason + value = vValue + } + } + + // will show only if area has text only and nothing editable + Text { id: _minText + anchors.fill : parent + visible : _root.minVal === _root.none + color : Colors.offWhite + font.pixelSize : Fonts.fontPixelValueControl + horizontalAlignment : Text.AlignHCenter + verticalAlignment : Text.AlignVCenter + } + } + + Rectangle { + width : _root.subcomponentWidth + height : _root.height + color : Colors.transparent + radius : 8.5 + border { + width: 1 + color: _root.rejectionMax ? Colors.panelInvalidBorderColor : Colors.transparent + } + + ValueAdjuster { id: _max + anchors.fill : parent + editable : _root.maxEditable + minimum : _min.value + maximum : _root.max + step : _root.step + value : _root.maxVal + decimal : _root.decimal + isActive : true + canOff : _root.canOff + visible : _root.maxVal !== _root.none + + onGrabbedChanged: { + _root.grabbed = grabbed + } + + onDidChange : function(vValue) { + _root.rejectionMax = Variables.noRejectReason + value = vValue + } + } + + // will show only if area has text only and nothing editable + Text { id: _maxText + anchors.fill : parent + visible : _root.maxVal === _root.none + color : Colors.offWhite + font.pixelSize : Fonts.fontPixelValueControl + horizontalAlignment : Text.AlignHCenter + verticalAlignment : Text.AlignVCenter + } + } + + Rectangle { + width : _root.subcomponentWidth - Variables.defaultMargin // need margin for right side for rejection box + height : _root.height + color : Colors.transparent + radius : 8.5 + + border { + width: 1 + color: _root.rejectionDef ? Colors.panelInvalidBorderColor : Colors.transparent + } + + // TODO fix VitalsInterval on enhancement branch... this branch does not have updated vitals code and combobox + ValueAdjuster { id: _def + anchors.fill : parent + editable : _root.defEditable + minimum : _root.min + maximum : _root.max + step : _root.step + value : _root.defVal + decimal : _root.decimal + isActive : true + canOff : _root.canOff + visible : _root.defVal !== _root.none && _root.defModel.length === 0 + + onGrabbedChanged: { + _root.grabbed = grabbed + } + + onDidChange : function(vValue) { + _root.rejectionDef = Variables.noRejectReason + value = vValue + } + } + + ValueAdjusterCustom { id: _defCustom + anchors.fill : parent + visible : _root.defModel.length > 0 + model : _root.defModel.length === 0 ? [] : _root.defModel + currentIndex : _root.defVal + canOff : _root.canOff + editable : _root.defCustomEditable + + onGrabbedChanged: { + _root.grabbed = grabbed + } + } + + // will show only if area has text only and nothing editable + Text { id: _defText + anchors.fill : parent + visible : _root.defVal === _root.none && _root.defModel.length === 0 + color : Colors.offWhite + font.pixelSize : Fonts.fontPixelValueControl + horizontalAlignment : Text.AlignHCenter + verticalAlignment : Text.AlignVCenter + } + } + } +} Index: sources/gui/qml/compounds/ValueAdjuster.qml =================================================================== diff -u -rb16fd955f65d83321decdc54bd3d5695fc81c32c -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/compounds/ValueAdjuster.qml (.../ValueAdjuster.qml) (revision b16fd955f65d83321decdc54bd3d5695fc81c32c) +++ sources/gui/qml/compounds/ValueAdjuster.qml (.../ValueAdjuster.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -31,6 +31,7 @@ property bool canOff : false property bool canRefresh : false property alias textColor : _text.color + property bool grabbed : false QtObject { id: _private // fix floating-point precision issue @@ -169,10 +170,10 @@ } MouseArea { id: _sliderMouseArea - property bool grabbed: false anchors.fill : parent pressAndHoldInterval: 0 + drag.axis : Drag.XAxis // only horizontal onClicked: { if ( _root.editable ) { didActiveChange(true); focus = true } @@ -181,18 +182,18 @@ } onReleased: { - _sliderMouseArea.grabbed = false + _root.grabbed = false _slider.opacity = 0 } onPressAndHold: { if ( _root.editable ) { didActiveChange(true); focus = true } - _sliderMouseArea.grabbed = true + _root.grabbed = true } onPositionChanged: { - if (grabbed) { + if (_root.grabbed) { if ( _slider.opacity === 0 ) { _animator.start() } _slider.pos = Math.max(0, Math.min(1, mouse.x / parent.width)) @@ -203,7 +204,7 @@ } onExited: { - if ( ! _sliderMouseArea.grabbed ) { + if ( ! _root.grabbed ) { _animator.stop() _slider.opacity = 0 } @@ -215,7 +216,7 @@ from : 0 to : 1 duration: 350 - running : _sliderMouseArea.grabbed + running : _root.grabbed } Behavior on opacity { NumberAnimation { duration: 200 } } Index: sources/gui/qml/compounds/ValueAdjusterCustom.qml =================================================================== diff -u --- sources/gui/qml/compounds/ValueAdjusterCustom.qml (revision 0) +++ sources/gui/qml/compounds/ValueAdjusterCustom.qml (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,157 @@ +/*! + * + * Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file ValueAdjusterCustom.qml + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ + +import "qrc:/globals" +import "qrc:/components" + +// Qt +import QtQuick 2.12 +import QtQuick.Controls 2.12 + +Item { id: _root + property var model : [] + property int currentIndex : 0 + property int length : model.length === 0 ? 0 : model.length + readonly property bool canIncrement : _root.currentIndex < _root.length - 1 + readonly property bool canDecrement : _root.currentIndex > 0 + property bool grabbed : false + property bool canOff : false + property bool editable : true + property int textWidth : 230 + + Slider { id: _slider + property real pos : 0 + + anchors.fill : parent + anchors.rightMargin : Variables.defaultMargin * 3 + anchors.leftMargin : Variables.defaultMargin * 2 + anchors.topMargin : 5 + opacity : 0 + stepSize : 1 + from : 0 + to : _root.length - 1 + value : _root.currentIndex + snapMode : Slider.SnapOnRelease + enabled : _root.editable + + background: Rectangle { + color: "transparent" + Rectangle { + anchors{ + top : parent.top + topMargin : 1.5 + left : parent.left + right : parent.right + rightMargin : Variables.defaultMargin * -1 + } + height : 1 + width : parent.width + color : Colors.panelBorderColor + } + } + + handle: Rectangle { id: _knob + width : 20 + height : 4 + radius : height + color : Colors.borderButton + x : _slider.pos * _slider.width + } + + MouseArea { id: _sliderMouseArea + anchors.fill : parent + pressAndHoldInterval: 0 + drag.axis : Drag.XAxis // only horizontal + + onClicked: { + _slider.opacity = 0 + } + + onReleased: { + _root.grabbed = false + _slider.opacity = 0 + } + + onPressAndHold: { + _root.grabbed = true + } + + onPositionChanged: { + if (_root.grabbed) { + if ( _slider.opacity === 0 ) { _animator.start() } + + _slider.pos = Math.max(0, Math.min(1, mouse.x / parent.width)) + let raw = _slider.from + _slider.pos * (_slider.to - _slider.from) + let stepped = Math.round((raw - _slider.from) / _slider.stepSize) * _slider.stepSize + _slider.from + + _root.currentIndex = stepped + } + } + + onExited: { + if ( ! _root.grabbed ) { + _animator.stop() + _slider.opacity = 0 + } + } + } + + OpacityAnimator { id: _animator + target : _slider + from : 0 + to : 1 + duration: 350 + running : _root.grabbed + } + + Behavior on opacity { NumberAnimation { duration: 200 } } + } + + Row { + spacing : Variables.defaultMargin // spacing between items to match others + anchors.centerIn : parent + + IconButton { id: _leftArrow + iconSize : Variables.circleButtonDefaultDiameter + enabled : _root.canDecrement + visible : _root.editable + iconImageSource : enabled ? "qrc:/images/iArrowLeft" : + "qrc:/images/iArrowLeftDisabled" + onClicked : _root.currentIndex -= 1 + } + + // Display current item + Text { id: _currentItem + text : _root.model[_root.currentIndex] !== undefined ? + _root.canOff ? _root.currentIndex === 0 ? qsTr("OFF") : _root.model[_root.currentIndex] : + _root.model[_root.currentIndex] : "" + color : Colors.offWhite + font.pixelSize : Fonts.fontPixelValueControl + horizontalAlignment : Text.AlignHCenter + verticalAlignment : Text.AlignVCenter + height : parent.height + width : _root.editable ? _root.textWidth : parent.width + } + + IconButton { id: _rightArrow + iconSize : Variables.circleButtonDefaultDiameter + enabled : _root.canIncrement + visible : _root.editable + iconImageSource : enabled ? "qrc:/images/iArrowRight" : + "qrc:/images/iArrowRightDisabled" + onClicked : _root.currentIndex += 1 + } + } +} Index: sources/gui/qml/dialogs/AcidConcentrateAdjustment.qml =================================================================== diff -u -re310a3245018c3b5405ccddeb899f9c5b8a94d78 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/dialogs/AcidConcentrateAdjustment.qml (.../AcidConcentrateAdjustment.qml) (revision e310a3245018c3b5405ccddeb899f9c5b8a94d78) +++ sources/gui/qml/dialogs/AcidConcentrateAdjustment.qml (.../AcidConcentrateAdjustment.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -78,8 +78,8 @@ height : _root.controlHeight contentItem : ValueAdjuster{ id: _potassiumValueControl - minimum : vTreatmentRanges.acidConcentratePotassiumMin - maximum : vTreatmentRanges.acidConcentratePotassiumMax + minimum : vInstitutionalRecord.acidConcentratePotassiumMin + maximum : vInstitutionalRecord.acidConcentratePotassiumMax step : vTreatmentRanges.acidConcentratePotassiumRes defaultValue : vTreatmentRanges.acidConcentratePotassiumDef decimal : Variables.potassiumPrecision @@ -103,8 +103,8 @@ height : _root.controlHeight contentItem : ValueAdjuster { id: _calciumValueControl - minimum : vTreatmentRanges.acidConcentrateCalciumMin - maximum : vTreatmentRanges.acidConcentrateCalciumMax + minimum : vInstitutionalRecord.acidConcentrateCalciumMin + maximum : vInstitutionalRecord.acidConcentrateCalciumMax step : vTreatmentRanges.acidConcentrateCalciumRes defaultValue : vTreatmentRanges.acidConcentrateCalciumDef decimal : Variables.calciumPrecision Index: sources/gui/qml/globals/Colors.qml =================================================================== diff -u -r93b7d7da5dea9e0392e139b59117eb0315d6c343 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision 93b7d7da5dea9e0392e139b59117eb0315d6c343) +++ sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -153,6 +153,7 @@ readonly property color createTreatmentInvalidParam : red readonly property color scrollBarBgColor : white //"#80696969" // half transparent dimgray + readonly property color scrollBarColor : "#6992BC" readonly property color ufVolumeGoalText : "#f5be59" readonly property color ufNotificationBarBg : "#0f2841" @@ -161,6 +162,8 @@ readonly property color ufAdjustmentProgressBarBg : "#2C517D" readonly property color progressBarMinMax : "#c7c7c7" + readonly property color roFeatured : "#E79DF6" + readonly property color roDefeatured : "#F9CD74" // ---------- < PRS > Related Section ---------- // Alarm priority colors function alarmPriorityColors(vPriority) { Index: sources/gui/qml/globals/Variables.qml =================================================================== diff -u -r1f9e84f74ead9e10577c8caa204c6eb911e12ab8 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision 1f9e84f74ead9e10577c8caa204c6eb911e12ab8) +++ sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -156,7 +156,6 @@ readonly property int settingsNotificationMargin : 10 readonly property int settingsContentBottomMargin : mainMenuHeight + // Alarm Bar height - notificationHeight + // notification Bar height minVGap // Min Gap to give content the min border readonly property int settingsOptionWidth : 550 @@ -191,6 +190,7 @@ readonly property int adjustmentLabelUnitContainerHeight : 75 readonly property int adjustmentLabelUnitContainerWidth : 720 + readonly property int institutionaltContainerHeight : 69 readonly property real sliderDefaultRoundTickMarkDiameter : 5 readonly property int sliderDefaultBodyHeight : 15 @@ -252,6 +252,9 @@ // Calcium readonly property int calciumPrecision : 2 + // Calcium + readonly property int substitutionPrecision : 1 + function sizeConverted(vSize, vSizePowers, vRound = 2) { return ( vSize / vSizePowers // convert from byte to Giga byte Index: sources/gui/qml/main.qml =================================================================== diff -u -r93b7d7da5dea9e0392e139b59117eb0315d6c343 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/main.qml (.../main.qml) (revision 93b7d7da5dea9e0392e139b59117eb0315d6c343) +++ sources/gui/qml/main.qml (.../main.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -54,7 +54,10 @@ import VDuetRoWaterDG 0.1 import VCloudSync 0.1 import VHDUsageInfo 0.1 +import VInstitutionalRecord 0.1 import VAdjustmentInstitutionalRecord 0.1 +import VAdvancedInstitutionalRecord 0.1 +import VAdjustmentAdvancedInstitutionalRecord 0.1 // States views import VTDOpMode 0.1 //// ----- @LEAHIZED import VPreTreatmentStates 0.1 @@ -177,6 +180,9 @@ VCloudSync { id: vCloudSync } VHDUsageInfo { id: vHDUsageInfo } VAdjustmentInstitutionalRecord { id: vAdjustmentInstitutionalRecord } + VInstitutionalRecord { id: vInstitutionalRecord } + VAdjustmentAdvancedInstitutionalRecord { id: vAdjustmentAdvancedInstitutionalRecord } + VAdvancedInstitutionalRecord { id: vAdvancedInstitutionalRecord } //VAdjustIn // ---- States VTDOpMode { id: vTDOpMode Index: sources/gui/qml/pages/disinfect/DisinfectStack.qml =================================================================== diff -u -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/pages/disinfect/DisinfectStack.qml (.../DisinfectStack.qml) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/gui/qml/pages/disinfect/DisinfectStack.qml (.../DisinfectStack.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -62,13 +62,13 @@ title.text : _root.disinfectTitle TouchGrid { - property bool isVisible: vAdjustmentInstitutionalRecord.enableChemicalDisinfect +// property bool isVisible: vAdjustmentInstitutionalRecord.enableChemicalDisinfect width : parent.width / 2 itemWidth : 400 colCount : 1 colSpacing : 0 itemsText : [ _root.flushTitle , _root.heatActiveTitle , _root.chemicalTitle , _root.chemFlushTitle , _root.roPermeateTitle , _root.heatPassiveTitle ] - itemsVisible : [ true , true , isVisible , isVisible , true , true ] +// itemsVisible : [ true , true , isVisible , isVisible , true , true ] onItemClicked : [ doDisinfectFlush , doDisinfectHeatActiveCool , doDisinfectChemical , doDisinfectChemFlush , doDisinfectROPermeate , doDisinfectHeatPassiveCool][vIndex]() } Image { id: _denaliDeviceImage Index: sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml =================================================================== diff -u -r93b7d7da5dea9e0392e139b59117eb0315d6c343 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml (.../PreTreatmentCreateContent.qml) (revision 93b7d7da5dea9e0392e139b59117eb0315d6c343) +++ sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml (.../PreTreatmentCreateContent.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -244,8 +244,8 @@ horizontalAlignment : Text.AlignRight font.pixelSize : Fonts.fontPixelValueControl color : Colors.offWhite - visible : _pretreatmentPatientIDEntry.textInput.text.length === 0 && - ! _pretreatmentPatientIDEntry.textInput.activeFocus + visible : _pretreatmentPatientIDEntry.textInput.text.length === 0 && + ! _pretreatmentPatientIDEntry.textInput.activeFocus } } } @@ -277,10 +277,10 @@ contentItem : ValueAdjuster { id: _bloodFlowRateControl editable : _root.editingEnabled - minimum : vTreatmentRanges.bloodFlowRateMin - maximum : vTreatmentRanges.bloodFlowRateMax + minimum : vInstitutionalRecord.bloodFlowRateMin + maximum : vInstitutionalRecord.bloodFlowRateMax step : vTreatmentRanges.bloodFlowRateRes - defaultValue : vTreatmentRanges.bloodFlowRateDef + defaultValue : vInstitutionalRecord.bloodFlowRateDef value : vTreatmentCreate.bloodFlowRate isActive : vTreatmentCreate.bloodFlowRateSet onDidActiveChange: function(vState) { vTreatmentCreate.bloodFlowRateSet = vState } @@ -326,10 +326,10 @@ contentItem : ValueAdjuster { id: _dialysateFlowRateControl editable : _root.editingEnabled - minimum : vTreatmentRanges.dialysateFlowRateMin - maximum : vTreatmentRanges.dialysateFlowRateMax + minimum : vInstitutionalRecord.dialysateFlowRateMin + maximum : vInstitutionalRecord.dialysateFlowRateMax step : vTreatmentRanges.dialysateFlowRateRes - defaultValue : vTreatmentRanges.dialysateFlowRateDef + defaultValue : vInstitutionalRecord.dialysateFlowRateDef value : vTreatmentCreate.dialysateFlowRate isActive : vTreatmentCreate.dialysateFlowRateSet onDidActiveChange: function(vState) { vTreatmentCreate.dialysateFlowRateSet = vState } @@ -369,10 +369,10 @@ contentItem : ValueAdjuster { id: _durationControl editable : _root.editingEnabled - minimum : vTreatmentRanges.treatmentDurationMin - maximum : vTreatmentRanges.treatmentDurationMax + minimum : vInstitutionalRecord.treatmentDurationMin + maximum : vInstitutionalRecord.treatmentDurationMax step : vTreatmentRanges.treatmentDurationRes - defaultValue : vTreatmentRanges.treatmentDurationDef + defaultValue : vInstitutionalRecord.treatmentDurationDef value : vTreatmentCreate.treatmentDuration isActive : vTreatmentCreate.treatmentDurationSet onDidActiveChange: function(vState) { vTreatmentCreate.treatmentDurationSet = vState } @@ -416,10 +416,10 @@ contentItem : ValueAdjuster { id: _heparinBolusVolumeControl editable : _root.editingEnabled - minimum : vTreatmentRanges.heparinBolusVolumeMin - maximum : vTreatmentRanges.heparinBolusVolumeMax + minimum : vInstitutionalRecord.heparinBolusVolumeMin + maximum : vInstitutionalRecord.heparinBolusVolumeMax step : vTreatmentRanges.heparinBolusVolumeRes - defaultValue : vTreatmentRanges.heparinBolusVolumeDef + defaultValue : vInstitutionalRecord.heparinBolusVolumeDef value : vTreatmentCreate.heparinBolusVolume decimal : Variables.heparinPrecision canOff : true @@ -471,10 +471,10 @@ contentItem : ValueAdjuster { id: _heparinDispensingRateControl editable : _root.editingEnabled - minimum : vTreatmentRanges.heparinDispensingRateMin - maximum : vTreatmentRanges.heparinDispensingRateMax + minimum : vInstitutionalRecord.heparinDispensingRateMin + maximum : vInstitutionalRecord.heparinDispensingRateMax step : vTreatmentRanges.heparinDispensingRateRes - defaultValue : vTreatmentRanges.heparinDispensingRateDef + defaultValue : vInstitutionalRecord.heparinDispensingRateDef value : vTreatmentCreate.heparinDispensingRate decimal : Variables.heparinPrecision canOff : true @@ -510,10 +510,10 @@ contentItem : ValueAdjuster { id: _dialysateTemperatureControl editable : _root.editingEnabled - minimum : vTreatmentRanges.dialysateTempMin - maximum : vTreatmentRanges.dialysateTempMax + minimum : vInstitutionalRecord.dialysateTempMin + maximum : vInstitutionalRecord.dialysateTempMax step : vTreatmentRanges.dialysateTempRes - defaultValue : vTreatmentRanges.dialysateTempDef + defaultValue : vInstitutionalRecord.dialysateTempDef value : vTreatmentCreate.dialysateTemp decimal : Variables.dialysateTempPrecision isActive : vTreatmentCreate.dialysateTempSet @@ -533,7 +533,7 @@ contentItem : ValueAdjuster { id: _heparinStopTimeControl editable : _root.editingEnabled - minimum : vTreatmentRanges.heparinStopTimeMin + minimum : vInstitutionalRecord.heparinStopTimeMin maximum : _durationControl.value step : _durationControl.step defaultValue : _durationControl.value @@ -550,16 +550,16 @@ } LabelUnitContainer { id: _salineBolusVolume - text : qsTr("Saline Bolus Volume") + text : qsTr("Fluid Bolus Volume") unitText : Variables.unitTextFluid valid : ! vTreatmentCreate.salineBolusVolumeRejectReason contentItem : ValueAdjuster { id: _salineBolusVolumeControl editable : _root.editingEnabled - minimum : vTreatmentRanges.salineBolusVolumeMin - maximum : vTreatmentRanges.salineBolusVolumeMax + minimum : vInstitutionalRecord.fluidBolusVolumeMin + maximum : vInstitutionalRecord.fluidBolusVolumeMax step : vTreatmentRanges.salineBolusVolumeRes - defaultValue : vTreatmentRanges.salineBolusVolumeDef + defaultValue : vInstitutionalRecord.fluidBolusVolumeDef value : vTreatmentCreate.salineBolusVolume isActive : vTreatmentCreate.salineBolusVolumeSet onDidActiveChange: function(vState) { vTreatmentCreate.salineBolusVolumeSet = vState } @@ -571,3 +571,4 @@ } } } + Index: sources/gui/qml/pages/settings/SettingsAdvancedInstitutional.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsAdvancedInstitutional.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsAdvancedInstitutional.qml (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,348 @@ +/*! + * + * Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file SettingsAdvancedInstitutional.qml + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ + +// Qt +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtGraphicalEffects 1.12 + +// Qml imports +import "qrc:/globals" +import "qrc:/compounds" +import "qrc:/components" + +SettingsBase { id: _root + itemIndex : SettingsStack.AdvancedInstitutional + contentArea.anchors.rightMargin : 0 + property var title : vAdvancedInstitutionalRecord.parametersTitle + property var unit : vAdvancedInstitutionalRecord.parametersUnit + + readonly property int min : 0 + readonly property int max : 1 + readonly property int def : 2 + readonly property int defCustom : 3 + + readonly property int none : -1 + + enum Records { + MinRoRejectionRatio , + DisinfectionFrequency , + DisinfectionParametersCycleTime , + MaxBloodPumpStopTime , + InletWaterCondLowThreshold , + InletWaterCondHighThreshold , + ChlorineWaterSampleCheck , + WaterSampleTestResultRequired + } + + onConfirmClicked: { + vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmMin = getValue(SettingsAdvancedInstitutional.MinRoRejectionRatio)[min] + vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmMax = getValue(SettingsAdvancedInstitutional.MinRoRejectionRatio)[max] + vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmDef = getValue(SettingsAdvancedInstitutional.MinRoRejectionRatio)[def] + vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyMin = getValue(SettingsAdvancedInstitutional.DisinfectionFrequency)[min] + vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyMax = getValue(SettingsAdvancedInstitutional.DisinfectionFrequency)[max] + vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyDef = getValue(SettingsAdvancedInstitutional.DisinfectionFrequency)[def] + vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMin = getValue(SettingsAdvancedInstitutional.DisinfectionParametersCycleTime)[min] + vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMax = getValue(SettingsAdvancedInstitutional.DisinfectionParametersCycleTime)[max] + vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeDef = getValue(SettingsAdvancedInstitutional.DisinfectionParametersCycleTime)[def] + vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeMin = getValue(SettingsAdvancedInstitutional.MaxBloodPumpStopTime)[min] + vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeMax = getValue(SettingsAdvancedInstitutional.MaxBloodPumpStopTime)[max] + vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeDef = getValue(SettingsAdvancedInstitutional.MaxBloodPumpStopTime)[def] + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdMin = getValue(SettingsAdvancedInstitutional.InletWaterCondLowThreshold)[min] + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdMax = getValue(SettingsAdvancedInstitutional.InletWaterCondLowThreshold)[max] + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdDef = getValue(SettingsAdvancedInstitutional.InletWaterCondLowThreshold)[def] + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdMin = getValue(SettingsAdvancedInstitutional.InletWaterCondHighThreshold)[min] + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdMax = getValue(SettingsAdvancedInstitutional.InletWaterCondHighThreshold)[max] + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdDef = getValue(SettingsAdvancedInstitutional.InletWaterCondHighThreshold)[def] + vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckMin = getValue(SettingsAdvancedInstitutional.ChlorineWaterSampleCheck)[min] + vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckMax = getValue(SettingsAdvancedInstitutional.ChlorineWaterSampleCheck)[max] + vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckDef = getValue(SettingsAdvancedInstitutional.ChlorineWaterSampleCheck)[def] + vAdjustmentAdvancedInstitutionalRecord.waterSampleTestResultRequiredDef = getValue(SettingsAdvancedInstitutional.WaterSampleTestResultRequired)[defCustom] + + vAdjustmentAdvancedInstitutionalRecord.doConfirm() + } + + function getValue(vRecord) { + let delegateItem = _listView.itemAtIndex(vRecord) + if (delegateItem) { + return [ delegateItem.minValue, delegateItem.maxValue, delegateItem.defValue, delegateItem.defCustomValue ] + } + else { + return [ 0, 0, 0, 0 ] + } + } + + function clearErrors() { + vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckMinRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckMaxRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckDefRejectionReason = Variables.noRejectReason + vAdjustmentAdvancedInstitutionalRecord.waterSampleTestResultRequiredDefRejectionReason = Variables.noRejectReason + } + + Connections { target: vAdvancedInstitutionalRecord + function onAdjustmentTriggered ( vValue ) { + if ( vAdvancedInstitutionalRecord.adjustment_Accepted ) { + _root.notificationText = "" + initModel() + } + else { + _root.notificationText = vAdvancedInstitutionalRecord.adjustment_ReasonText + } + } + } + + Connections { target: vAdjustmentAdvancedInstitutionalRecord + function onAdjustmentTriggered ( vValue ) { + if ( vAdjustmentAdvancedInstitutionalRecord.adjustment_Accepted ) { + _root.notificationText = qsTr("Advanced Institutional records and preferences updated") + clearErrors() + } + else { + _root.notificationText = qsTr("Error Adjusting Advanced Institutional Records") + } + } + } + + // To populate model with parameter ranges and initial/ set value of each institutional setting + // min - minimum range from param ranges (DataList.conf) + // max - maximum range from param ranges (DataList.conf) + // step - step or resolution from param ranges (DataList.conf) + // minVal - minimum value from institutional settings in FW + // maxVin - maximum value from institutional settings in FW + // defVal - default value from institutional settings in FW + // decimal - preceision of value + // rejection- rejection re3ason from adjust record + function initModel() { + advancedInstitutionalModel.clear() + // Order matters + // MinRoRejectionRatio + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.minRORejectionRatioAlarmMin, "max" : vTreatmentRanges.minRORejectionRatioAlarmMax, + "step" : vTreatmentRanges.minRORejectionRatioAlarmRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.minRORejectionRatioAlarmMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.minRORejectionRatioAlarmMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.minRORejectionRatioAlarmDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.minRORejectionRatioAlarmDefRejectionReason }); + // DisinfectionFrequency + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.disinfectionFrequencyMin, "max" : vTreatmentRanges.disinfectionFrequencyMax, + "step" : vTreatmentRanges.disinfectionFrequencyRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.disinfectionFrequencyMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.disinfectionFrequencyMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.disinfectionFrequencyDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.disinfectionFrequencyDefRejectionReason }); + // DisinfectionParametersCycleTime + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.disinfectionParametersCycleTimeMin, "max" : vTreatmentRanges.disinfectionParametersCycleTimeMax, + "step" : vTreatmentRanges.disinfectionParametersCycleTimeRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.disinfectionParametersCycleTimeDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.disinfectionParametersCycleTimeDefRejectionReason}); + // MaxBloodPumpStopTime + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.maxBloodPumpStopTimeMin, "max" : vTreatmentRanges.maxBloodPumpStopTimeMax, + "step" : vTreatmentRanges.maxBloodPumpStopTimeRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.maxBloodPumpStopTimeMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.maxBloodPumpStopTimeMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.maxBloodPumpStopTimeDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.maxBloodPumpStopTimeDefRejectionReason }); + // InletWaterCondLowThreshold + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.inletWaterCondLowThresholdMin, "max" : vTreatmentRanges.inletWaterCondLowThresholdMax, + "step" : vTreatmentRanges.inletWaterCondLowThresholdRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.inletWaterCondLowThresholdMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.inletWaterCondLowThresholdMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.inletWaterCondLowThresholdDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.inletWaterCondLowThresholdDefRejectionReason }); + // InletWaterCondHighThreshold + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.inletWaterCondHighThresholdMin, "max" : vTreatmentRanges.inletWaterCondHighThresholdMax, + "step" : vTreatmentRanges.inletWaterCondHighThresholdRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.inletWaterCondHighThresholdMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.inletWaterCondHighThresholdMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.inletWaterCondHighThresholdDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.inletWaterCondHighThresholdDefRejectionReason }); + // ChlorineWaterSampleCheck + advancedInstitutionalModel.append({ "min" : vTreatmentRanges.chlorineWaterSampleCheckMin, "max" : vTreatmentRanges.chlorineWaterSampleCheckMax, + "step" : vTreatmentRanges.chlorineWaterSampleCheckRes, "decimal" : 0, + "minVal": vAdvancedInstitutionalRecord.chlorineWaterSampleCheckMin, "rejectionMax": vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckMaxRejectionReason, + "maxVal": vAdvancedInstitutionalRecord.chlorineWaterSampleCheckMax, "rejectionMin": vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckMinRejectionReason, + "defVal": vAdvancedInstitutionalRecord.chlorineWaterSampleCheckDef, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.chlorineWaterSampleCheckDefRejectionReason }); + // WaterSampleTestResultRequired + advancedInstitutionalModel.append({ "min" : _root.none, "max" : _root.none, + "step" : _root.none, "decimal" : 0, + "minVal": _root.none, "defVal" : vAdvancedInstitutionalRecord.waterSampleTestResultRequiredDef, + "maxVal": _root.none, "rejectionDef": vAdjustmentAdvancedInstitutionalRecord.waterSampleTestResultRequiredDefRejectionReason }); + } + + ListModel { id: advancedInstitutionalModel } + + component HeaderText: Text { id: _headerText + property string title : "" + property int leftMargin : Variables.defaultMargin * 8.5 + + anchors.verticalCenter : parent.verticalCenter + leftPadding : _headerText.leftMargin + width : _listContent.width / 4 + text : _headerText.title + color : Colors.white + font.pixelSize : Fonts.fontPixelTextRectTitle + font.weight : Font.Medium + } + + component RoFeatureIndicator: Rectangle { id: _roFeatureIndicator + property bool featured : false + + width : 12 + height : width + radius : width + color : featured ? Colors.roFeatured : Colors.roDefeatured + } + + contentItem: Item { id: _listContent + anchors.fill : parent + readonly property int contentWith: _listView.width - Variables.defaultMargin * 2 // added margin to have scroll bar show on right + Item { id: _roFeatures + height : Variables.institutionaltContainerHeight + + HeaderText { id: _roFeatureDescription + title : qsTr("RO Featured Devices") + leftMargin : Variables.defaultMargin * 2 + width : _listContent.contentWith / 6 + + RoFeatureIndicator { + anchors { + left : parent.left + leftMargin : Variables.defaultMargin + verticalCenter : parent.verticalCenter + } + featured : true + } + } + + HeaderText { id: _roDefeatureDescription + title : qsTr("RO Defeatured Devices") + leftMargin : Variables.defaultMargin * 2 + anchors.left: _roFeatureDescription.right + width : _listContent.contentWith / 6 + + + RoFeatureIndicator { + anchors { + left : parent.left + leftMargin : Variables.defaultMargin + verticalCenter : parent.verticalCenter + } + featured : false + } + } + } + + Rectangle { id: _header + color : Colors.treatmentSectionHeader + height : Variables.institutionaltContainerHeight + width : _listContent.contentWith + radius : 8.5 + anchors { + top :_roFeatures.bottom + topMargin : 10 + } + + Row { + width : _listContent.width + height : Variables.institutionaltContainerHeight + + HeaderText { id: _parameters; title: qsTr("Parameters"); leftMargin: Variables.defaultMargin * 2 } + HeaderText { id: _minimum; title: qsTr("Minimum") } + HeaderText { id: _maximum; title: qsTr("Maximum") } + HeaderText { id: _default; title: qsTr("Default") } + } + + layer.enabled : true + layer.effect: DropShadow { + id: _dropShadow + horizontalOffset: 0 + verticalOffset : 3 + radius : 3.0 + samples : 7 + color : "#50000000" + source : _header + anchors.fill : _header + } + } + + ListView { id: _listView + anchors { + top :_header.bottom + topMargin : 10 + left : parent.left + right : parent.right + bottom : parent.bottom + } + boundsBehavior : Flickable.StopAtBounds + clip : true + model : advancedInstitutionalModel + spacing : anchors.topMargin + flickableDirection : Flickable.VerticalFlick + + delegate: InstitutionalContainer { id: _delegateControl + width : _listContent.contentWith + text : _root.title[index] === undefined ? "" : _root.title[index] + unitText : _root.unit[index] === undefined ? "" : _root.unit[index] + contentArea.anchors.leftMargin : width * 0.25 + + min : model.min + max : model.max + step : model.step + decimal : model.decimal + minVal : model.minVal + maxVal : model.maxVal + defVal : model.defVal + rejectionMin: model.rejectionMin + rejectionMax: model.rejectionMax + rejectionDef: model.rejectionDef + maxText : "NA" + minText : "NA" + defModel : index === SettingsAdvancedInstitutional.WaterSampleTestResultRequired ? vTreatmentRanges.waterSampleTestResultRequired : [] + + onGrabbedChanged: { + _listView.interactive = ! grabbed + } + + RoFeatureIndicator { + anchors { + left : parent.left + leftMargin : 15 + top : parent.top + topMargin : Variables.defaultMargin + } + featured : index === SettingsAdvancedInstitutional.InletWaterCondLowThreshold + visible : index === SettingsAdvancedInstitutional.InletWaterCondLowThreshold || + index === SettingsAdvancedInstitutional.InletWaterCondHighThreshold || + index === SettingsAdvancedInstitutional.WaterSampleTestResultRequired + } + } + + ScrollBar { flickable: _listView } + } + } +} Index: sources/gui/qml/pages/settings/SettingsBase.qml =================================================================== diff -u -r6e18f1d24b8cc3d84d26f46f36f73deb34e54371 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/pages/settings/SettingsBase.qml (.../SettingsBase.qml) (revision 6e18f1d24b8cc3d84d26f46f36f73deb34e54371) +++ sources/gui/qml/pages/settings/SettingsBase.qml (.../SettingsBase.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -113,6 +113,12 @@ imageSource : "" text : "" anchors.bottomMargin: _root.notificationMargin + anchors { + bottom : undefined + verticalCenter : _backButton.verticalCenter + left : _backButton.right + right : _confirmButton.left + } } onVisibleChanged: { Index: sources/gui/qml/pages/settings/SettingsHome.qml =================================================================== diff -u -r6e18f1d24b8cc3d84d26f46f36f73deb34e54371 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/pages/settings/SettingsHome.qml (.../SettingsHome.qml) (revision 6e18f1d24b8cc3d84d26f46f36f73deb34e54371) +++ sources/gui/qml/pages/settings/SettingsHome.qml (.../SettingsHome.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -39,7 +39,7 @@ signal itemClicked(int vIndex) - contentArea.anchors.topMargin: Variables.defaultMargin * 5 + contentArea.anchors.topMargin: serviceMode ? Variables.defaultMargin * 2 : 0 contentItem: TouchGrid { id: _settingItems onItemClicked : _root.itemClicked(vIndex) Index: sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml =================================================================== diff -u -r934354462a353ff5e7fc2ddfe6f3a8f0121a8f3f -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml (.../SettingsInstitutionalRecord.qml) (revision 934354462a353ff5e7fc2ddfe6f3a8f0121a8f3f) +++ sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml (.../SettingsInstitutionalRecord.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -1,50 +1,463 @@ /*! * - * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file SettingsInstitutionalRecord.qml - * \author (last) Dara Navaei - * \date (last) 19-Mar-2024 - * \author (original) Dara Navaei - * \date (original) 28-Feb-2024 + * \author (last) Nico Ramirez + * \date (last) 10-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 10-Nov-2025 * */ // Qt import QtQuick 2.12 +import QtQuick.Controls 2.12 +import QtGraphicalEffects 1.12 // Qml imports import "qrc:/globals" import "qrc:/compounds" +import "qrc:/components" - /*! - * \brief SettingsInformation is the screen + * \brief SettingsInstitutionalRecord is the screen * which queries the system for the versions and serial numbers and service records * and display them */ SettingsBase { id: _root itemIndex : SettingsStack.InstitutionalRecord - confirmVisible : false - contentArea.anchors.topMargin : Variables.defaultMargin * -1 + contentArea.anchors.rightMargin : 0 + confirmVisible : serviceMode - contentItem: TouchGrid { + property bool canEdit : serviceMode + property var title : vInstitutionalRecord.parametersTitle + property var unit : vInstitutionalRecord.parametersUnit - colCount : 2 - colSpacing : 50 - rowCount : 7 // this number indicates when to move to the next column - rowSpacing : 0 - itemHeight : 50 - itemWidth : 550 - touchable : false + readonly property int min : 0 + readonly property int max : 1 + readonly property int def : 2 + readonly property int defCustom : 3 - itemsValueLeftMargin: 325 - itemsUnitLeftMargin : 465 - itemsValue : vAdjustmentInstitutionalRecord.parametersText - itemsUnit : vAdjustmentInstitutionalRecord.parametersUnit - itemsText : vAdjustmentInstitutionalRecord.parametersTitle + readonly property int none : -1 + + enum Records { + BloodFlowRate , + DialysateFlowRate , + TreatmentDuration , + HeparinBolusVolume , + HeparinDispenseRate , + HeparinStopTime , + DialysateTemperature , + AcidCompositionPotassium , + AcidCompositionCalcium , + BicarbFinalDialysateComposition , + SodiumFinalDialysateComposition , + FluidBolusVolume , + ArterialPressureLimit , + VenousPressureLimit , + VenousAsymPressureLimit , + TMPWindowLimit , + UFVolume , + VitalsInterval , + RinsebackVolume , + RinsebackFlowRate , + SubstitutionVolume } + + onConfirmClicked: { + vAdjustmentInstitutionalRecord.bloodFlowRateMin = getValue(SettingsInstitutionalRecord.BloodFlowRate)[min] + vAdjustmentInstitutionalRecord.bloodFlowRateMax = getValue(SettingsInstitutionalRecord.BloodFlowRate)[max] + vAdjustmentInstitutionalRecord.bloodFlowRateDef = getValue(SettingsInstitutionalRecord.BloodFlowRate)[def] + vAdjustmentInstitutionalRecord.dialysateFlowRateMin = getValue(SettingsInstitutionalRecord.DialysateFlowRate)[min] + vAdjustmentInstitutionalRecord.dialysateFlowRateMax = getValue(SettingsInstitutionalRecord.DialysateFlowRate)[max] + vAdjustmentInstitutionalRecord.dialysateFlowRateDef = getValue(SettingsInstitutionalRecord.DialysateFlowRate)[def] + vAdjustmentInstitutionalRecord.treatmentDurationMin = getValue(SettingsInstitutionalRecord.TreatmentDuration)[min] + vAdjustmentInstitutionalRecord.treatmentDurationMax = getValue(SettingsInstitutionalRecord.TreatmentDuration)[max] + vAdjustmentInstitutionalRecord.treatmentDurationDef = getValue(SettingsInstitutionalRecord.TreatmentDuration)[def] + vAdjustmentInstitutionalRecord.heparinBolusVolumeMin = getValue(SettingsInstitutionalRecord.HeparinBolusVolume)[min] + vAdjustmentInstitutionalRecord.heparinBolusVolumeMax = getValue(SettingsInstitutionalRecord.HeparinBolusVolume)[max] + vAdjustmentInstitutionalRecord.heparinBolusVolumeDef = getValue(SettingsInstitutionalRecord.HeparinBolusVolume)[def] + vAdjustmentInstitutionalRecord.heparinDispensingRateMin = getValue(SettingsInstitutionalRecord.HeparinDispenseRate)[min] + vAdjustmentInstitutionalRecord.heparinDispensingRateMax = getValue(SettingsInstitutionalRecord.HeparinDispenseRate)[max] + vAdjustmentInstitutionalRecord.heparinDispensingRateDef = getValue(SettingsInstitutionalRecord.HeparinDispenseRate)[def] + vAdjustmentInstitutionalRecord.heparinStopTimeMin = getValue(SettingsInstitutionalRecord.HeparinStopTime)[min] + vAdjustmentInstitutionalRecord.heparinStopTimeMax = getValue(SettingsInstitutionalRecord.HeparinStopTime)[max] + vAdjustmentInstitutionalRecord.dialysateTempMin = getValue(SettingsInstitutionalRecord.DialysateTemperature)[min] + vAdjustmentInstitutionalRecord.dialysateTempMax = getValue(SettingsInstitutionalRecord.DialysateTemperature)[max] + vAdjustmentInstitutionalRecord.dialysateTempDef = getValue(SettingsInstitutionalRecord.DialysateTemperature)[def] + vAdjustmentInstitutionalRecord.acidConcentratePotassiumMin = getValue(SettingsInstitutionalRecord.AcidCompositionPotassium)[min] + vAdjustmentInstitutionalRecord.acidConcentratePotassiumMax = getValue(SettingsInstitutionalRecord.AcidCompositionPotassium)[max] + vAdjustmentInstitutionalRecord.acidConcentrateCalciumMin = getValue(SettingsInstitutionalRecord.AcidCompositionCalcium)[min] + vAdjustmentInstitutionalRecord.acidConcentrateCalciumMax = getValue(SettingsInstitutionalRecord.AcidCompositionCalcium)[max] + vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionMin = getValue(SettingsInstitutionalRecord.BicarbFinalDialysateComposition)[min] + vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionMax = getValue(SettingsInstitutionalRecord.BicarbFinalDialysateComposition)[max] + vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionDef = getValue(SettingsInstitutionalRecord.BicarbFinalDialysateComposition)[def] + vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionMin = getValue(SettingsInstitutionalRecord.SodiumFinalDialysateComposition)[min] + vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionMax = getValue(SettingsInstitutionalRecord.SodiumFinalDialysateComposition)[max] + vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionDef = getValue(SettingsInstitutionalRecord.SodiumFinalDialysateComposition)[def] + vAdjustmentInstitutionalRecord.fluidBolusVolumeMin = getValue(SettingsInstitutionalRecord.FluidBolusVolume)[min] + vAdjustmentInstitutionalRecord.fluidBolusVolumeMax = getValue(SettingsInstitutionalRecord.FluidBolusVolume)[max] + vAdjustmentInstitutionalRecord.fluidBolusVolumeDef = getValue(SettingsInstitutionalRecord.FluidBolusVolume)[def] + vAdjustmentInstitutionalRecord.arterialPressureLimitWindowMin = getValue(SettingsInstitutionalRecord.ArterialPressureLimit)[min] + vAdjustmentInstitutionalRecord.arterialPressureLimitWindowMax = getValue(SettingsInstitutionalRecord.ArterialPressureLimit)[max] + vAdjustmentInstitutionalRecord.arterialPressureLimitWindowDef = getValue(SettingsInstitutionalRecord.ArterialPressureLimit)[def] + vAdjustmentInstitutionalRecord.venousPressureLimitWindowMin = getValue(SettingsInstitutionalRecord.VenousPressureLimit)[min] + vAdjustmentInstitutionalRecord.venousPressureLimitWindowMax = getValue(SettingsInstitutionalRecord.VenousPressureLimit)[max] + vAdjustmentInstitutionalRecord.venousPressureLimitWindowDef = getValue(SettingsInstitutionalRecord.VenousPressureLimit)[def] + vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcMin = getValue(SettingsInstitutionalRecord.VenousAsymPressureLimit)[min] + vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcMax = getValue(SettingsInstitutionalRecord.VenousAsymPressureLimit)[max] + vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcDef = getValue(SettingsInstitutionalRecord.VenousAsymPressureLimit)[def] + vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowMin = getValue(SettingsInstitutionalRecord.TMPWindowLimit)[min] + vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowMax = getValue(SettingsInstitutionalRecord.TMPWindowLimit)[max] + vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowDef = getValue(SettingsInstitutionalRecord.TMPWindowLimit)[def] + vAdjustmentInstitutionalRecord.ultrafiltrationVolumeMin = getValue(SettingsInstitutionalRecord.UFVolume)[min] + vAdjustmentInstitutionalRecord.ultrafiltrationVolumeMax = getValue(SettingsInstitutionalRecord.UFVolume)[max] + vAdjustmentInstitutionalRecord.ultrafiltrationVolumeDef = getValue(SettingsInstitutionalRecord.UFVolume)[def] + vAdjustmentInstitutionalRecord.vitalsIntervalDef = getValue(SettingsInstitutionalRecord.VitalsInterval)[defCustom] + vAdjustmentInstitutionalRecord.rinsebackVolumeMin = getValue(SettingsInstitutionalRecord.RinsebackVolume)[min] + vAdjustmentInstitutionalRecord.rinsebackVolumeMax = getValue(SettingsInstitutionalRecord.RinsebackVolume)[max] + vAdjustmentInstitutionalRecord.rinsebackVolumeDef = getValue(SettingsInstitutionalRecord.RinsebackVolume)[def] + vAdjustmentInstitutionalRecord.rinsebackFlowRateMin = getValue(SettingsInstitutionalRecord.RinsebackFlowRate)[min] + vAdjustmentInstitutionalRecord.rinsebackFlowRateMax = getValue(SettingsInstitutionalRecord.RinsebackFlowRate)[max] + vAdjustmentInstitutionalRecord.rinsebackFlowRateDef = getValue(SettingsInstitutionalRecord.RinsebackFlowRate)[def] + vAdjustmentInstitutionalRecord.substitutionVolumeMin = getValue(SettingsInstitutionalRecord.SubstitutionVolume)[min] + vAdjustmentInstitutionalRecord.substitutionVolumeMax = getValue(SettingsInstitutionalRecord.SubstitutionVolume)[max] + vAdjustmentInstitutionalRecord.substitutionVolumeDef = getValue(SettingsInstitutionalRecord.SubstitutionVolume)[def] + + vAdjustmentInstitutionalRecord.doConfirm() + } + + function getValue(vRecord) { + let delegateItem = _listView.itemAtIndex(vRecord) + if (delegateItem) { + return [ delegateItem.minValue, delegateItem.maxValue, delegateItem.defValue, delegateItem.defCustomValue ] + } + else { + return [ 0, 0, 0, 0 ] + } + } + + function clearErrors() { + vAdjustmentInstitutionalRecord.bloodFlowRateMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.bloodFlowRateMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.bloodFlowRateDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.dialysateFlowRateMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.dialysateFlowRateMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.dialysateFlowRateDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.treatmentDurationMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.treatmentDurationMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.treatmentDurationDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinBolusVolumeMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinBolusVolumeMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinBolusVolumeDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinDispensingRateMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinDispensingRateMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinDispensingRateDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinStopTimeMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.heparinStopTimeMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.dialysateTempMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.dialysateTempMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.dialysateTempDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.acidConcentratePotassiumMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.acidConcentratePotassiumMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.acidConcentrateCalciumMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.acidConcentrateCalciumMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.fluidBolusVolumeMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.fluidBolusVolumeMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.fluidBolusVolumeDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.arterialPressureLimitWindowMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.arterialPressureLimitWindowMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.arterialPressureLimitWindowDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.venousPressureLimitWindowMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.venousPressureLimitWindowMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.venousPressureLimitWindowDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.ultrafiltrationVolumeMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.ultrafiltrationVolumeMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.ultrafiltrationVolumeDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.vitalsIntervalDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.rinsebackVolumeMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.rinsebackVolumeMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.rinsebackVolumeDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.rinsebackFlowRateMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.rinsebackFlowRateMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.rinsebackFlowRateDefRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.substitutionVolumeMinRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.substitutionVolumeMaxRejectionReason = Variables.noRejectReason + vAdjustmentInstitutionalRecord.substitutionVolumeDefRejectionReason = Variables.noRejectReason + } + + Connections { target: vInstitutionalRecord + function onAdjustmentTriggered ( vValue ) { + if ( vInstitutionalRecord.adjustment_Accepted ) { + _root.notificationText = "" + initModel() + } + else { + _root.notificationText = vInstitutionalRecord.adjustment_ReasonText + } + } + } + + Connections { target: vAdjustmentInstitutionalRecord + function onAdjustmentTriggered ( vValue ) { + if ( vAdjustmentInstitutionalRecord.adjustment_Accepted ) { + _root.notificationText = qsTr("Institutional records and preferences updated") + clearErrors() + } + else { + _root.notificationText = qsTr("Error Adjusting Institutional Records") + } + } + } + + // To populate model with parameter ranges and initial/ set value of each institutional setting + // min - minimum range from param ranges (DataList.conf) + // max - maximum range from param ranges (DataList.conf) + // step - step or resolution from param ranges (DataList.conf) + // minVal - minimum value from institutional settings in FW + // maxVin - maximum value from institutional settings in FW + // defVal - default value from institutional settings in FW + // decimal - preceision of value + // rejection- rejection re3ason from adjust record + function initModel() { + institutionalModel.clear() + // Order matters + // BloodFlowRate + institutionalModel.append({ "min" : vTreatmentRanges.bloodFlowRateMin, "max" : vTreatmentRanges.bloodFlowRateMax, + "step" : vTreatmentRanges.bloodFlowRateRes, "decimal" : 0, + "minVal": vInstitutionalRecord.bloodFlowRateMin, "rejectionMax": vAdjustmentInstitutionalRecord.bloodFlowRateMaxRejectionReason, + "maxVal": vInstitutionalRecord.bloodFlowRateMax, "rejectionMin": vAdjustmentInstitutionalRecord.bloodFlowRateMinRejectionReason, + "defVal": vInstitutionalRecord.bloodFlowRateDef, "rejectionDef": vAdjustmentInstitutionalRecord.bloodFlowRateDefRejectionReason }); + // DialysateFlowRate + institutionalModel.append({ "min" : vTreatmentRanges.dialysateFlowRateMin, "max" : vTreatmentRanges.dialysateFlowRateMax, + "step" : vTreatmentRanges.dialysateFlowRateRes, "decimal" : 0, + "minVal": vInstitutionalRecord.dialysateFlowRateMin, "rejectionMin": vAdjustmentInstitutionalRecord.dialysateFlowRateMinRejectionReason, + "maxVal": vInstitutionalRecord.dialysateFlowRateMax, "rejectionMax": vAdjustmentInstitutionalRecord.dialysateFlowRateMaxRejectionReason, + "defVal": vInstitutionalRecord.dialysateFlowRateDef, "rejectionDef": vAdjustmentInstitutionalRecord.dialysateFlowRateDefRejectionReason }); + // TreatmentDuration + institutionalModel.append({ "min" : vTreatmentRanges.treatmentDurationMin, "max" : vTreatmentRanges.treatmentDurationMax, + "step" : vTreatmentRanges.treatmentDurationRes, "decimal" : 0, + "minVal": vInstitutionalRecord.treatmentDurationMin, "rejectionMin": vAdjustmentInstitutionalRecord.treatmentDurationMinRejectionReason, + "maxVal": vInstitutionalRecord.treatmentDurationMax, "rejectionMax": vAdjustmentInstitutionalRecord.treatmentDurationMaxRejectionReason, + "defVal": vInstitutionalRecord.treatmentDurationDef, "rejectionDef": vAdjustmentInstitutionalRecord.treatmentDurationDefRejectionReason }); + // HeparinBolusVolume + institutionalModel.append({ "min" : vTreatmentRanges.heparinBolusVolumeMin, "max" : vTreatmentRanges.heparinBolusVolumeMax, + "step" : vTreatmentRanges.heparinBolusVolumeRes, "decimal" : Variables.heparinPrecision, "canOff": true, + "minVal": vInstitutionalRecord.heparinBolusVolumeMin, "rejectionMin": vAdjustmentInstitutionalRecord.heparinBolusVolumeMinRejectionReason, + "maxVal": vInstitutionalRecord.heparinBolusVolumeMax, "rejectionMax": vAdjustmentInstitutionalRecord.heparinBolusVolumeMaxRejectionReason, + "defVal": vInstitutionalRecord.heparinBolusVolumeDef, "rejectionDef": vAdjustmentInstitutionalRecord.heparinBolusVolumeDefRejectionReason }); + // HeparinDispenseRate + institutionalModel.append({ "min" : vTreatmentRanges.heparinDispensingRateMin, "max" : vTreatmentRanges.heparinDispensingRateMax, + "step" : vTreatmentRanges.heparinDispensingRateRes, "decimal" : Variables.heparinPrecision, "canOff": true, + "minVal": vInstitutionalRecord.heparinDispensingRateMin, "rejectionMin": vAdjustmentInstitutionalRecord.heparinDispensingRateMinRejectionReason, + "maxVal": vInstitutionalRecord.heparinDispensingRateMax, "rejectionMax": vAdjustmentInstitutionalRecord.heparinDispensingRateMaxRejectionReason, + "defVal": vInstitutionalRecord.heparinDispensingRateDef, "rejectionDef": vAdjustmentInstitutionalRecord.heparinDispensingRateDefRejectionReason }); + // HeparinStopTime + institutionalModel.append({ "min" : vTreatmentRanges.heparinStopTimeMin, "max" : vTreatmentRanges.treatmentDurationMax, + "step" : vTreatmentRanges.treatmentDurationRes, "decimal" : 0, "canOff": true, + "minVal": vInstitutionalRecord.heparinStopTimeMin, "rejectionMin": vAdjustmentInstitutionalRecord.heparinStopTimeMinRejectionReason, + "maxVal": vInstitutionalRecord.heparinStopTimeMax, "rejectionMax": vAdjustmentInstitutionalRecord.heparinStopTimeMaxRejectionReason, + "defVal": _root.none }); + // DialysateTemperature + institutionalModel.append({ "min" : vTreatmentRanges.dialysateTempMin, "max" : vTreatmentRanges.dialysateTempMax, + "step" : vTreatmentRanges.dialysateTempRes, "decimal" : Variables.dialysateTempPrecision, + "minVal": vInstitutionalRecord.dialysateTempMin, "rejectionMin": vAdjustmentInstitutionalRecord.dialysateTempMinRejectionReason, + "maxVal": vInstitutionalRecord.dialysateTempMax, "rejectionMax": vAdjustmentInstitutionalRecord.dialysateTempMaxRejectionReason, + "defVal": vInstitutionalRecord.dialysateTempDef, "rejectionDef": vAdjustmentInstitutionalRecord.dialysateTempDefRejectionReason }); + // AcidCompositionPotassium + institutionalModel.append({ "min" : vTreatmentRanges.acidConcentratePotassiumMin, "max" : vTreatmentRanges.acidConcentratePotassiumMax, + "step" : vTreatmentRanges.acidConcentratePotassiumRes, "decimal" : Variables.potassiumPrecision, + "minVal": vInstitutionalRecord.acidConcentratePotassiumMin, "rejectionMin": vAdjustmentInstitutionalRecord.acidConcentratePotassiumMinRejectionReason, + "maxVal": vInstitutionalRecord.acidConcentratePotassiumMax, "rejectionMax": vAdjustmentInstitutionalRecord.acidConcentratePotassiumMaxRejectionReason, + "defVal": _root.none, }); + // AcidCompositionCalcium + institutionalModel.append({ "min" : vTreatmentRanges.acidConcentrateCalciumMin, "max" : vTreatmentRanges.acidConcentrateCalciumMax, + "step" : vTreatmentRanges.acidConcentrateCalciumRes, "decimal" : Variables.calciumPrecision, + "minVal": vInstitutionalRecord.acidConcentrateCalciumMin, "rejectionMin": vAdjustmentInstitutionalRecord.acidConcentrateCalciumMinRejectionReason, + "maxVal": vInstitutionalRecord.acidConcentrateCalciumMax, "rejectionMax": vAdjustmentInstitutionalRecord.acidConcentrateCalciumMaxRejectionReason, + "defVal": _root.none }); + // BicarbFinalDialysateComposition + institutionalModel.append({ "min" : vTreatmentRanges.dialysateBicarbonateMin, "max" : vTreatmentRanges.dialysateBicarbonateMax, + "step" : vTreatmentRanges.dialysateBicarbonateRes, "decimal" : 0, + "minVal": vInstitutionalRecord.bicarbFinalDialysateCompositionMin, "rejectionMin": vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionMinRejectionReason, + "maxVal": vInstitutionalRecord.bicarbFinalDialysateCompositionMax, "rejectionMax": vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionMaxRejectionReason, + "defVal": vInstitutionalRecord.bicarbFinalDialysateCompositionDef, "rejectionDef": vAdjustmentInstitutionalRecord.bicarbFinalDialysateCompositionDefRejectionReason }); + // SodiumFinalDialysateComposition + institutionalModel.append({ "min" : vTreatmentRanges.dialysateSodiumMin, "max" : vTreatmentRanges.dialysateSodiumMax, + "step" : vTreatmentRanges.dialysateSodiumRes, "decimal" : 0, + "minVal": vInstitutionalRecord.sodiumFinalDialysateCompositionMin, "rejectionMin": vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionMinRejectionReason, + "maxVal": vInstitutionalRecord.sodiumFinalDialysateCompositionMax, "rejectionMax": vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionMaxRejectionReason, + "defVal": vInstitutionalRecord.sodiumFinalDialysateCompositionDef, "rejectionDef": vAdjustmentInstitutionalRecord.sodiumFinalDialysateCompositionDefRejectionReason }); + // FluidBolusVolume + institutionalModel.append({ "min" : vTreatmentRanges.salineBolusVolumeMin, "max" : vTreatmentRanges.salineBolusVolumeMax, + "step" : vTreatmentRanges.salineBolusVolumeRes, "decimal" : 0, + "minVal": vInstitutionalRecord.fluidBolusVolumeMin, "rejectionMin": vAdjustmentInstitutionalRecord.fluidBolusVolumeMinRejectionReason, + "maxVal": vInstitutionalRecord.fluidBolusVolumeMax, "rejectionMax": vAdjustmentInstitutionalRecord.fluidBolusVolumeMaxRejectionReason, + "defVal": vInstitutionalRecord.fluidBolusVolumeDef, "rejectionDef": vAdjustmentInstitutionalRecord.fluidBolusVolumeDefRejectionReason }); + // ArterialPressureLimit + institutionalModel.append({ "min" : vTreatmentRanges.arterialPressureLimitWindowMin, "max" : vTreatmentRanges.arterialPressureLimitWindowMax, + "step" : vTreatmentRanges.arterialPressureLimitWindowRes, "decimal" : 0, + "minVal": vInstitutionalRecord.arterialPressureLimitWindowMin, "rejectionMin": vAdjustmentInstitutionalRecord.arterialPressureLimitWindowMinRejectionReason, + "maxVal": vInstitutionalRecord.arterialPressureLimitWindowMax, "rejectionMax": vAdjustmentInstitutionalRecord.arterialPressureLimitWindowMaxRejectionReason, + "defVal": vInstitutionalRecord.arterialPressureLimitWindowDef, "rejectionDef": vAdjustmentInstitutionalRecord.arterialPressureLimitWindowDefRejectionReason }); + // VenousPressureLimit + institutionalModel.append({ "min" : vTreatmentRanges.venousPressureLimitWindowMin, "max" : vTreatmentRanges.venousPressureLimitWindowMax, + "step" : vTreatmentRanges.venousPressureLimitWindowRes, "decimal" : 0, + "minVal": vInstitutionalRecord.venousPressureLimitWindowMin, "rejectionMin": vAdjustmentInstitutionalRecord.venousPressureLimitWindowMinRejectionReason, + "maxVal": vInstitutionalRecord.venousPressureLimitWindowMax, "rejectionMax": vAdjustmentInstitutionalRecord.venousPressureLimitWindowMaxRejectionReason, + "defVal": vInstitutionalRecord.venousPressureLimitWindowDef, "rejectionDef": vAdjustmentInstitutionalRecord.venousPressureLimitWindowDefRejectionReason }); + // VenousAsymPressureLimit + institutionalModel.append({ "min" : vTreatmentRanges.venousPressureLimitAsymtrcMin, "max" : vTreatmentRanges.venousPressureLimitAsymtrcMax, + "step" : vTreatmentRanges.venousPressureLimitAsymtrcRes, "decimal" : 0, + "minVal": vInstitutionalRecord.venousPressureLimitAsymtrcMin, "rejectionMin": vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcMinRejectionReason, + "maxVal": vInstitutionalRecord.venousPressureLimitAsymtrcMax, "rejectionMax": vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcMaxRejectionReason, + "defVal": vInstitutionalRecord.venousPressureLimitAsymtrcDef, "rejectionDef": vAdjustmentInstitutionalRecord.venousPressureLimitAsymtrcDefRejectionReason }); + // TMPWindowLimit + institutionalModel.append({ "min" : vTreatmentRanges.trancembrncPressureLimitWindowMin, "max" : vTreatmentRanges.trancembrncPressureLimitWindowMax, + "step" : vTreatmentRanges.trancembrncPressureLimitWindowRes, "decimal" : 0, + "minVal": vInstitutionalRecord.trancembrncPressureLimitWindowMin, "rejectionMin": vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowMinRejectionReason, + "maxVal": vInstitutionalRecord.trancembrncPressureLimitWindowMax, "rejectionMax": vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowMaxRejectionReason, + "defVal": vInstitutionalRecord.trancembrncPressureLimitWindowDef, "rejectionDef": vAdjustmentInstitutionalRecord.trancembrncPressureLimitWindowDefRejectionReason }); + // UFVolume + institutionalModel.append({ "min" : vTreatmentRanges.ultrafiltrationVolumeMin, "max" : vTreatmentRanges.ultrafiltrationVolumeMax, + "step" : vTreatmentRanges.ultrafiltrationVolumeRes, "decimal" : Variables.ultrafiltrationPrecision, + "minVal": vInstitutionalRecord.ultrafiltrationVolumeMin, "rejectionMin": vAdjustmentInstitutionalRecord.ultrafiltrationVolumeMinRejectionReason, + "maxVal": vInstitutionalRecord.ultrafiltrationVolumeMax, "rejectionMax": vAdjustmentInstitutionalRecord.ultrafiltrationVolumeMaxRejectionReason, + "defVal": vInstitutionalRecord.ultrafiltrationVolumeDef, "rejectionDef": vAdjustmentInstitutionalRecord.ultrafiltrationVolumeDefRejectionReason }); + // VitalsInterval + institutionalModel.append({ "min" : 5, "max" : 60, "canOff": true, + "minVal": 5, "step": 0, "decimal": 0, + "maxVal": 60, + "defVal": vInstitutionalRecord.vitalsIntervalDef, "rejectionDef": vAdjustmentInstitutionalRecord.vitalsIntervalDefRejectionReason }); + // RinsebackVolume + institutionalModel.append({ "min" : vTreatmentRanges.rinsebackVolumeMin, "max" : vTreatmentRanges.rinsebackVolumeMax, + "step" : vTreatmentRanges.rinsebackVolumeRes, "decimal" : 0, + "minVal": vInstitutionalRecord.rinsebackVolumeMin, "rejectionMin": vAdjustmentInstitutionalRecord.rinsebackVolumeMinRejectionReason, + "maxVal": vInstitutionalRecord.rinsebackVolumeMax, "rejectionMax": vAdjustmentInstitutionalRecord.rinsebackVolumeMaxRejectionReason, + "defVal": vInstitutionalRecord.rinsebackVolumeDef, "rejectionDef": vAdjustmentInstitutionalRecord.rinsebackVolumeDefRejectionReason }); + // RinsebackFlowRate + institutionalModel.append({ "min" : vTreatmentRanges.rinsebackFlowRateMin, "max" : vTreatmentRanges.rinsebackFlowRateMax, + "step" : vTreatmentRanges.rinsebackFlowRateRes, "decimal" : 0, + "minVal": vInstitutionalRecord.rinsebackFlowRateMin, "rejectionMin": vAdjustmentInstitutionalRecord.rinsebackFlowRateMinRejectionReason, + "maxVal": vInstitutionalRecord.rinsebackFlowRateMax, "rejectionMax": vAdjustmentInstitutionalRecord.rinsebackFlowRateMaxRejectionReason, + "defVal": vInstitutionalRecord.rinsebackFlowRateDef, "rejectionDef": vAdjustmentInstitutionalRecord.rinsebackFlowRateDefRejectionReason }); + // SubstitutionVolume + institutionalModel.append({ "min" : vTreatmentRanges.substitutionVolumeMin, "max" : vTreatmentRanges.substitutionVolumeMax, + "step" : vTreatmentRanges.substitutionVolumeRes, "decimal" : Variables.substitutionPrecision, + "minVal": vInstitutionalRecord.substitutionVolumeMin, "rejectionMin": vAdjustmentInstitutionalRecord.substitutionVolumeMinRejectionReason, + "maxVal": vInstitutionalRecord.substitutionVolumeMax, "rejectionMax": vAdjustmentInstitutionalRecord.substitutionVolumeMaxRejectionReason, + "defVal": vInstitutionalRecord.substitutionVolumeDef, "rejectionDef": vAdjustmentInstitutionalRecord.substitutionVolumeDefRejectionReason }); + } + + ListModel { id: institutionalModel } + + component HeaderText: Text { id: _headerText + property string title : "" + property int leftMargin : Variables.defaultMargin * 8.5 + + anchors.verticalCenter : parent.verticalCenter + leftPadding : _headerText.leftMargin + width : _listContent.width / 4 + text : _headerText.title + color : Colors.white + font.pixelSize : Fonts.fontPixelTextRectTitle + font.weight : Font.Medium + } + + contentItem: Item { id: _listContent + anchors.fill : parent + readonly property int contentWith: _listView.width - Variables.defaultMargin * 2 // added margin to have scroll bar show on right + + Rectangle { id: _header + color : Colors.treatmentSectionHeader + height : Variables.institutionaltContainerHeight + width : _listContent.contentWith + radius : 8.5 + + Row { + width : _listContent.width + height : Variables.institutionaltContainerHeight + + HeaderText { id: _parameters; title: qsTr("Parameters"); leftMargin: Variables.defaultMargin * 2 } + HeaderText { id: _minimum; title: qsTr("Minimum") } + HeaderText { id: _maximum; title: qsTr("Maximum") } + HeaderText { id: _default; title: qsTr("Default") } + } + + layer.enabled : true + layer.effect: DropShadow { + id: _dropShadow + horizontalOffset: 0 + verticalOffset : 3 + radius : 3.0 + samples : 7 + color : "#50000000" + source : _header + anchors.fill : _header + } + } + + ListView { id: _listView + anchors { + top :_header.bottom + topMargin : 10 + left : parent.left + right : parent.right + bottom : parent.bottom + } + boundsBehavior : Flickable.StopAtBounds + clip : true + model : institutionalModel + spacing : anchors.topMargin + flickableDirection : Flickable.VerticalFlick + + delegate: InstitutionalContainer { id: _delegateControl + width : _listContent.contentWith + text : _root.title[index] === undefined ? "" : _root.title[index] + unitText : _root.unit[index] === undefined ? "" : _root.unit[index] + contentArea.anchors.leftMargin : width * 0.25 + + min : model.min + max : model.max + step : model.step + decimal : model.decimal + canOff : model.canOff + minEditable : _root.canEdit && index !== SettingsInstitutionalRecord.VitalsInterval + maxEditable : _root.canEdit && index !== SettingsInstitutionalRecord.VitalsInterval + defEditable : _root.canEdit + defCustomEditable: _root.canEdit + minVal : model.minVal + maxVal : model.maxVal + defVal : model.defVal + rejectionMin: model.rejectionMin + rejectionMax: model.rejectionMax + rejectionDef: model.rejectionDef + defText : index === SettingsInstitutionalRecord.HeparinStopTime ? qsTr("Treatment Duration") : qsTr("NA") + defModel : index === SettingsInstitutionalRecord.VitalsInterval ? ["0", "5", "10", "15", "30", "60"] : [] // TODO update for Vitals interval FROM STAGING!!! + + onGrabbedChanged: { + _listView.interactive = ! grabbed + } + } + + + ScrollBar { flickable: _listView } + } + } } Index: sources/gui/qml/pages/settings/SettingsStack.qml =================================================================== diff -u -r1bc34c23575fe101b85c851cff245436394d7123 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision 1bc34c23575fe101b85c851cff245436394d7123) +++ sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -70,53 +70,56 @@ readonly property bool visibleDeviceConfiguration : onlyManufacturing && loggedIn readonly property bool visibleDeviceRegistration : onlyManufacturing && loggedIn readonly property bool visibleInstitutionalRecord : true + readonly property bool visibleAdvancedInstitutional : loggedIn readonly property bool visibleLocalization : loggedIn readonly property bool visibleUserModes : loggedIn readonly property string settingsTitle : _GuiView.manufactSetup ? qsTr("Manufacturing Setup") : _GuiView.updateSetup ? qsTr("Software Update") : qsTr("Device Settings") enum ItemsIndex { - Information , - VolumeBrightness , - WiFi , - DGCleaning , - DGScheduling , - ServicePassword , - SetDateTime , - ExportLogs , - Localization , - RoInput , - Calibration , - DeviceConfiguration , - DeviceRegistration , - SWUpdate , - RootSSHAccess , - FactoryReset , - Decommission , - InstitutionalRecord , + Information , + VolumeBrightness , + WiFi , + DGCleaning , + DGScheduling , + ServicePassword , + SetDateTime , + ExportLogs , + Localization , + RoInput , + Calibration , + DeviceConfiguration , + DeviceRegistration , + SWUpdate , + RootSSHAccess , + FactoryReset , + Decommission , + InstitutionalRecord , + AdvancedInstitutional , UserMode } property var itemsText : [ - qsTr("Device Information" ), // Device Information - qsTr("Volume And Brightness" ), // VolumeBrightness - qsTr("Wi-Fi" ), // WiFi - qsTr("Device Cleaning" ), // DGCleaning - qsTr("DG Scheduling" ), // DGScheduling - qsTr("Service" ), // servicePassword - qsTr("Date and Time" ), // SetDateTime - qsTr("Export Logs" ), // ExportLogs - qsTr("Language" ), // Localization - qsTr("Water Input Mode" ), // RoInput - qsTr("Calibration" ), // Calibration - qsTr("Device Configuration" ), // Device Configuration - qsTr("Device Registration" ), // DeviceRegistration - qsTr("Software Update" ), // SWUpdate - qsTr("Enable Root SSH" ), // RootSSHAccess - qsTr("Factory Reset" ), // FactoryReset - qsTr("Decommissioning" ), // Decommission - qsTr("Institutional Configurations" ), // Institutional Configurations - qsTr("User Modes" ), // User Modes + qsTr("Device Information" ), // Device Information + qsTr("Volume And Brightness" ), // VolumeBrightness + qsTr("Wi-Fi" ), // WiFi + qsTr("Device Cleaning" ), // DGCleaning + qsTr("DG Scheduling" ), // DGScheduling + qsTr("Service" ), // servicePassword + qsTr("Date and Time" ), // SetDateTime + qsTr("Export Logs" ), // ExportLogs + qsTr("Language" ), // Localization + qsTr("Water Input Mode" ), // RoInput + qsTr("Calibration" ), // Calibration + qsTr("Device Configuration" ), // Device Configuration + qsTr("Device Registration" ), // DeviceRegistration + qsTr("Software Update" ), // SWUpdate + qsTr("Enable Root SSH" ), // RootSSHAccess + qsTr("Factory Reset" ), // FactoryReset + qsTr("Decommissioning" ), // Decommission + qsTr("Institutional Settings" ), // Institutional Configurations + qsTr("Advanced Institutional Settings" ), // AdvancedInstitutional + qsTr("User Modes" ), // User Modes ] property var itemsVisible : [ @@ -138,6 +141,7 @@ visibleFactoryReset , // FactoryReset visibleDecommission , // Decommission visibleInstitutionalRecord , // Institutional Record + visibleAdvancedInstitutional , // AdvancedInstitutional visibleUserModes , // User Modes ] @@ -232,10 +236,15 @@ break case SettingsStack.InstitutionalRecord: - vAdjustmentInstitutionalRecord.doAdjustment() + vInstitutionalRecord.doAdjustment() push( _settingsInstitutionalRecord ) break + case SettingsStack.AdvancedInstitutional: + vAdvancedInstitutionalRecord.doAdjustment() + push( _settingsAdvancedInstitutional ) + break + case SettingsStack.Localization: push( _settingLocalization ) break @@ -251,23 +260,24 @@ } } - SettingsInformation { id: _settingsInformation } - SettingsVolumeBrightness { id: _settingsVolumeBrightness } - SettingsWiFi { id: _settingsWiFi } - SettingsDGCleaning { id: _settingsDGCleaning } - SettingsDGScheduling { id: _settingsDGScheduling } - SettingsServicePassword { id: _servicePassword } - SettingsDateTime { id: _settingsDateTime } - SettingsExportLogs { id: _settingsExportLogs } - SettingsROInput { id: _settingsRoInput } - SettingsManufacturingSetup { id: _settingsDeviceConfiguration } - SettingsDeviceRegistration { id: _settingsDeviceRegistration } - SettingsRootSSHAccess { id: _SettingsRootSSHAccess } - SettingsFactoryReset { id: _serviceFactoryReset } - SettingsDecommission { id: _serviceDecommission } - SettingsInstitutionalRecord { id: _settingsInstitutionalRecord } - SettingsLocalization { id: _settingLocalization } - SettingsUserMode { id: _settingUserMode } + SettingsInformation { id: _settingsInformation } + SettingsVolumeBrightness { id: _settingsVolumeBrightness } + SettingsWiFi { id: _settingsWiFi } + SettingsDGCleaning { id: _settingsDGCleaning } + SettingsDGScheduling { id: _settingsDGScheduling } + SettingsServicePassword { id: _servicePassword } + SettingsDateTime { id: _settingsDateTime } + SettingsExportLogs { id: _settingsExportLogs } + SettingsROInput { id: _settingsRoInput } + SettingsManufacturingSetup { id: _settingsDeviceConfiguration } + SettingsDeviceRegistration { id: _settingsDeviceRegistration } + SettingsRootSSHAccess { id: _SettingsRootSSHAccess } + SettingsFactoryReset { id: _serviceFactoryReset } + SettingsDecommission { id: _serviceDecommission } + SettingsInstitutionalRecord { id: _settingsInstitutionalRecord } + SettingsAdvancedInstitutional { id: _settingsAdvancedInstitutional} + SettingsLocalization { id: _settingLocalization } + SettingsUserMode { id: _settingUserMode } function gotoServiceMode( vservice ) { //DEBUG console.log (" 0 ---------- ", _GuiView.manufactMode, _GuiView.manufactSetup, vservice, stackView.initialItem, stackView.currentItem, stackView.depth) @@ -288,17 +298,6 @@ } } - Connections { target: vAdjustmentInstitutionalRecord - function onAdjustmentTriggered ( vValue ) { - if ( vAdjustmentInstitutionalRecord.adjustment_Accepted ) { - _settingsHome.notificationText = "" - } - else { - _settingsHome.notificationText = vAdjustmentInstitutionalRecord.text() - } - } - } - Connections { target: vTDOpMode function onServiceChanged ( vValue ) { gotoServiceMode( vValue )} function onStandbyWaitDisinfectChanged ( vValue ) { page( _settingsHome , vValue )} Index: sources/main.h =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/main.h (.../main.h) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/main.h (.../main.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -327,6 +327,11 @@ READONLY( vTYPE , vVARIABLE##Res , vDEFVALUE ) \ READONLY( vTYPE , vVARIABLE##Def , vDEFVALUE ) //--------------------------------------------------------------------------------// +#define RANGEVALUESET( vTYPE , vVARIABLE , vDEFVALUE ) \ + VALUESET( vTYPE , vVARIABLE##Min , vDEFVALUE ) \ + VALUESET( vTYPE , vVARIABLE##Max , vDEFVALUE ) \ + VALUESET( vTYPE , vVARIABLE##Def , vDEFVALUE ) +//--------------------------------------------------------------------------------// #define MEMBER( vTYPE , vVARIABLE , vDEFVALUE ) \ private: \ vTYPE _##vVARIABLE = vDEFVALUE; \ Index: sources/model/MModel.h =================================================================== diff -u -r6e18f1d24b8cc3d84d26f46f36f73deb34e54371 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/model/MModel.h (.../MModel.h) (revision 6e18f1d24b8cc3d84d26f46f36f73deb34e54371) +++ sources/model/MModel.h (.../MModel.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -97,7 +97,10 @@ #include "MAdjustTDDateTimeResponse.h" #include "MAdjustDDDateTimeResponse.h" #include "MDuetRoWaterDG.h" -#include "MAdjustHDInstitutionalRecordResponse.h" +#include "MAdjustTDInstitutionalRecordResponse.h" +#include "MTDInstitutionalRecordResponse.h" +#include "MAdjustTDAdvancedInstitutionalRecordResponse.h" +#include "MTDAdvancedInstitutionalRecordResponse.h" // DG Data Messages #include "MDGDrainPumpData.h" @@ -515,6 +518,12 @@ REGISTER_METATYPE( AdjustHDAlarmVolumeResponseData ) \ REGISTER_METATYPE( AdjustInstitutionalRequestData ) \ REGISTER_METATYPE( AdjustInstitutionalRecordResponseData ) \ + REGISTER_METATYPE( InstitutionalRequestData ) \ + REGISTER_METATYPE( InstitutionalRecordResponseData ) \ + REGISTER_METATYPE( AdjustAdvancedInstitutionalRequestData ) \ + REGISTER_METATYPE( AdjustAdvancedInstitutionalRecordResponseData ) \ + REGISTER_METATYPE( AdvancedInstitutionalRequestData ) \ + REGISTER_METATYPE( AdvancedInstitutionalRecordResponseData ) \ /* HD reset in service mode */ \ REGISTER_METATYPE( AdjustHDResetInSrvcRequestData ) \ @@ -673,7 +682,9 @@ /* Settings - HD Data Response */ \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, HDUsageInfoResponseData ) \ ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustInstitutionalRecordResponseData ) \ - + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, InstitutionalRecordResponseData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdjustAdvancedInstitutionalRecordResponseData ) \ + ACTION_RECEIVE_BRIDGE_CONNECTION(vSOURCE, AdvancedInstitutionalRecordResponseData ) \ // /* Request */ ---------------------------------------------------------// #define ADJUST_TRANSMT_MODEL_BRIDGE_CONNECTIONS(vSOURCE) \ /* CONFIRM */ \ @@ -732,6 +743,9 @@ /* Settings - HD Info */ \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, HDUsageInfoRequestData ) \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, InstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustAdvancedInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdvancedInstitutionalRequestData ) \ /* HD reset in service mode */ \ ADJUST_TRANSMT_BRIDGE_CONNECTION(vSOURCE, AdjustHDResetInSrvcRequestData ) \ @@ -893,8 +907,10 @@ /* Settings - HD Data Response */ \ ACTION_RECEIVE_BRIDGE_DEFINITION( HDUsageInfoResponseData ) \ ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustInstitutionalRecordResponseData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( InstitutionalRecordResponseData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( AdjustAdvancedInstitutionalRecordResponseData ) \ + ACTION_RECEIVE_BRIDGE_DEFINITION( AdvancedInstitutionalRecordResponseData ) \ - #define ADJUST_TRANSMT_MODEL_BRIDGE_DEFINITIONS \ /* Request --------------------------------------------------------- */ \ /* CONFIRM */ \ @@ -953,6 +969,9 @@ /* Settings - HD Info */ \ ADJUST_TRANSMT_BRIDGE_DEFINITION( HDUsageInfoRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION( InstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustAdvancedInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION( AdvancedInstitutionalRequestData ) \ /* HD reset in service mode */ \ ADJUST_TRANSMT_BRIDGE_DEFINITION( AdjustHDResetInSrvcRequestData ) \ @@ -1014,6 +1033,9 @@ /* Settings - HD Info */ \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( HDUsageInfoRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( InstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustAdvancedInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdvancedInstitutionalRequestData ) \ /* HD reset in service mode */ \ ADJUST_TRANSMT_BRIDGE_DEFINITION_NOEMIT( AdjustHDResetInSrvcRequestData ) \ @@ -1075,6 +1097,9 @@ /* Settings - HD Info */ \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( HDUsageInfoRequestData ) \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( InstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustAdvancedInstitutionalRequestData ) \ + ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdvancedInstitutionalRequestData ) \ /* HD reset in service mode */ \ ADJUST_TRANSMT_BRIDGE_DEFINITION_PUBLIC( AdjustHDResetInSrvcRequestData ) \ @@ -1220,8 +1245,10 @@ /* Settings - HD data response */ \ ACTION_RECEIVE_SIGNAL( HDUsageInfoResponseData ) \ ACTION_RECEIVE_SIGNAL( AdjustInstitutionalRecordResponseData ) \ + ACTION_RECEIVE_SIGNAL( InstitutionalRecordResponseData ) \ + ACTION_RECEIVE_SIGNAL( AdjustAdvancedInstitutionalRecordResponseData ) \ + ACTION_RECEIVE_SIGNAL( AdvancedInstitutionalRecordResponseData ) \ - //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// Fisheye: Tag e49c956894f999f6539b0c404dd1c9b18a76bb4b refers to a dead (removed) revision in file `sources/model/hd/adjustment/settings/MAdjustHDInstitutionalRecordResponse.cpp'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag e49c956894f999f6539b0c404dd1c9b18a76bb4b refers to a dead (removed) revision in file `sources/model/hd/adjustment/settings/MAdjustHDInstitutionalRecordResponse.h'. Fisheye: No comparison available. Pass `N' to diff? Index: sources/model/hd/adjustment/settings/MAdjustHDRequests.h =================================================================== diff -u -r08ffb068817ab0bb1c7f2fe2705986142ac68601 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/model/hd/adjustment/settings/MAdjustHDRequests.h (.../MAdjustHDRequests.h) (revision 08ffb068817ab0bb1c7f2fe2705986142ac68601) +++ sources/model/hd/adjustment/settings/MAdjustHDRequests.h (.../MAdjustHDRequests.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -272,8 +272,8 @@ }; /*! - * \brief The MAdjustInstitutionalReqclass - * \details The HD Service Mode request model + * \brief The MInstitutionalRecordReq + * \details The TD Institutional request model * * | MSG | CAN ID | Type | Ack | Src | Dest | Description | * |:------:|:------:|:----:|:---:|:---:|:----:|:-----------:| @@ -284,7 +284,7 @@ * | (N/A) || * */ -class MAdjustInstitutionalRecordReq : public MModel { +class MInstitutionalRecordReq : public MModel { public: QString toString() { @@ -298,6 +298,328 @@ }; /*! +* \brief The MAdjustInstitutionalReq + * \details The TD Institutional request model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | +* |:------:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * | 0x8900 | 0x100 | Req | Y | UI | HD | Institutional Record Set Request | + * + * | Payload || + * | || + * | #1: (U32) | \ref Data::mBloodFlowMin | + * | #2: (U32) | \ref Data::mBloodFlowMax | + * | #3: (U32) | \ref Data::mBloodFlowDef | + * | #4: (U32) | \ref Data::mDialysateFlowMin | + * | #5: (U32) | \ref Data::mDialysateFlowMax | + * | #6: (U32) | \ref Data::mDialysateFlowDef | + * | #7: (U32) | \ref Data::mTreatmentDurationMin | + * | #8: (U32) | \ref Data::mTreatmentDurationMax | + * | #9: (U32) | \ref Data::mTreatmentDurationDef | + * | #10:(F32) | \ref Data::mHepBolusVolumeMin | + * | #11:(F32) | \ref Data::mHepBolusVolumeMax | + * | #12:(F32) | \ref Data::mHepBolusVolumeDef | + * | #13:(F32) | \ref Data::mHepDispRateMin | + * | #14:(F32) | \ref Data::mHepDispRateMax | + * | #15:(F32) | \ref Data::mHepDispRateDef | + * | #16:(U32) | \ref Data::mHepStopTimeMin | + * | #17:(U32) | \ref Data::mHepStopTimeMax | + * | #18:(F32) | \ref Data::mDialysateTempMin | + * | #19:(F32) | \ref Data::mDialysateTempMax | + * | #20:(F32) | \ref Data::mDialysateTempDef | + * | #21:(F32) | \ref Data::mPotassiumMin | + * | #22:(F32) | \ref Data::mPotassiumMax | + * | #23:(F32) | \ref Data::mCalciumMin | + * | #24:(F32) | \ref Data::mCalciumMax | + * | #25:(U32) | \ref Data::mDialysateBicarbonateMin | + * | #26:(U32) | \ref Data::mDialysateBicarbonateMax | + * | #27:(U32) | \ref Data::mDialysateBicarbonateDef | + * | #28:(U32) | \ref Data::mDialysateSodiumMin | + * | #29:(U32) | \ref Data::mDialysateSodiumMax | + * | #30:(U32) | \ref Data::mDialysateSodiumDef | + * | #31:(U32) | \ref Data::mFluidBolusVolumeMin | + * | #32:(U32) | \ref Data::mFluidBolusVolumeMax | + * | #33:(U32) | \ref Data::mFluidBolusVolumeDef | + * | #34:(U32) | \ref Data::mArterialWindowMin | + * | #35:(U32) | \ref Data::mArterialWindowMax | + * | #36:(U32) | \ref Data::mArterialWindowDef | + * | #37:(U32) | \ref Data::mVenousWindowMin | + * | #38:(U32) | \ref Data::mVenousWindowMax | + * | #39:(U32) | \ref Data::mVenousWindowDef | + * | #40:(U32) | \ref Data::mVenousAsymmetricMin | + * | #41:(U32) | \ref Data::mVenousAsymmetricMax | + * | #42:(U32) | \ref Data::mVenousAsymmetricDef | + * | #43:(U32) | \ref Data::mTMPWindowMin | + * | #44:(U32) | \ref Data::mTMPWindowMax | + * | #45:(U32) | \ref Data::mTMPWindowDef | + * | #46:(F32) | \ref Data::mUltrafiltrationVolumeMin | + * | #47:(F32) | \ref Data::mUltrafiltrationVolumeMax | + * | #48:(F32) | \ref Data::mUltrafiltrationVolumeDef | + * | #49:(U32) | \ref Data::mVitalsIntervalDef | + * | #50:(U32) | \ref Data::mRinsebackVolumeMin | + * | #51:(U32) | \ref Data::mRinsebackVolumeMax | + * | #52:(U32) | \ref Data::mRinsebackVolumeDef | + * | #53:(U32) | \ref Data::mRinsebackFlowRateMin | + * | #54:(U32) | \ref Data::mRinsebackFlowRateMax | + * | #55:(U32) | \ref Data::mRinsebackFlowRateDef | + * | #56:(F32) | \ref Data::mSubstitutionVolumeMin | + * | #57:(F32) | \ref Data::mSubstitutionVolumeMax | + * | #58:(F32) | \ref Data::mSubstitutionVolumeDef | +* +*/ +class MAdjustInstitutionalRecordReq : public MModel { +public: + quint32 mBloodFlowMin = 0 ; + quint32 mBloodFlowMax = 0 ; + quint32 mBloodFlowDef = 0 ; + quint32 mDialysateFlowMin = 0 ; + quint32 mDialysateFlowMax = 0 ; + quint32 mDialysateFlowDef = 0 ; + quint32 mTreatmentDurationMin = 0 ; + quint32 mTreatmentDurationMax = 0 ; + quint32 mTreatmentDurationDef = 0 ; + float mHepBolusVolumeMin = 0 ; + float mHepBolusVolumeMax = 0 ; + float mHepBolusVolumeDef = 0 ; + float mHepDispRateMin = 0 ; + float mHepDispRateMax = 0 ; + float mHepDispRateDef = 0 ; + quint32 mHepStopTimeMin = 0 ; + quint32 mHepStopTimeMax = 0 ; + float mDialysateTempMin = 0 ; + float mDialysateTempMax = 0 ; + float mDialysateTempDef = 0 ; + float mPotassiumMin = 0 ; + float mPotassiumMax = 0 ; + float mCalciumMin = 0 ; + float mCalciumMax = 0 ; + quint32 mDialysateBicarbonateMin = 0 ; + quint32 mDialysateBicarbonateMax = 0 ; + quint32 mDialysateBicarbonateDef = 0 ; + quint32 mDialysateSodiumMin = 0 ; + quint32 mDialysateSodiumMax = 0 ; + quint32 mDialysateSodiumDef = 0 ; + quint32 mFluidBolusVolumeMin = 0 ; + quint32 mFluidBolusVolumeMax = 0 ; + quint32 mFluidBolusVolumeDef = 0 ; + quint32 mArterialWindowMin = 0 ; + quint32 mArterialWindowMax = 0 ; + quint32 mArterialWindowDef = 0 ; + quint32 mVenousWindowMin = 0 ; + quint32 mVenousWindowMax = 0 ; + quint32 mVenousWindowDef = 0 ; + quint32 mVenousAsymmetricMin = 0 ; + quint32 mVenousAsymmetricMax = 0 ; + quint32 mVenousAsymmetricDef = 0 ; + quint32 mTMPWindowMin = 0 ; + quint32 mTMPWindowMax = 0 ; + quint32 mTMPWindowDef = 0 ; + float mUltrafiltrationVolumeMin = 0 ; + float mUltrafiltrationVolumeMax = 0 ; + float mUltrafiltrationVolumeDef = 0 ; + quint32 mVitalsIntervalDef = 0 ; + quint32 mRinsebackVolumeMin = 0 ; + quint32 mRinsebackVolumeMax = 0 ; + quint32 mRinsebackVolumeDef = 0 ; + quint32 mRinsebackFlowRateMin = 0 ; + quint32 mRinsebackFlowRateMax = 0 ; + quint32 mRinsebackFlowRateDef = 0 ; + float mSubstitutionVolumeMin = 0 ; + float mSubstitutionVolumeMax = 0 ; + float mSubstitutionVolumeDef = 0 ; + + QString toString() { + return toString({ + mBloodFlowMin , + mBloodFlowMax , + mBloodFlowDef , + mDialysateFlowMin , + mDialysateFlowMax , + mDialysateFlowDef , + mTreatmentDurationMin , + mTreatmentDurationMax , + mTreatmentDurationDef , + mHepBolusVolumeMin , + mHepBolusVolumeMax , + mHepBolusVolumeDef , + mHepDispRateMin , + mHepDispRateMax , + mHepDispRateDef , + mHepStopTimeMin , + mHepStopTimeMax , + mDialysateTempMin , + mDialysateTempMax , + mDialysateTempDef , + mPotassiumMin , + mPotassiumMax , + mCalciumMin , + mCalciumMax , + mDialysateBicarbonateMin , + mDialysateBicarbonateMax , + mDialysateBicarbonateDef , + mDialysateSodiumMin , + mDialysateSodiumMax , + mDialysateSodiumDef , + mFluidBolusVolumeMin , + mFluidBolusVolumeMax , + mFluidBolusVolumeDef , + mArterialWindowMin , + mArterialWindowMax , + mArterialWindowDef , + mVenousWindowMin , + mVenousWindowMax , + mVenousWindowDef , + mVenousAsymmetricMin , + mVenousAsymmetricMax , + mVenousAsymmetricDef , + mTMPWindowMin , + mTMPWindowMax , + mTMPWindowDef , + mUltrafiltrationVolumeMin , + mUltrafiltrationVolumeMax , + mUltrafiltrationVolumeDef , + mVitalsIntervalDef , + mRinsebackVolumeMin , + mRinsebackVolumeMax , + mRinsebackVolumeDef , + mRinsebackFlowRateMin , + mRinsebackFlowRateMax , + mRinsebackFlowRateDef , + mSubstitutionVolumeMin , + mSubstitutionVolumeMax , + mSubstitutionVolumeDef , + }); + } + + static QString toString(const QVariantList &vParameters) { + return MModel::toString("AdjustInstitutionalRecord", vParameters); + } + + static Can::Can_Id canid () { return Can::eChlid_UI_TD; } +}; + +/*! + * \brief The MAdvancedInstitutionalRecordReq + * \details The TD Advanced Institutional request model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | + * |:------:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * | 0x8900 | 0x100 | Req | Y | UI | HD | Advanced Institutional Record Request | + * + * | Payload || + * | || + * | (N/A) || + * + */ +class MAdvancedInstitutionalRecordReq : public MModel { +public: + + QString toString() { + return toString({}); + } + static QString toString(const QVariantList &vParameters) { + return MModel::toString("AdvancedInstitutionalRecord", vParameters); + } + + static Can::Can_Id canid () { return Can::eChlid_UI_TD; } +}; + + +/*! + * \brief The MAdjustAdvancedInstitutionalRecordReq + * \details The TD Advanced Institutionalrequest model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | + * |:------:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * | 0x8900 | 0x100 | Req | Y | UI | HD | Advanced Institutional Record Set Request | + * + * | Payload || + * | || + * | #1: (U32) | \ref Data::mMinRORejectionRatioAlarmMin | + * | #2: (U32) | \ref Data::mMinRORejectionRatioAlarmMax | + * | #3: (U32) | \ref Data::mMinRORejectionRatioAlarmDef | + * | #4: (U32) | \ref Data::mDisinfectionFrequencyMin | + * | #5: (U32) | \ref Data::mDisinfectionFrequencyMax | + * | #6: (U32) | \ref Data::mDisinfectionFrequencyDef | + * | #7: (U32) | \ref Data::mDisinfectionParametersCycleTimeMin | + * | #8: (U32) | \ref Data::mDisinfectionParametersCycleTimeMax | + * | #9: (U32) | \ref Data::mDisinfectionParametersCycleTimeDef | + * | #10:(U32) | \ref Data::mMaxBloodPumpStopTimeMin | + * | #11:(U32) | \ref Data::mMaxBloodPumpStopTimeMax | + * | #12:(U32) | \ref Data::mMaxBloodPumpStopTimeDef | + * | #13:(U32) | \ref Data::mInletWaterCondLowThresholdMin | + * | #14:(U32) | \ref Data::mInletWaterCondLowThresholdMax | + * | #15:(U32) | \ref Data::mInletWaterCondLowThresholdDef | + * | #16:(U32) | \ref Data::mInletWaterCondHighThresholdMin | + * | #17:(U32) | \ref Data::mInletWaterCondHighThresholdMax | + * | #18:(U32) | \ref Data::mInletWaterCondHighThresholdDef | + * | #19:(U32) | \ref Data::mChlorineWaterSampleCheckMin | + * | #20:(U32) | \ref Data::mChlorineWaterSampleCheckMax | + * | #21:(U32) | \ref Data::mChlorineWaterSampleCheckDef | + * | #22:(U32) | \ref Data::mWaterSampleTestResultRequiredDef | + * + */ +class MAdjustAdvancedInstitutionalRecordReq : public MModel { +public: + quint32 mMinRORejectionRatioAlarmMin = 0; + quint32 mMinRORejectionRatioAlarmMax = 0; + quint32 mMinRORejectionRatioAlarmDef = 0; + quint32 mDisinfectionFrequencyMin = 0; + quint32 mDisinfectionFrequencyMax = 0; + quint32 mDisinfectionFrequencyDef = 0; + quint32 mDisinfectionParametersCycleTimeMin = 0; + quint32 mDisinfectionParametersCycleTimeMax = 0; + quint32 mDisinfectionParametersCycleTimeDef = 0; + quint32 mMaxBloodPumpStopTimeMin = 0; + quint32 mMaxBloodPumpStopTimeMax = 0; + quint32 mMaxBloodPumpStopTimeDef = 0; + quint32 mInletWaterCondLowThresholdMin = 0; + quint32 mInletWaterCondLowThresholdMax = 0; + quint32 mInletWaterCondLowThresholdDef = 0; + quint32 mInletWaterCondHighThresholdMin = 0; + quint32 mInletWaterCondHighThresholdMax = 0; + quint32 mInletWaterCondHighThresholdDef = 0; + quint32 mChlorineWaterSampleCheckMin = 0; + quint32 mChlorineWaterSampleCheckMax = 0; + quint32 mChlorineWaterSampleCheckDef = 0; + quint32 mWaterSampleTestResultRequiredDef = 0; + + + QString toString() { + return toString({ + mMinRORejectionRatioAlarmMin , + mMinRORejectionRatioAlarmMax , + mMinRORejectionRatioAlarmDef , + mDisinfectionFrequencyMin , + mDisinfectionFrequencyMax , + mDisinfectionFrequencyDef , + mDisinfectionParametersCycleTimeMin, + mDisinfectionParametersCycleTimeMax, + mDisinfectionParametersCycleTimeDef, + mMaxBloodPumpStopTimeMin , + mMaxBloodPumpStopTimeMax , + mMaxBloodPumpStopTimeDef , + mInletWaterCondLowThresholdMin , + mInletWaterCondLowThresholdMax , + mInletWaterCondLowThresholdDef , + mInletWaterCondHighThresholdMin , + mInletWaterCondHighThresholdMax , + mInletWaterCondHighThresholdDef , + mChlorineWaterSampleCheckMin , + mChlorineWaterSampleCheckMax , + mChlorineWaterSampleCheckDef , + mWaterSampleTestResultRequiredDef , + }); + } + + static QString toString(const QVariantList &vParameters) { + return MModel::toString("AdjustAdvancedInstitutionalRecord", vParameters); + } + + static Can::Can_Id canid () { return Can::eChlid_UI_TD; } +}; + +/*! * \brief The MAdjustHDResetReq class * \details The DG/HD versions request model * @@ -324,13 +646,16 @@ }; } -typedef Model:: MAdjustServiceModeReq AdjustServiceModeRequestData; -typedef Model:: MAdjustVersionsReq AdjustVersionsRequestData; -typedef Model:: MAdjustVersionsRsp AdjustVersionsResponseData; -typedef Model:: MAdjustServiceDatesReq AdjustServiceDatesRequestData; -typedef Model:: MAdjustTDDateTimeReq AdjustTDDateTimeRequestData; -typedef Model:: MAdjustHDAlarmVolumeReq AdjustHDAlarmVolumeRequestData; -typedef Model:: MAdjustUIPostFinalResultReq AdjustUIPostFinalResultRequestData; -typedef Model:: MHDUsageInfoReq HDUsageInfoRequestData; -typedef Model::MAdjustInstitutionalRecordReq AdjustInstitutionalRequestData; -typedef Model:: MAdjustHDResetInSrvceModeReq AdjustHDResetInSrvcRequestData; +typedef Model:: MAdjustServiceModeReq AdjustServiceModeRequestData; +typedef Model:: MAdjustVersionsReq AdjustVersionsRequestData; +typedef Model:: MAdjustVersionsRsp AdjustVersionsResponseData; +typedef Model:: MAdjustServiceDatesReq AdjustServiceDatesRequestData; +typedef Model:: MAdjustTDDateTimeReq AdjustTDDateTimeRequestData; +typedef Model:: MAdjustHDAlarmVolumeReq AdjustHDAlarmVolumeRequestData; +typedef Model:: MAdjustUIPostFinalResultReq AdjustUIPostFinalResultRequestData; +typedef Model:: MHDUsageInfoReq HDUsageInfoRequestData; +typedef Model:: MInstitutionalRecordReq InstitutionalRequestData; +typedef Model:: MAdjustInstitutionalRecordReq AdjustInstitutionalRequestData; +typedef Model:: MAdvancedInstitutionalRecordReq AdvancedInstitutionalRequestData; +typedef Model::MAdjustAdvancedInstitutionalRecordReq AdjustAdvancedInstitutionalRequestData; +typedef Model:: MAdjustHDResetInSrvceModeReq AdjustHDResetInSrvcRequestData; Index: sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.cpp =================================================================== diff -u --- sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.cpp (revision 0) +++ sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,113 @@ +/*! + * + * Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MAdjustTDAdvancedInstitutionalRecordResponse.cpp + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#include "MAdjustTDAdvancedInstitutionalRecordResponse.h" + +using namespace Model; + +QVariantList MAdjustAdvancedInstitutionalRecordResponse::parameters() const { + return { + _data.mAccepted .value, + _data.mMinRORejectionRatioAlarmMinRejectionReason .value, + _data.mMinRORejectionRatioAlarmMaxRejectionReason .value, + _data.mMinRORejectionRatioAlarmDefRejectionReason .value, + _data.mDisinfectionFrequencyMinRejectionReason .value, + _data.mDisinfectionFrequencyMaxRejectionReason .value, + _data.mDisinfectionFrequencyDefRejectionReason .value, + _data.mDisinfectionParametersCycleTimeMinRejectionReason .value, + _data.mDisinfectionParametersCycleTimeMaxRejectionReason .value, + _data.mDisinfectionParametersCycleTimeDefRejectionReason .value, + _data.mMaxBloodPumpStopTimeMinRejectionReason .value, + _data.mMaxBloodPumpStopTimeMaxRejectionReason .value, + _data.mMaxBloodPumpStopTimeDefRejectionReason .value, + _data.mInletWaterCondLowThresholdMinRejectionReason .value, + _data.mInletWaterCondLowThresholdMaxRejectionReason .value, + _data.mInletWaterCondLowThresholdDefRejectionReason .value, + _data.mInletWaterCondHighThresholdMinRejectionReason .value, + _data.mInletWaterCondHighThresholdMaxRejectionReason .value, + _data.mInletWaterCondHighThresholdDefRejectionReason .value, + _data.mChlorineWaterSampleCheckMinRejectionReason .value, + _data.mChlorineWaterSampleCheckMaxRejectionReason .value, + _data.mChlorineWaterSampleCheckDefRejectionReason .value, + _data.mWaterSampleTestResultRequiredDefRejectionReason .value, + }; +} + +bool MAdjustAdvancedInstitutionalRecordResponse::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mAccepted )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMinRORejectionRatioAlarmMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMinRORejectionRatioAlarmMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMinRORejectionRatioAlarmDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionFrequencyMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionFrequencyMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionFrequencyDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionParametersCycleTimeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionParametersCycleTimeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionParametersCycleTimeDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMaxBloodPumpStopTimeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMaxBloodPumpStopTimeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMaxBloodPumpStopTimeDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondLowThresholdMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondLowThresholdMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondLowThresholdDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondHighThresholdMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondHighThresholdMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondHighThresholdDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mChlorineWaterSampleCheckMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mChlorineWaterSampleCheckMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mChlorineWaterSampleCheckDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mWaterSampleTestResultRequiredDefRejectionReason )) goto lError; + + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MAdjustHDDateTimeResponse::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +AdjustAdvancedInstitutionalRecordResponseData MAdjustAdvancedInstitutionalRecordResponse::data() const { + Data data; + data.mAccepted = _data.mAccepted .value; + data.mMinRORejectionRatioAlarmMinRejectionReason = _data.mMinRORejectionRatioAlarmMinRejectionReason .value; + data.mMinRORejectionRatioAlarmMaxRejectionReason = _data.mMinRORejectionRatioAlarmMaxRejectionReason .value; + data.mMinRORejectionRatioAlarmDefRejectionReason = _data.mMinRORejectionRatioAlarmDefRejectionReason .value; + data.mDisinfectionFrequencyMinRejectionReason = _data.mDisinfectionFrequencyMinRejectionReason .value; + data.mDisinfectionFrequencyMaxRejectionReason = _data.mDisinfectionFrequencyMaxRejectionReason .value; + data.mDisinfectionFrequencyDefRejectionReason = _data.mDisinfectionFrequencyDefRejectionReason .value; + data.mDisinfectionParametersCycleTimeMinRejectionReason = _data.mDisinfectionParametersCycleTimeMinRejectionReason .value; + data.mDisinfectionParametersCycleTimeMaxRejectionReason = _data.mDisinfectionParametersCycleTimeMaxRejectionReason .value; + data.mDisinfectionParametersCycleTimeDefRejectionReason = _data.mDisinfectionParametersCycleTimeDefRejectionReason .value; + data.mMaxBloodPumpStopTimeMinRejectionReason = _data.mMaxBloodPumpStopTimeMinRejectionReason .value; + data.mMaxBloodPumpStopTimeMaxRejectionReason = _data.mMaxBloodPumpStopTimeMaxRejectionReason .value; + data.mMaxBloodPumpStopTimeDefRejectionReason = _data.mMaxBloodPumpStopTimeDefRejectionReason .value; + data.mInletWaterCondLowThresholdMinRejectionReason = _data.mInletWaterCondLowThresholdMinRejectionReason .value; + data.mInletWaterCondLowThresholdMaxRejectionReason = _data.mInletWaterCondLowThresholdMaxRejectionReason .value; + data.mInletWaterCondLowThresholdDefRejectionReason = _data.mInletWaterCondLowThresholdDefRejectionReason .value; + data.mInletWaterCondHighThresholdMinRejectionReason = _data.mInletWaterCondHighThresholdMinRejectionReason .value; + data.mInletWaterCondHighThresholdMaxRejectionReason = _data.mInletWaterCondHighThresholdMaxRejectionReason .value; + data.mInletWaterCondHighThresholdDefRejectionReason = _data.mInletWaterCondHighThresholdDefRejectionReason .value; + data.mChlorineWaterSampleCheckMinRejectionReason = _data.mChlorineWaterSampleCheckMinRejectionReason .value; + data.mChlorineWaterSampleCheckMaxRejectionReason = _data.mChlorineWaterSampleCheckMaxRejectionReason .value; + data.mChlorineWaterSampleCheckDefRejectionReason = _data.mChlorineWaterSampleCheckDefRejectionReason .value; + data.mWaterSampleTestResultRequiredDefRejectionReason = _data.mWaterSampleTestResultRequiredDefRejectionReason .value; + + return data; +} Index: sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.h =================================================================== diff -u --- sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.h (revision 0) +++ sources/model/td/adjustment/settings/MAdjustTDAdvancedInstitutionalRecordResponse.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,144 @@ +/*! + * + * Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MAdjustTDAdvancedInstitutionalRecordResponse.h + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MAdjustTDAdvancedInstitutionalRecordResponse class + * \details The HD Date and Time adjustment response model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0x8900| 0x020 | Rsp | Y | HD | UI | Service Mode | + * + * | Payload || + * | || + * | #1: (U32) | \ref Data::mAccepted | + * | #3: (U32) | \ref Data::mMinRORejectionRatioAlarmMaxRejectionReason | + * | #2: (U32) | \ref Data::mMinRORejectionRatioAlarmMinRejectionReason | + * | #4: (U32) | \ref Data::mMinRORejectionRatioAlarmDefRejectionReason | + * | #5: (U32) | \ref Data::mDisinfectionFrequencyMinRejectionReason | + * | #6: (U32) | \ref Data::mDisinfectionFrequencyMaxRejectionReason | + * | #7: (U32) | \ref Data::mDisinfectionFrequencyDefRejectionReason | + * | #8: (U32) | \ref Data::mDisinfectionParametersCycleTimeMinRejectionReason | + * | #9: (U32) | \ref Data::mDisinfectionParametersCycleTimeMaxRejectionReason | + * | #10:(U32) | \ref Data::mDisinfectionParametersCycleTimeDefRejectionReason | + * | #11:(U32) | \ref Data::mMaxBloodPumpStopTimeMinRejectionReason | + * | #12:(U32) | \ref Data::mMaxBloodPumpStopTimeMaxRejectionReason | + * | #13:(U32) | \ref Data::mMaxBloodPumpStopTimeDefRejectionReason | + * | #14:(U32) | \ref Data::mInletWaterCondLowThresholdMinRejectionReason | + * | #15:(U32) | \ref Data::mInletWaterCondLowThresholdMaxRejectionReason | + * | #16:(U32) | \ref Data::mInletWaterCondLowThresholdDefRejectionReason | + * | #17:(U32) | \ref Data::mInletWaterCondHighThresholdMinRejectionReason | + * | #18:(U32) | \ref Data::mInletWaterCondHighThresholdMaxRejectionReason | + * | #19:(U32) | \ref Data::mInletWaterCondHighThresholdDefRejectionReason | + * | #20:(U32) | \ref Data::mChlorineWaterSampleCheckMinRejectionReason | + * | #21:(U32) | \ref Data::mChlorineWaterSampleCheckMaxRejectionReason | + * | #22:(U32) | \ref Data::mChlorineWaterSampleCheckDefRejectionReason | + * | #23:(U32) | \ref Data::mWaterSampleTestResultRequiredDefRejectionReason | + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Event | + * | unitText | HD | + * | infoText | ServiceMode | + * + */ +class MAdjustAdvancedInstitutionalRecordResponse : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mAccepted ; + Types::U32 mMinRORejectionRatioAlarmMinRejectionReason ; + Types::U32 mMinRORejectionRatioAlarmMaxRejectionReason ; + Types::U32 mMinRORejectionRatioAlarmDefRejectionReason ; + Types::U32 mDisinfectionFrequencyMinRejectionReason ; + Types::U32 mDisinfectionFrequencyMaxRejectionReason ; + Types::U32 mDisinfectionFrequencyDefRejectionReason ; + Types::U32 mDisinfectionParametersCycleTimeMinRejectionReason ; + Types::U32 mDisinfectionParametersCycleTimeMaxRejectionReason ; + Types::U32 mDisinfectionParametersCycleTimeDefRejectionReason ; + Types::U32 mMaxBloodPumpStopTimeMinRejectionReason ; + Types::U32 mMaxBloodPumpStopTimeMaxRejectionReason ; + Types::U32 mMaxBloodPumpStopTimeDefRejectionReason ; + Types::U32 mInletWaterCondLowThresholdMinRejectionReason ; + Types::U32 mInletWaterCondLowThresholdMaxRejectionReason ; + Types::U32 mInletWaterCondLowThresholdDefRejectionReason ; + Types::U32 mInletWaterCondHighThresholdMinRejectionReason ; + Types::U32 mInletWaterCondHighThresholdMaxRejectionReason ; + Types::U32 mInletWaterCondHighThresholdDefRejectionReason ; + Types::U32 mChlorineWaterSampleCheckMinRejectionReason ; + Types::U32 mChlorineWaterSampleCheckMaxRejectionReason ; + Types::U32 mChlorineWaterSampleCheckDefRejectionReason ; + Types::U32 mWaterSampleTestResultRequiredDefRejectionReason ; + } _data; + +public: + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("AdjustAdvancedInstitutionalRecord") ; } + + struct Data { + bool mAccepted = true ; /*!< Accepted value of type quint32 extracted out */ + quint32 mMinRORejectionRatioAlarmMinRejectionReason ; + quint32 mMinRORejectionRatioAlarmMaxRejectionReason ; + quint32 mMinRORejectionRatioAlarmDefRejectionReason ; + quint32 mDisinfectionFrequencyMinRejectionReason ; + quint32 mDisinfectionFrequencyMaxRejectionReason ; + quint32 mDisinfectionFrequencyDefRejectionReason ; + quint32 mDisinfectionParametersCycleTimeMinRejectionReason ; + quint32 mDisinfectionParametersCycleTimeMaxRejectionReason ; + quint32 mDisinfectionParametersCycleTimeDefRejectionReason ; + quint32 mMaxBloodPumpStopTimeMinRejectionReason ; + quint32 mMaxBloodPumpStopTimeMaxRejectionReason ; + quint32 mMaxBloodPumpStopTimeDefRejectionReason ; + quint32 mInletWaterCondLowThresholdMinRejectionReason ; + quint32 mInletWaterCondLowThresholdMaxRejectionReason ; + quint32 mInletWaterCondLowThresholdDefRejectionReason ; + quint32 mInletWaterCondHighThresholdMinRejectionReason ; + quint32 mInletWaterCondHighThresholdMaxRejectionReason ; + quint32 mInletWaterCondHighThresholdDefRejectionReason ; + quint32 mChlorineWaterSampleCheckMinRejectionReason ; + quint32 mChlorineWaterSampleCheckMaxRejectionReason ; + quint32 mChlorineWaterSampleCheckDefRejectionReason ; + quint32 mWaterSampleTestResultRequiredDefRejectionReason ; + }; + + MAdjustAdvancedInstitutionalRecordResponse () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MAdjustAdvancedInstitutionalRecordResponse::Data AdjustAdvancedInstitutionalRecordResponseData; Index: sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.cpp =================================================================== diff -u --- sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.cpp (revision 0) +++ sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,221 @@ + +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MAdjustTDInstitutionalRecordResponse.cpp + * \author (last) Dara Navaei + * \date (last) 19-Mar-2024 + * \author (original) Dara Navaei + * \date (original) 28-Feb-2024 + * + */ +#include "MAdjustTDInstitutionalRecordResponse.h" + +using namespace Model; + +QVariantList MAdjustInstitutionalRecordResponse::parameters() const { + return { + _data.mAccepted .value, + _data.mBloodFlowRateMinRejectionReason .value, + _data.mBloodFlowRateMaxRejectionReason .value, + _data.mBloodFlowRateDefRejectionReason .value, + _data.mDialysateFlowRateMinRejectionReason .value, + _data.mDialysateFlowRateMaxRejectionReason .value, + _data.mDialysateFlowRateDefRejectionReason .value, + _data.mTreatmentDurationMinRejectionReason .value, + _data.mTreatmentDurationMaxRejectionReason .value, + _data.mTreatmentDurationDefRejectionReason .value, + _data.mHeparinBolusVolumeMinRejectionReason .value, + _data.mHeparinBolusVolumeMaxRejectionReason .value, + _data.mHeparinBolusVolumeDefRejectionReason .value, + _data.mHeparinDispensingRateMinRejectionReason .value, + _data.mHeparinDispensingRateMaxRejectionReason .value, + _data.mHeparinDispensingRateDefRejectionReason .value, + _data.mHeparinStopTimeMinRejectionReason .value, + _data.mHeparinStopTimeMaxRejectionReason .value, + _data.mDialysateTempMinRejectionReason .value, + _data.mDialysateTempMaxRejectionReason .value, + _data.mDialysateTempDefRejectionReason .value, + _data.mAcidConcentratePotassiumMinRejectionReason .value, + _data.mAcidConcentratePotassiumMaxRejectionReason .value, + _data.mAcidConcentrateCalciumMinRejectionReason .value, + _data.mAcidConcentrateCalciumMaxRejectionReason .value, + _data.mBicarbFinalDialysateCompositionMinRejectionReason .value, + _data.mBicarbFinalDialysateCompositionMaxRejectionReason .value, + _data.mBicarbFinalDialysateCompositionDefRejectionReason .value, + _data.mSodiumFinalDialysateCompositionMinRejectionReason .value, + _data.mSodiumFinalDialysateCompositionMaxRejectionReason .value, + _data.mSodiumFinalDialysateCompositionDefRejectionReason .value, + _data.mFluidBolusVolumeMinRejectionReason .value, + _data.mFluidBolusVolumeMaxRejectionReason .value, + _data.mFluidBolusVolumeDefRejectionReason .value, + _data.mArterialPressureLimitWindowMinRejectionReason .value, + _data.mArterialPressureLimitWindowMaxRejectionReason .value, + _data.mArterialPressureLimitWindowDefRejectionReason .value, + _data.mVenousPressureLimitWindowMinRejectionReason .value, + _data.mVenousPressureLimitWindowMaxRejectionReason .value, + _data.mVenousPressureLimitWindowDefRejectionReason .value, + _data.mVenousPressureLimitAsymtrcMinRejectionReason .value, + _data.mVenousPressureLimitAsymtrcMaxRejectionReason .value, + _data.mVenousPressureLimitAsymtrcDefRejectionReason .value, + _data.mTrancembrncPressureLimitWindowMinRejectionReason .value, + _data.mTrancembrncPressureLimitWindowMaxRejectionReason .value, + _data.mTrancembrncPressureLimitWindowDefRejectionReason .value, + _data.mUltrafiltrationVolumeMinRejectionReason .value, + _data.mUltrafiltrationVolumeMaxRejectionReason .value, + _data.mUltrafiltrationVolumeDefRejectionReason .value, + _data.mVitalsIntervalDefRejectionReason .value, + _data.mRinsebackVolumeMinRejectionReason .value, + _data.mRinsebackVolumeMaxRejectionReason .value, + _data.mRinsebackVolumeDefRejectionReason .value, + _data.mRinsebackFlowRateMinRejectionReason .value, + _data.mRinsebackFlowRateMaxRejectionReason .value, + _data.mRinsebackFlowRateDefRejectionReason .value, + _data.mSubstitutionVolumeMinRejectionReason .value, + _data.mSubstitutionVolumeMaxRejectionReason .value, + _data.mSubstitutionVolumeDefRejectionReason .value, + }; +} + +bool MAdjustInstitutionalRecordResponse::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mAccepted )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodFlowRateMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodFlowRateMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodFlowRateDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateFlowRateMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateFlowRateMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateFlowRateDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentDurationMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentDurationMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentDurationDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinBolusVolumeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinBolusVolumeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinBolusVolumeDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinDispensingRateMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinDispensingRateMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinDispensingRateDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinStopTimeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHeparinStopTimeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateTempMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateTempMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateTempDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mAcidConcentratePotassiumMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mAcidConcentratePotassiumMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mAcidConcentrateCalciumMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mAcidConcentrateCalciumMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBicarbFinalDialysateCompositionMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBicarbFinalDialysateCompositionMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBicarbFinalDialysateCompositionDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSodiumFinalDialysateCompositionMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSodiumFinalDialysateCompositionMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSodiumFinalDialysateCompositionDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mFluidBolusVolumeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mFluidBolusVolumeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mFluidBolusVolumeDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mArterialPressureLimitWindowMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mArterialPressureLimitWindowMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mArterialPressureLimitWindowDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousPressureLimitWindowMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousPressureLimitWindowMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousPressureLimitWindowDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousPressureLimitAsymtrcMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousPressureLimitAsymtrcMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousPressureLimitAsymtrcDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTrancembrncPressureLimitWindowMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTrancembrncPressureLimitWindowMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTrancembrncPressureLimitWindowDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mUltrafiltrationVolumeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mUltrafiltrationVolumeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mUltrafiltrationVolumeDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVitalsIntervalDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackVolumeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackVolumeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackVolumeDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackFlowRateMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackFlowRateMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackFlowRateDefRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSubstitutionVolumeMinRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSubstitutionVolumeMaxRejectionReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSubstitutionVolumeDefRejectionReason )) goto lError; + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MAdjustHDDateTimeResponse::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +AdjustInstitutionalRecordResponseData MAdjustInstitutionalRecordResponse::data() const { + Data data; + data.mAccepted = _data.mAccepted .value; + data.mBloodFlowRateMinRejectionReason = _data.mBloodFlowRateMinRejectionReason .value; + data.mBloodFlowRateMaxRejectionReason = _data.mBloodFlowRateMaxRejectionReason .value; + data.mBloodFlowRateDefRejectionReason = _data.mBloodFlowRateDefRejectionReason .value; + data.mDialysateFlowRateMinRejectionReason = _data.mDialysateFlowRateMinRejectionReason .value; + data.mDialysateFlowRateMaxRejectionReason = _data.mDialysateFlowRateMaxRejectionReason .value; + data.mDialysateFlowRateDefRejectionReason = _data.mDialysateFlowRateDefRejectionReason .value; + data.mTreatmentDurationMinRejectionReason = _data.mTreatmentDurationMinRejectionReason .value; + data.mTreatmentDurationMaxRejectionReason = _data.mTreatmentDurationMaxRejectionReason .value; + data.mTreatmentDurationDefRejectionReason = _data.mTreatmentDurationDefRejectionReason .value; + data.mHeparinBolusVolumeMinRejectionReason = _data.mHeparinBolusVolumeMinRejectionReason .value; + data.mHeparinBolusVolumeMaxRejectionReason = _data.mHeparinBolusVolumeMaxRejectionReason .value; + data.mHeparinBolusVolumeDefRejectionReason = _data.mHeparinBolusVolumeDefRejectionReason .value; + data.mHeparinDispensingRateMinRejectionReason = _data.mHeparinDispensingRateMinRejectionReason .value; + data.mHeparinDispensingRateMaxRejectionReason = _data.mHeparinDispensingRateMaxRejectionReason .value; + data.mHeparinDispensingRateDefRejectionReason = _data.mHeparinDispensingRateDefRejectionReason .value; + data.mHeparinStopTimeMinRejectionReason = _data.mHeparinStopTimeMinRejectionReason .value; + data.mHeparinStopTimeMaxRejectionReason = _data.mHeparinStopTimeMaxRejectionReason .value; + data.mDialysateTempMinRejectionReason = _data.mDialysateTempMinRejectionReason .value; + data.mDialysateTempMaxRejectionReason = _data.mDialysateTempMaxRejectionReason .value; + data.mDialysateTempDefRejectionReason = _data.mDialysateTempDefRejectionReason .value; + data.mAcidConcentratePotassiumMinRejectionReason = _data.mAcidConcentratePotassiumMinRejectionReason .value; + data.mAcidConcentratePotassiumMaxRejectionReason = _data.mAcidConcentratePotassiumMaxRejectionReason .value; + data.mAcidConcentrateCalciumMinRejectionReason = _data.mAcidConcentrateCalciumMinRejectionReason .value; + data.mAcidConcentrateCalciumMaxRejectionReason = _data.mAcidConcentrateCalciumMaxRejectionReason .value; + data.mBicarbFinalDialysateCompositionMinRejectionReason = _data.mBicarbFinalDialysateCompositionMinRejectionReason .value; + data.mBicarbFinalDialysateCompositionMaxRejectionReason = _data.mBicarbFinalDialysateCompositionMaxRejectionReason .value; + data.mBicarbFinalDialysateCompositionDefRejectionReason = _data.mBicarbFinalDialysateCompositionDefRejectionReason .value; + data.mSodiumFinalDialysateCompositionMinRejectionReason = _data.mSodiumFinalDialysateCompositionMinRejectionReason .value; + data.mSodiumFinalDialysateCompositionMaxRejectionReason = _data.mSodiumFinalDialysateCompositionMaxRejectionReason .value; + data.mSodiumFinalDialysateCompositionDefRejectionReason = _data.mSodiumFinalDialysateCompositionDefRejectionReason .value; + data.mFluidBolusVolumeMinRejectionReason = _data.mFluidBolusVolumeMinRejectionReason .value; + data.mFluidBolusVolumeMaxRejectionReason = _data.mFluidBolusVolumeMaxRejectionReason .value; + data.mFluidBolusVolumeDefRejectionReason = _data.mFluidBolusVolumeDefRejectionReason .value; + data.mArterialPressureLimitWindowMinRejectionReason = _data.mArterialPressureLimitWindowMinRejectionReason .value; + data.mArterialPressureLimitWindowMaxRejectionReason = _data.mArterialPressureLimitWindowMaxRejectionReason .value; + data.mArterialPressureLimitWindowDefRejectionReason = _data.mArterialPressureLimitWindowDefRejectionReason .value; + data.mVenousPressureLimitWindowMinRejectionReason = _data.mVenousPressureLimitWindowMinRejectionReason .value; + data.mVenousPressureLimitWindowMaxRejectionReason = _data.mVenousPressureLimitWindowMaxRejectionReason .value; + data.mVenousPressureLimitWindowDefRejectionReason = _data.mVenousPressureLimitWindowDefRejectionReason .value; + data.mVenousPressureLimitAsymtrcMinRejectionReason = _data.mVenousPressureLimitAsymtrcMinRejectionReason .value; + data.mVenousPressureLimitAsymtrcMaxRejectionReason = _data.mVenousPressureLimitAsymtrcMaxRejectionReason .value; + data.mVenousPressureLimitAsymtrcDefRejectionReason = _data.mVenousPressureLimitAsymtrcDefRejectionReason .value; + data.mTrancembrncPressureLimitWindowMinRejectionReason = _data.mTrancembrncPressureLimitWindowMinRejectionReason .value; + data.mTrancembrncPressureLimitWindowMaxRejectionReason = _data.mTrancembrncPressureLimitWindowMaxRejectionReason .value; + data.mTrancembrncPressureLimitWindowDefRejectionReason = _data.mTrancembrncPressureLimitWindowDefRejectionReason .value; + data.mUltrafiltrationVolumeMinRejectionReason = _data.mUltrafiltrationVolumeMinRejectionReason .value; + data.mUltrafiltrationVolumeMaxRejectionReason = _data.mUltrafiltrationVolumeMaxRejectionReason .value; + data.mUltrafiltrationVolumeDefRejectionReason = _data.mUltrafiltrationVolumeDefRejectionReason .value; + data.mVitalsIntervalDefRejectionReason = _data.mVitalsIntervalDefRejectionReason .value; + data.mRinsebackVolumeMinRejectionReason = _data.mRinsebackVolumeMinRejectionReason .value; + data.mRinsebackVolumeMaxRejectionReason = _data.mRinsebackVolumeMaxRejectionReason .value; + data.mRinsebackVolumeDefRejectionReason = _data.mRinsebackVolumeDefRejectionReason .value; + data.mRinsebackFlowRateMinRejectionReason = _data.mRinsebackFlowRateMinRejectionReason .value; + data.mRinsebackFlowRateMaxRejectionReason = _data.mRinsebackFlowRateMaxRejectionReason .value; + data.mRinsebackFlowRateDefRejectionReason = _data.mRinsebackFlowRateDefRejectionReason .value; + data.mSubstitutionVolumeMinRejectionReason = _data.mSubstitutionVolumeMinRejectionReason .value; + data.mSubstitutionVolumeMaxRejectionReason = _data.mSubstitutionVolumeMaxRejectionReason .value; + data.mSubstitutionVolumeDefRejectionReason = _data.mSubstitutionVolumeDefRejectionReason .value; + + return data; +} Index: sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.h =================================================================== diff -u --- sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.h (revision 0) +++ sources/model/td/adjustment/settings/MAdjustTDInstitutionalRecordResponse.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,252 @@ +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MAdjustTDInstitutionalRecordResponse.h + * \author (last) Behrouz NematiPour + * \date (last) 26-Mar-2024 + * \author (original) Dara Navaei + * \date (original) 28-Feb-2024 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MAdjustTDInstitutionalRecordResponse class + * \details The HD Date and Time adjustment response model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0x8500| 0x020 | Rsp | Y | HD | UI | Service Mode | + * + * | Payload || + * | || + * | #1: (U32) | \ref Data::mAccepted | + * | #2: (U32) | \ref Data::mBloodFlowRateMinRejectionReason | + * | #3: (U32) | \ref Data::mBloodFlowRateMaxRejectionReason | + * | #4: (U32) | \ref Data::mBloodFlowRateDefRejectionReason | + * | #5: (U32) | \ref Data::mDialysateFlowRateMinRejectionReason | + * | #6: (U32) | \ref Data::mDialysateFlowRateMaxRejectionReason | + * | #7: (U32) | \ref Data::mDialysateFlowRateDefRejectionReason | + * | #8: (U32) | \ref Data::mTreatmentDurationMinRejectionReason | + * | #9: (U32) | \ref Data::mTreatmentDurationMaxRejectionReason | + * | #10:(U32) | \ref Data::mTreatmentDurationDefRejectionReason | + * | #11:(F32) | \ref Data::mHeparinBolusVolumeMinRejectionReason | + * | #12:(F32) | \ref Data::mHeparinBolusVolumeMaxRejectionReason | + * | #13:(F32) | \ref Data::mHeparinBolusVolumeDefRejectionReason | + * | #14:(F32) | \ref Data::mHeparinDispensingRateMinRejectionReason | + * | #15:(F32) | \ref Data::mHeparinDispensingRateMaxRejectionReason | + * | #16:(F32) | \ref Data::mHeparinDispensingRateDefRejectionReason | + * | #17:(U32) | \ref Data::mHeparinStopTimeMinRejectionReason | + * | #18:(U32) | \ref Data::mHeparinStopTimeMaxRejectionReason | + * | #19:(F32) | \ref Data::mDialysateTempMinRejectionReason | + * | #20:(F32) | \ref Data::mDialysateTempMaxRejectionReason | + * | #21:(F32) | \ref Data::mDialysateTempDefRejectionReason | + * | #22:(F32) | \ref Data::mAcidConcentratePotassiumMinRejectionReason | + * | #23:(F32) | \ref Data::mAcidConcentratePotassiumMaxRejectionReason | + * | #24:(F32) | \ref Data::mAcidConcentrateCalciumMinRejectionReason | + * | #25:(F32) | \ref Data::mAcidConcentrateCalciumMaxRejectionReason | + * | #26:(U32) | \ref Data::mBicarbFinalDialysateCompositionMinRejectionReason | + * | #27:(U32) | \ref Data::mBicarbFinalDialysateCompositionMaxRejectionReason | + * | #28:(U32) | \ref Data::mBicarbFinalDialysateCompositionDefRejectionReason | + * | #29:(U32) | \ref Data::mSodiumFinalDialysateCompositionMinRejectionReason | + * | #30:(U32) | \ref Data::mSodiumFinalDialysateCompositionMaxRejectionReason | + * | #31:(U32) | \ref Data::mSodiumFinalDialysateCompositionDefRejectionReason | + * | #32:(U32) | \ref Data::mFluidBolusVolumeMinRejectionReason | + * | #33:(U32) | \ref Data::mFluidBolusVolumeMaxRejectionReason | + * | #34:(U32) | \ref Data::mFluidBolusVolumeDefRejectionReason | + * | #35:(U32) | \ref Data::mArterialPressureLimitWindowMinRejectionReason | + * | #36:(U32) | \ref Data::mArterialPressureLimitWindowMaxRejectionReason | + * | #37:(U32) | \ref Data::mArterialPressureLimitWindowDefRejectionReason | + * | #38:(U32) | \ref Data::mVenousPressureLimitWindowMinRejectionReason | + * | #39:(U32) | \ref Data::mVenousPressureLimitWindowMaxRejectionReason | + * | #40:(U32) | \ref Data::mVenousPressureLimitWindowDefRejectionReason | + * | #41:(U32) | \ref Data::mVenousPressureLimitAsymtrcMinRejectionReason | + * | #42:(U32) | \ref Data::mVenousPressureLimitAsymtrcMaxRejectionReason | + * | #43:(U32) | \ref Data::mVenousPressureLimitAsymtrcDefRejectionReason | + * | #44:(U32) | \ref Data::mTrancembrncPressureLimitWindowMinRejectionReason | + * | #45:(U32) | \ref Data::mTrancembrncPressureLimitWindowMaxRejectionReason | + * | #46:(U32) | \ref Data::mTrancembrncPressureLimitWindowDefRejectionReason | + * | #47:(F32) | \ref Data::mUltrafiltrationVolumeMinRejectionReason | + * | #48:(F32) | \ref Data::mUltrafiltrationVolumeMaxRejectionReason | + * | #49:(F32) | \ref Data::mUltrafiltrationVolumeDefRejectionReason | + * | #50:(U32) | \ref Data::mVitalsIntervalDefRejectionReason | + * | #51:(U32) | \ref Data::mRinsebackVolumeMinRejectionReason | + * | #52:(U32) | \ref Data::mRinsebackVolumeMaxRejectionReason | + * | #53:(U32) | \ref Data::mRinsebackVolumeDefRejectionReason | + * | #54:(U32) | \ref Data::mRinsebackFlowRateMinRejectionReason | + * | #55:(U32) | \ref Data::mRinsebackFlowRateMaxRejectionReason | + * | #56:(U32) | \ref Data::mRinsebackFlowRateDefRejectionReason | + * | #57:(F32) | \ref Data::mSubstitutionVolumeMinRejectionReason | + * | #58:(F32) | \ref Data::mSubstitutionVolumeMaxRejectionReason | + * | #59:(F32) | \ref Data::mSubstitutionVolumeDefRejectionReason | + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Event | + * | unitText | HD | + * | infoText | ServiceMode | + * + */ +class MAdjustInstitutionalRecordResponse : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mAccepted ; + Types::U32 mBloodFlowRateMinRejectionReason ; + Types::U32 mBloodFlowRateMaxRejectionReason ; + Types::U32 mBloodFlowRateDefRejectionReason ; + Types::U32 mDialysateFlowRateMinRejectionReason ; + Types::U32 mDialysateFlowRateMaxRejectionReason ; + Types::U32 mDialysateFlowRateDefRejectionReason ; + Types::U32 mTreatmentDurationMinRejectionReason ; + Types::U32 mTreatmentDurationMaxRejectionReason ; + Types::U32 mTreatmentDurationDefRejectionReason ; + Types::U32 mHeparinBolusVolumeMinRejectionReason ; + Types::U32 mHeparinBolusVolumeMaxRejectionReason ; + Types::U32 mHeparinBolusVolumeDefRejectionReason ; + Types::U32 mHeparinDispensingRateMinRejectionReason ; + Types::U32 mHeparinDispensingRateMaxRejectionReason ; + Types::U32 mHeparinDispensingRateDefRejectionReason ; + Types::U32 mHeparinStopTimeMinRejectionReason ; + Types::U32 mHeparinStopTimeMaxRejectionReason ; + Types::U32 mDialysateTempMinRejectionReason ; + Types::U32 mDialysateTempMaxRejectionReason ; + Types::U32 mDialysateTempDefRejectionReason ; + Types::U32 mAcidConcentratePotassiumMinRejectionReason ; + Types::U32 mAcidConcentratePotassiumMaxRejectionReason ; + Types::U32 mAcidConcentrateCalciumMinRejectionReason ; + Types::U32 mAcidConcentrateCalciumMaxRejectionReason ; + Types::U32 mBicarbFinalDialysateCompositionMinRejectionReason ; + Types::U32 mBicarbFinalDialysateCompositionMaxRejectionReason ; + Types::U32 mBicarbFinalDialysateCompositionDefRejectionReason ; + Types::U32 mSodiumFinalDialysateCompositionMinRejectionReason ; + Types::U32 mSodiumFinalDialysateCompositionMaxRejectionReason ; + Types::U32 mSodiumFinalDialysateCompositionDefRejectionReason ; + Types::U32 mFluidBolusVolumeMinRejectionReason ; + Types::U32 mFluidBolusVolumeMaxRejectionReason ; + Types::U32 mFluidBolusVolumeDefRejectionReason ; + Types::U32 mArterialPressureLimitWindowMinRejectionReason ; + Types::U32 mArterialPressureLimitWindowMaxRejectionReason ; + Types::U32 mArterialPressureLimitWindowDefRejectionReason ; + Types::U32 mVenousPressureLimitWindowMinRejectionReason ; + Types::U32 mVenousPressureLimitWindowMaxRejectionReason ; + Types::U32 mVenousPressureLimitWindowDefRejectionReason ; + Types::U32 mVenousPressureLimitAsymtrcMinRejectionReason ; + Types::U32 mVenousPressureLimitAsymtrcMaxRejectionReason ; + Types::U32 mVenousPressureLimitAsymtrcDefRejectionReason ; + Types::U32 mTrancembrncPressureLimitWindowMinRejectionReason ; + Types::U32 mTrancembrncPressureLimitWindowMaxRejectionReason ; + Types::U32 mTrancembrncPressureLimitWindowDefRejectionReason ; + Types::U32 mUltrafiltrationVolumeMinRejectionReason ; + Types::U32 mUltrafiltrationVolumeMaxRejectionReason ; + Types::U32 mUltrafiltrationVolumeDefRejectionReason ; + Types::U32 mVitalsIntervalDefRejectionReason ; + Types::U32 mRinsebackVolumeMinRejectionReason ; + Types::U32 mRinsebackVolumeMaxRejectionReason ; + Types::U32 mRinsebackVolumeDefRejectionReason ; + Types::U32 mRinsebackFlowRateMinRejectionReason ; + Types::U32 mRinsebackFlowRateMaxRejectionReason ; + Types::U32 mRinsebackFlowRateDefRejectionReason ; + Types::U32 mSubstitutionVolumeMinRejectionReason ; + Types::U32 mSubstitutionVolumeMaxRejectionReason ; + Types::U32 mSubstitutionVolumeDefRejectionReason ; + } _data; + +public: + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("AdjustInstitutionalRecord") ; } + + struct Data { + bool mAccepted = true ; /*!< Accepted value of type quint32 extracted out */ + quint32 mBloodFlowRateMinRejectionReason ; + quint32 mBloodFlowRateMaxRejectionReason ; + quint32 mBloodFlowRateDefRejectionReason ; + quint32 mDialysateFlowRateMinRejectionReason ; + quint32 mDialysateFlowRateMaxRejectionReason ; + quint32 mDialysateFlowRateDefRejectionReason ; + quint32 mTreatmentDurationMinRejectionReason ; + quint32 mTreatmentDurationMaxRejectionReason ; + quint32 mTreatmentDurationDefRejectionReason ; + quint32 mHeparinBolusVolumeMinRejectionReason ; + quint32 mHeparinBolusVolumeMaxRejectionReason ; + quint32 mHeparinBolusVolumeDefRejectionReason ; + quint32 mHeparinDispensingRateMinRejectionReason ; + quint32 mHeparinDispensingRateMaxRejectionReason ; + quint32 mHeparinDispensingRateDefRejectionReason ; + quint32 mHeparinStopTimeMinRejectionReason ; + quint32 mHeparinStopTimeMaxRejectionReason ; + quint32 mDialysateTempMinRejectionReason ; + quint32 mDialysateTempMaxRejectionReason ; + quint32 mDialysateTempDefRejectionReason ; + quint32 mAcidConcentratePotassiumMinRejectionReason ; + quint32 mAcidConcentratePotassiumMaxRejectionReason ; + quint32 mAcidConcentrateCalciumMinRejectionReason ; + quint32 mAcidConcentrateCalciumMaxRejectionReason ; + quint32 mBicarbFinalDialysateCompositionMinRejectionReason ; + quint32 mBicarbFinalDialysateCompositionMaxRejectionReason ; + quint32 mBicarbFinalDialysateCompositionDefRejectionReason ; + quint32 mSodiumFinalDialysateCompositionMinRejectionReason ; + quint32 mSodiumFinalDialysateCompositionMaxRejectionReason ; + quint32 mSodiumFinalDialysateCompositionDefRejectionReason ; + quint32 mFluidBolusVolumeMinRejectionReason ; + quint32 mFluidBolusVolumeMaxRejectionReason ; + quint32 mFluidBolusVolumeDefRejectionReason ; + quint32 mArterialPressureLimitWindowMinRejectionReason ; + quint32 mArterialPressureLimitWindowMaxRejectionReason ; + quint32 mArterialPressureLimitWindowDefRejectionReason ; + quint32 mVenousPressureLimitWindowMinRejectionReason ; + quint32 mVenousPressureLimitWindowMaxRejectionReason ; + quint32 mVenousPressureLimitWindowDefRejectionReason ; + quint32 mVenousPressureLimitAsymtrcMinRejectionReason ; + quint32 mVenousPressureLimitAsymtrcMaxRejectionReason ; + quint32 mVenousPressureLimitAsymtrcDefRejectionReason ; + quint32 mTrancembrncPressureLimitWindowMinRejectionReason ; + quint32 mTrancembrncPressureLimitWindowMaxRejectionReason ; + quint32 mTrancembrncPressureLimitWindowDefRejectionReason ; + quint32 mUltrafiltrationVolumeMinRejectionReason ; + quint32 mUltrafiltrationVolumeMaxRejectionReason ; + quint32 mUltrafiltrationVolumeDefRejectionReason ; + quint32 mVitalsIntervalDefRejectionReason ; + quint32 mRinsebackVolumeMinRejectionReason ; + quint32 mRinsebackVolumeMaxRejectionReason ; + quint32 mRinsebackVolumeDefRejectionReason ; + quint32 mRinsebackFlowRateMinRejectionReason ; + quint32 mRinsebackFlowRateMaxRejectionReason ; + quint32 mRinsebackFlowRateDefRejectionReason ; + quint32 mSubstitutionVolumeMinRejectionReason ; + quint32 mSubstitutionVolumeMaxRejectionReason ; + quint32 mSubstitutionVolumeDefRejectionReason ; + }; + + MAdjustInstitutionalRecordResponse () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MAdjustInstitutionalRecordResponse::Data AdjustInstitutionalRecordResponseData; Index: sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.cpp =================================================================== diff -u --- sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.cpp (revision 0) +++ sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,116 @@ +/*! + * + * Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MTDAdvancedInstitutionalRecordResponse.cpp + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#include "MTDAdvancedInstitutionalRecordResponse.h" + +using namespace Model; + +QVariantList MAdvancedInstitutionalRecordResponse::parameters() const { + return { + _data.mAccepted .value, + _data.mReason .value, + _data.mMinRORejectionRatioAlarmMin .value, + _data.mMinRORejectionRatioAlarmMax .value, + _data.mMinRORejectionRatioAlarmDef .value, + _data.mDisinfectionFrequencyMin .value, + _data.mDisinfectionFrequencyMax .value, + _data.mDisinfectionFrequencyDef .value, + _data.mDisinfectionParametersCycleTimeMin.value, + _data.mDisinfectionParametersCycleTimeMax.value, + _data.mDisinfectionParametersCycleTimeDef.value, + _data.mMaxBloodPumpStopTimeMin .value, + _data.mMaxBloodPumpStopTimeMax .value, + _data.mMaxBloodPumpStopTimeDef .value, + _data.mInletWaterCondLowThresholdMin .value, + _data.mInletWaterCondLowThresholdMax .value, + _data.mInletWaterCondLowThresholdDef .value, + _data.mInletWaterCondHighThresholdMin .value, + _data.mInletWaterCondHighThresholdMax .value, + _data.mInletWaterCondHighThresholdDef .value, + _data.mChlorineWaterSampleCheckMin .value, + _data.mChlorineWaterSampleCheckMax .value, + _data.mChlorineWaterSampleCheckDef .value, + _data.mWaterSampleTestResultRequiredDef .value, + }; +} + +bool MAdvancedInstitutionalRecordResponse::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mAccepted )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMinRORejectionRatioAlarmMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMinRORejectionRatioAlarmMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMinRORejectionRatioAlarmDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionFrequencyMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionFrequencyMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionFrequencyDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionParametersCycleTimeMin)) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionParametersCycleTimeMax)) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDisinfectionParametersCycleTimeDef)) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMaxBloodPumpStopTimeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMaxBloodPumpStopTimeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mMaxBloodPumpStopTimeDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondLowThresholdMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondLowThresholdMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondLowThresholdDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondHighThresholdMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondHighThresholdMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mInletWaterCondHighThresholdDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mChlorineWaterSampleCheckMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mChlorineWaterSampleCheckMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mChlorineWaterSampleCheckDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mWaterSampleTestResultRequiredDef )) goto lError; + + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MAdvancedInstitutionalRecordResponse::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +AdvancedInstitutionalRecordResponseData MAdvancedInstitutionalRecordResponse::data() const { + Data data; + data.mAccepted = _data.mAccepted .value; + data.mReason = _data.mReason .value; + data.mMinRORejectionRatioAlarmMin = _data.mMinRORejectionRatioAlarmMin .value; + data.mMinRORejectionRatioAlarmMax = _data.mMinRORejectionRatioAlarmMax .value; + data.mMinRORejectionRatioAlarmDef = _data.mMinRORejectionRatioAlarmDef .value; + data.mDisinfectionFrequencyMin = _data.mDisinfectionFrequencyMin .value; + data.mDisinfectionFrequencyMax = _data.mDisinfectionFrequencyMax .value; + data.mDisinfectionFrequencyDef = _data.mDisinfectionFrequencyDef .value; + data.mDisinfectionParametersCycleTimeMin = _data.mDisinfectionParametersCycleTimeMin .value; + data.mDisinfectionParametersCycleTimeMax = _data.mDisinfectionParametersCycleTimeMax .value; + data.mDisinfectionParametersCycleTimeDef = _data.mDisinfectionParametersCycleTimeDef .value; + data.mMaxBloodPumpStopTimeMin = _data.mMaxBloodPumpStopTimeMin .value; + data.mMaxBloodPumpStopTimeMax = _data.mMaxBloodPumpStopTimeMax .value; + data.mMaxBloodPumpStopTimeDef = _data.mMaxBloodPumpStopTimeDef .value; + data.mInletWaterCondLowThresholdMin = _data.mInletWaterCondLowThresholdMin .value; + data.mInletWaterCondLowThresholdMax = _data.mInletWaterCondLowThresholdMax .value; + data.mInletWaterCondLowThresholdDef = _data.mInletWaterCondLowThresholdDef .value; + data.mInletWaterCondHighThresholdMin = _data.mInletWaterCondHighThresholdMin .value; + data.mInletWaterCondHighThresholdMax = _data.mInletWaterCondHighThresholdMax .value; + data.mInletWaterCondHighThresholdDef = _data.mInletWaterCondHighThresholdDef .value; + data.mChlorineWaterSampleCheckMin = _data.mChlorineWaterSampleCheckMin .value; + data.mChlorineWaterSampleCheckMax = _data.mChlorineWaterSampleCheckMax .value; + data.mChlorineWaterSampleCheckDef = _data.mChlorineWaterSampleCheckDef .value; + data.mWaterSampleTestResultRequiredDef = _data.mWaterSampleTestResultRequiredDef .value; + + return data; +} Index: sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.h =================================================================== diff -u --- sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.h (revision 0) +++ sources/model/td/adjustment/settings/MTDAdvancedInstitutionalRecordResponse.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,149 @@ +/*! + * + * Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MTDAdvancedInstitutionalRecordResponse.h + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MTDAdvancedInstitutionalRecordResponse class + * \details The TD Institutional response model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0x8700| 0x020 | Rsp | Y | HD | UI | Service Mode | + * + * | Payload || + * | || + * | #1: (U32) | \ref Data::mAccepted | + * | #2: (U32) | \ref Data::mReason | + * | #3: (U32) | \ref Data::mMinRORejectionRatioAlarmMin | + * | #4: (U32) | \ref Data::mMinRORejectionRatioAlarmMax | + * | #5: (U32) | \ref Data::mMinRORejectionRatioAlarmDef | + * | #6: (U32) | \ref Data::mDisinfectionFrequencyMin | + * | #7: (U32) | \ref Data::mDisinfectionFrequencyMax | + * | #8: (U32) | \ref Data::mDisinfectionFrequencyDef | + * | #9: (U32) | \ref Data::mDisinfectionParametersCycleTimeMin | + * | #10:(U32) | \ref Data::mDisinfectionParametersCycleTimeMax | + * | #11:(U32) | \ref Data::mDisinfectionParametersCycleTimeDef | + * | #12:(U32) | \ref Data::mMaxBloodPumpStopTimeMin | + * | #13:(U32) | \ref Data::mMaxBloodPumpStopTimeMax | + * | #14:(U32) | \ref Data::mMaxBloodPumpStopTimeDef | + * | #15:(U32) | \ref Data::mInletWaterCondLowThresholdMin | + * | #16:(U32) | \ref Data::mInletWaterCondLowThresholdMax | + * | #17:(U32) | \ref Data::mInletWaterCondLowThresholdDef | + * | #18:(U32) | \ref Data::mInletWaterCondHighThresholdMin | + * | #19:(U32) | \ref Data::mInletWaterCondHighThresholdMax | + * | #20:(U32) | \ref Data::mInletWaterCondHighThresholdDef | + * | #21:(U32) | \ref Data::mChlorineWaterSampleCheckMin | + * | #22:(U32) | \ref Data::mChlorineWaterSampleCheckMax | + * | #23:(U32) | \ref Data::mChlorineWaterSampleCheckDef | + * | #24:(U32) | \ref Data::mWaterSampleTestResultRequiredDef | + + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Event | + * | unitText | HD | + * | infoText | ServiceMode | + * + */ +class MAdvancedInstitutionalRecordResponse : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mAccepted ; + Types::U32 mReason ; + Types::U32 mMinRORejectionRatioAlarmMin ; + Types::U32 mMinRORejectionRatioAlarmMax ; + Types::U32 mMinRORejectionRatioAlarmDef ; + Types::U32 mDisinfectionFrequencyMin ; + Types::U32 mDisinfectionFrequencyMax ; + Types::U32 mDisinfectionFrequencyDef ; + Types::U32 mDisinfectionParametersCycleTimeMin ; + Types::U32 mDisinfectionParametersCycleTimeMax ; + Types::U32 mDisinfectionParametersCycleTimeDef ; + Types::U32 mMaxBloodPumpStopTimeMin ; + Types::U32 mMaxBloodPumpStopTimeMax ; + Types::U32 mMaxBloodPumpStopTimeDef ; + Types::U32 mInletWaterCondLowThresholdMin ; + Types::U32 mInletWaterCondLowThresholdMax ; + Types::U32 mInletWaterCondLowThresholdDef ; + Types::U32 mInletWaterCondHighThresholdMin ; + Types::U32 mInletWaterCondHighThresholdMax ; + Types::U32 mInletWaterCondHighThresholdDef ; + Types::U32 mChlorineWaterSampleCheckMin ; + Types::U32 mChlorineWaterSampleCheckMax ; + Types::U32 mChlorineWaterSampleCheckDef ; + Types::U32 mWaterSampleTestResultRequiredDef ; + } _data; + +public: + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("AdvancedInstitutionalRecord") ; } + + struct Data { + bool mAccepted = true ; /*!< Accepted value of type quint32 extracted out */ + quint32 mReason = 0 ; /*!< Reason value of type quint32 extracted out */ + quint32 mMinRORejectionRatioAlarmMin ; + quint32 mMinRORejectionRatioAlarmMax ; + quint32 mMinRORejectionRatioAlarmDef ; + quint32 mDisinfectionFrequencyMin ; + quint32 mDisinfectionFrequencyMax ; + quint32 mDisinfectionFrequencyDef ; + quint32 mDisinfectionParametersCycleTimeMin ; + quint32 mDisinfectionParametersCycleTimeMax ; + quint32 mDisinfectionParametersCycleTimeDef ; + quint32 mMaxBloodPumpStopTimeMin ; + quint32 mMaxBloodPumpStopTimeMax ; + quint32 mMaxBloodPumpStopTimeDef ; + quint32 mInletWaterCondLowThresholdMin ; + quint32 mInletWaterCondLowThresholdMax ; + quint32 mInletWaterCondLowThresholdDef ; + quint32 mInletWaterCondHighThresholdMin ; + quint32 mInletWaterCondHighThresholdMax ; + quint32 mInletWaterCondHighThresholdDef ; + quint32 mChlorineWaterSampleCheckMin ; + quint32 mChlorineWaterSampleCheckMax ; + quint32 mChlorineWaterSampleCheckDef ; + quint32 mWaterSampleTestResultRequiredDef ; + + }; + + MAdvancedInstitutionalRecordResponse () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MAdvancedInstitutionalRecordResponse::Data AdvancedInstitutionalRecordResponseData; Index: sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.cpp =================================================================== diff -u --- sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.cpp (revision 0) +++ sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,224 @@ + +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MTDInstitutionalRecordResponse.cpp + * \author (last) Dara Navaei + * \date (last) 19-Mar-2024 + * \author (original) Dara Navaei + * \date (original) 28-Feb-2024 + * + */ +#include "MTDInstitutionalRecordResponse.h" + +using namespace Model; + +QVariantList MInstitutionalRecordResponse::parameters() const { + return { + _data.mAccepted .value, + _data.mReason .value, + _data.mBloodFlowMin .value, + _data.mBloodFlowMax .value, + _data.mBloodFlowDef .value, + _data.mDialysateFlowMin .value, + _data.mDialysateFlowMax .value, + _data.mDialysateFlowDef .value, + _data.mTreatmentDurationMin .value, + _data.mTreatmentDurationMax .value, + _data.mTreatmentDurationDef .value, + _data.mHepBolusVolumeMin .value, + _data.mHepBolusVolumeMax .value, + _data.mHepBolusVolumeDef .value, + _data.mHepDispRateMin .value, + _data.mHepDispRateMax .value, + _data.mHepDispRateDef .value, + _data.mHepStopTimeMin .value, + _data.mHepStopTimeMax .value, + _data.mDialysateTempMin .value, + _data.mDialysateTempMax .value, + _data.mDialysateTempDef .value, + _data.mPotassiumMin .value, + _data.mPotassiumMax .value, + _data.mCalciumMin .value, + _data.mCalciumMax .value, + _data.mDialysateBicarbonateMin .value, + _data.mDialysateBicarbonateMax .value, + _data.mDialysateBicarbonateDef .value, + _data.mDialysateSodiumMin .value, + _data.mDialysateSodiumMax .value, + _data.mDialysateSodiumDef .value, + _data.mFluidBolusVolumeMin .value, + _data.mFluidBolusVolumeMax .value, + _data.mFluidBolusVolumeDef .value, + _data.mArterialWindowMin .value, + _data.mArterialWindowMax .value, + _data.mArterialWindowDef .value, + _data.mVenousWindowMin .value, + _data.mVenousWindowMax .value, + _data.mVenousWindowDef .value, + _data.mVenousAsymmetricMin .value, + _data.mVenousAsymmetricMax .value, + _data.mVenousAsymmetricDef .value, + _data.mTMPWindowMin .value, + _data.mTMPWindowMax .value, + _data.mTMPWindowDef .value, + _data.mUltrafiltrationVolumeMin .value, + _data.mUltrafiltrationVolumeMax .value, + _data.mUltrafiltrationVolumeDef .value, + _data.mVitalsIntervalDef .value, + _data.mRinsebackVolumeMin .value, + _data.mRinsebackVolumeMax .value, + _data.mRinsebackVolumeDef .value, + _data.mRinsebackFlowRateMin .value, + _data.mRinsebackFlowRateMax .value, + _data.mRinsebackFlowRateDef .value, + _data.mSubstitutionVolumeMin .value, + _data.mSubstitutionVolumeMax .value, + _data.mSubstitutionVolumeDef .value, + }; +} + +bool MInstitutionalRecordResponse::fromByteArray(const QByteArray &vByteArray, int *vIndex) { + int index = 0; // message data start position + if ( ! GetValue(vByteArray, index, _data.mAccepted )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mReason )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodFlowMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodFlowMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mBloodFlowDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateFlowMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateFlowMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateFlowDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentDurationMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentDurationMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTreatmentDurationDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepBolusVolumeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepBolusVolumeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepBolusVolumeDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepDispRateMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepDispRateMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepDispRateDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepStopTimeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mHepStopTimeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateTempMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateTempMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateTempDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mPotassiumMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mPotassiumMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mCalciumMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mCalciumMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateBicarbonateMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateBicarbonateMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateBicarbonateDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateSodiumMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateSodiumMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mDialysateSodiumDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mFluidBolusVolumeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mFluidBolusVolumeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mFluidBolusVolumeDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mArterialWindowMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mArterialWindowMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mArterialWindowDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousWindowMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousWindowMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousWindowDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousAsymmetricMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousAsymmetricMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVenousAsymmetricDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTMPWindowMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTMPWindowMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mTMPWindowDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mUltrafiltrationVolumeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mUltrafiltrationVolumeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mUltrafiltrationVolumeDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mVitalsIntervalDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackVolumeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackVolumeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackVolumeDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackFlowRateMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackFlowRateMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mRinsebackFlowRateDef )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSubstitutionVolumeMin )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSubstitutionVolumeMax )) goto lError; + if ( ! GetValue(vByteArray, index, _data.mSubstitutionVolumeDef )) goto lError; + + return true ; + +lError: + if(vIndex) { *vIndex = index; } + + return false ; +} + +/*! + * \brief MTDInstitutionalRecordResponse::data + * \details Provides model's Data from the received messages data values + * \return Data + */ +InstitutionalRecordResponseData MInstitutionalRecordResponse::data() const { + Data data; + data.mAccepted = _data.mAccepted .value; + data.mReason = _data.mReason .value; + data.mBloodFlowMin = _data.mBloodFlowMin .value; + data.mBloodFlowMax = _data.mBloodFlowMax .value; + data.mBloodFlowDef = _data.mBloodFlowDef .value; + data.mDialysateFlowMin = _data.mDialysateFlowMin .value; + data.mDialysateFlowMax = _data.mDialysateFlowMax .value; + data.mDialysateFlowDef = _data.mDialysateFlowDef .value; + data.mTreatmentDurationMin = _data.mTreatmentDurationMin .value; + data.mTreatmentDurationMax = _data.mTreatmentDurationMax .value; + data.mTreatmentDurationDef = _data.mTreatmentDurationDef .value; + data.mHepBolusVolumeMin = _data.mHepBolusVolumeMin .value; + data.mHepBolusVolumeMax = _data.mHepBolusVolumeMax .value; + data.mHepBolusVolumeDef = _data.mHepBolusVolumeDef .value; + data.mHepDispRateMin = _data.mHepDispRateMin .value; + data.mHepDispRateMax = _data.mHepDispRateMax .value; + data.mHepDispRateDef = _data.mHepDispRateDef .value; + data.mHepStopTimeMin = _data.mHepStopTimeMin .value; + data.mHepStopTimeMax = _data.mHepStopTimeMax .value; + data.mDialysateTempMin = _data.mDialysateTempMin .value; + data.mDialysateTempMax = _data.mDialysateTempMax .value; + data.mDialysateTempDef = _data.mDialysateTempDef .value; + data.mPotassiumMin = _data.mPotassiumMin .value; + data.mPotassiumMax = _data.mPotassiumMax .value; + data.mCalciumMin = _data.mCalciumMin .value; + data.mCalciumMax = _data.mCalciumMax .value; + data.mDialysateBicarbonateMin = _data.mDialysateBicarbonateMin .value; + data.mDialysateBicarbonateMax = _data.mDialysateBicarbonateMax .value; + data.mDialysateBicarbonateDef = _data.mDialysateBicarbonateDef .value; + data.mDialysateSodiumMin = _data.mDialysateSodiumMin .value; + data.mDialysateSodiumMax = _data.mDialysateSodiumMax .value; + data.mDialysateSodiumDef = _data.mDialysateSodiumDef .value; + data.mFluidBolusVolumeMin = _data.mFluidBolusVolumeMin .value; + data.mFluidBolusVolumeMax = _data.mFluidBolusVolumeMax .value; + data.mFluidBolusVolumeDef = _data.mFluidBolusVolumeDef .value; + data.mArterialWindowMin = _data.mArterialWindowMin .value; + data.mArterialWindowMax = _data.mArterialWindowMax .value; + data.mArterialWindowDef = _data.mArterialWindowDef .value; + data.mVenousWindowMin = _data.mVenousWindowMin .value; + data.mVenousWindowMax = _data.mVenousWindowMax .value; + data.mVenousWindowDef = _data.mVenousWindowDef .value; + data.mVenousAsymmetricMin = _data.mVenousAsymmetricMin .value; + data.mVenousAsymmetricMax = _data.mVenousAsymmetricMax .value; + data.mVenousAsymmetricDef = _data.mVenousAsymmetricDef .value; + data.mTMPWindowMin = _data.mTMPWindowMin .value; + data.mTMPWindowMax = _data.mTMPWindowMax .value; + data.mTMPWindowDef = _data.mTMPWindowDef .value; + data.mUltrafiltrationVolumeMin = _data.mUltrafiltrationVolumeMin .value; + data.mUltrafiltrationVolumeMax = _data.mUltrafiltrationVolumeMax .value; + data.mUltrafiltrationVolumeDef = _data.mUltrafiltrationVolumeDef .value; + data.mVitalsIntervalDef = _data.mVitalsIntervalDef .value; + data.mRinsebackVolumeMin = _data.mRinsebackVolumeMin .value; + data.mRinsebackVolumeMax = _data.mRinsebackVolumeMax .value; + data.mRinsebackVolumeDef = _data.mRinsebackVolumeDef .value; + data.mRinsebackFlowRateMin = _data.mRinsebackFlowRateMin .value; + data.mRinsebackFlowRateMax = _data.mRinsebackFlowRateMax .value; + data.mRinsebackFlowRateDef = _data.mRinsebackFlowRateDef .value; + data.mSubstitutionVolumeMin = _data.mSubstitutionVolumeMin .value; + data.mSubstitutionVolumeMax = _data.mSubstitutionVolumeMax .value; + data.mSubstitutionVolumeDef = _data.mSubstitutionVolumeDef .value; + return data; +} Index: sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.h =================================================================== diff -u --- sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.h (revision 0) +++ sources/model/td/adjustment/settings/MTDInstitutionalRecordResponse.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,255 @@ +/*! + * + * Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file MTDInstitutionalRecordResponse.h + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#pragma once + +// Qt +#include + +// Project +#include "MAbstract.h" +#include "types.h" + +// forward declarations +class tst_models; + +namespace Model { + +/*! + * \brief The MTDInstitutionalRecordResponse class + * \details The TD Institutional response model + * + * | MSG | CAN ID | Type | Ack | Src | Dest | Description | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0x8300| 0x020 | Rsp | Y | HD | UI | Service Mode | + * + * | Payload || + * | || + * | #1: (U32) | \ref Data::mAccepted | + * | #2: (U32) | \ref Data::mReason | + * | #3: (U32) | \ref Data::mBloodFlowMin | + * | #4: (U32) | \ref Data::mBloodFlowMax | + * | #5: (U32) | \ref Data::mBloodFlowDef | + * | #6: (U32) | \ref Data::mDialysateFlowMin | + * | #7: (U32) | \ref Data::mDialysateFlowMax | + * | #8: (U32) | \ref Data::mDialysateFlowDef | + * | #9: (U32) | \ref Data::mTreatmentDurationMin | + * | #10:(U32) | \ref Data::mTreatmentDurationMax | + * | #11:(U32) | \ref Data::mTreatmentDurationDef | + * | #12:(F32) | \ref Data::mHepBolusVolumeMin | + * | #13:(F32) | \ref Data::mHepBolusVolumeMax | + * | #14:(F32) | \ref Data::mHepBolusVolumeDef | + * | #15:(F32) | \ref Data::mHepDispRateMin | + * | #16:(F32) | \ref Data::mHepDispRateMax | + * | #17:(F32) | \ref Data::mHepDispRateDef | + * | #18:(U32) | \ref Data::mHepStopTimeMin | + * | #19:(U32) | \ref Data::mHepStopTimeMax | + * | #20:(F32) | \ref Data::mDialysateTempMin | + * | #21:(F32) | \ref Data::mDialysateTempMax | + * | #22:(F32) | \ref Data::mDialysateTempDef | + * | #23:(F32) | \ref Data::mPotassiumMin | + * | #24:(F32) | \ref Data::mPotassiumMax | + * | #25:(F32) | \ref Data::mCalciumMin | + * | #26:(F32) | \ref Data::mCalciumMax | + * | #27:(U32) | \ref Data::mDialysateBicarbonateMin | + * | #28:(U32) | \ref Data::mDialysateBicarbonateMax | + * | #29:(U32) | \ref Data::mDialysateBicarbonateDef | + * | #30:(U32) | \ref Data::mDialysateSodiumMin | + * | #31:(U32) | \ref Data::mDialysateSodiumMax | + * | #32:(U32) | \ref Data::mDialysateSodiumDef | + * | #33:(U32) | \ref Data::mFluidBolusVolumeMin | + * | #34:(U32) | \ref Data::mFluidBolusVolumeMax | + * | #35:(U32) | \ref Data::mFluidBolusVolumeDef | + * | #36:(U32) | \ref Data::mArterialWindowMin | + * | #37:(U32) | \ref Data::mArterialWindowMax | + * | #38:(U32) | \ref Data::mArterialWindowDef | + * | #39:(U32) | \ref Data::mVenousWindowMin | + * | #40:(U32) | \ref Data::mVenousWindowMax | + * | #41:(U32) | \ref Data::mVenousWindowDef | + * | #42:(U32) | \ref Data::mVenousAsymmetricMin | + * | #43:(U32) | \ref Data::mVenousAsymmetricMax | + * | #44:(U32) | \ref Data::mVenousAsymmetricDef | + * | #45:(U32) | \ref Data::mTMPWindowMin | + * | #46:(U32) | \ref Data::mTMPWindowMax | + * | #47:(U32) | \ref Data::mTMPWindowDef | + * | #48:(F32) | \ref Data::mUltrafiltrationVolumeMin | + * | #49:(F32) | \ref Data::mUltrafiltrationVolumeMax | + * | #50:(F32) | \ref Data::mUltrafiltrationVolumeDef | + * | #51:(U32) | \ref Data::mVitalsIntervalDef | + * | #52:(U32) | \ref Data::mRinsebackVolumeMin | + * | #53:(U32) | \ref Data::mRinsebackVolumeMax | + * | #54:(U32) | \ref Data::mRinsebackVolumeDef | + * | #55:(U32) | \ref Data::mRinsebackFlowRateMin | + * | #56:(U32) | \ref Data::mRinsebackFlowRateMax | + * | #57:(U32) | \ref Data::mRinsebackFlowRateDef | + * | #58:(F32) | \ref Data::mSubstitutionVolumeMin | + * | #59:(F32) | \ref Data::mSubstitutionVolumeMax | + * | #60:(F32) | \ref Data::mSubstitutionVolumeDef | + * + * \sa Data + * + *

Logging info

+ * | || + * | || + * | typeText | Event | + * | unitText | HD | + * | infoText | ServiceMode | + * + */ +class MInstitutionalRecordResponse : public MAbstract { + + // friends + friend class ::tst_models; + + QVariantList parameters() const override; + + struct { + Types::U32 mAccepted ; + Types::U32 mReason ; + Types::U32 mBloodFlowMin ; + Types::U32 mBloodFlowMax ; + Types::U32 mBloodFlowDef ; + Types::U32 mDialysateFlowMin ; + Types::U32 mDialysateFlowMax ; + Types::U32 mDialysateFlowDef ; + Types::U32 mTreatmentDurationMin ; + Types::U32 mTreatmentDurationMax ; + Types::U32 mTreatmentDurationDef ; + Types::F32 mHepBolusVolumeMin ; + Types::F32 mHepBolusVolumeMax ; + Types::F32 mHepBolusVolumeDef ; + Types::F32 mHepDispRateMin ; + Types::F32 mHepDispRateMax ; + Types::F32 mHepDispRateDef ; + Types::U32 mHepStopTimeMin ; + Types::U32 mHepStopTimeMax ; + Types::F32 mDialysateTempMin ; + Types::F32 mDialysateTempMax ; + Types::F32 mDialysateTempDef ; + Types::F32 mPotassiumMin ; + Types::F32 mPotassiumMax ; + Types::F32 mCalciumMin ; + Types::F32 mCalciumMax ; + Types::U32 mDialysateBicarbonateMin ; + Types::U32 mDialysateBicarbonateMax ; + Types::U32 mDialysateBicarbonateDef ; + Types::U32 mDialysateSodiumMin ; + Types::U32 mDialysateSodiumMax ; + Types::U32 mDialysateSodiumDef ; + Types::U32 mFluidBolusVolumeMin ; + Types::U32 mFluidBolusVolumeMax ; + Types::U32 mFluidBolusVolumeDef ; + Types::U32 mArterialWindowMin ; + Types::U32 mArterialWindowMax ; + Types::U32 mArterialWindowDef ; + Types::U32 mVenousWindowMin ; + Types::U32 mVenousWindowMax ; + Types::U32 mVenousWindowDef ; + Types::U32 mVenousAsymmetricMin ; + Types::U32 mVenousAsymmetricMax ; + Types::U32 mVenousAsymmetricDef ; + Types::U32 mTMPWindowMin ; + Types::U32 mTMPWindowMax ; + Types::U32 mTMPWindowDef ; + Types::F32 mUltrafiltrationVolumeMin ; + Types::F32 mUltrafiltrationVolumeMax ; + Types::F32 mUltrafiltrationVolumeDef ; + Types::U32 mVitalsIntervalDef ; + Types::U32 mRinsebackVolumeMin ; + Types::U32 mRinsebackVolumeMax ; + Types::U32 mRinsebackVolumeDef ; + Types::U32 mRinsebackFlowRateMin ; + Types::U32 mRinsebackFlowRateMax ; + Types::U32 mRinsebackFlowRateDef ; + Types::F32 mSubstitutionVolumeMin ; + Types::F32 mSubstitutionVolumeMax ; + Types::F32 mSubstitutionVolumeDef ; + } _data; + +public: + Type_Enum typeText () const override { return Type_Enum::eEvent ; } + Unit_Enum unitText () const override { return Unit_Enum::eTD ; } + QString infoText () const override { return QString("InstitutionalRecord") ; } + + struct Data { + bool mAccepted = true ; /*!< Accepted value of type quint32 extracted out */ + quint32 mReason = 0 ; /*!< Reason value of type quint32 extracted out */ + quint32 mBloodFlowMin ; + quint32 mBloodFlowMax ; + quint32 mBloodFlowDef ; + quint32 mDialysateFlowMin ; + quint32 mDialysateFlowMax ; + quint32 mDialysateFlowDef ; + quint32 mTreatmentDurationMin ; + quint32 mTreatmentDurationMax ; + quint32 mTreatmentDurationDef ; + float mHepBolusVolumeMin ; + float mHepBolusVolumeMax ; + float mHepBolusVolumeDef ; + float mHepDispRateMin ; + float mHepDispRateMax ; + float mHepDispRateDef ; + quint32 mHepStopTimeMin ; + quint32 mHepStopTimeMax ; + float mDialysateTempMin ; + float mDialysateTempMax ; + float mDialysateTempDef ; + float mPotassiumMin ; + float mPotassiumMax ; + float mCalciumMin ; + float mCalciumMax ; + quint32 mDialysateBicarbonateMin ; + quint32 mDialysateBicarbonateMax ; + quint32 mDialysateBicarbonateDef ; + quint32 mDialysateSodiumMin ; + quint32 mDialysateSodiumMax ; + quint32 mDialysateSodiumDef ; + quint32 mFluidBolusVolumeMin ; + quint32 mFluidBolusVolumeMax ; + quint32 mFluidBolusVolumeDef ; + quint32 mArterialWindowMin ; + quint32 mArterialWindowMax ; + quint32 mArterialWindowDef ; + quint32 mVenousWindowMin ; + quint32 mVenousWindowMax ; + quint32 mVenousWindowDef ; + quint32 mVenousAsymmetricMin ; + quint32 mVenousAsymmetricMax ; + quint32 mVenousAsymmetricDef ; + quint32 mTMPWindowMin ; + quint32 mTMPWindowMax ; + quint32 mTMPWindowDef ; + float mUltrafiltrationVolumeMin ; + float mUltrafiltrationVolumeMax ; + float mUltrafiltrationVolumeDef ; + quint32 mVitalsIntervalDef ; + quint32 mRinsebackVolumeMin ; + quint32 mRinsebackVolumeMax ; + quint32 mRinsebackVolumeDef ; + quint32 mRinsebackFlowRateMin ; + quint32 mRinsebackFlowRateMax ; + quint32 mRinsebackFlowRateDef ; + float mSubstitutionVolumeMin ; + float mSubstitutionVolumeMax ; + float mSubstitutionVolumeDef ; + }; + + MInstitutionalRecordResponse () { } + + bool fromByteArray (const QByteArray &vByteArray , int *vIndex = nullptr) override; + Data data ( ) const ; +}; +} + +typedef Model::MInstitutionalRecordResponse::Data InstitutionalRecordResponseData; Index: sources/view/VView.h =================================================================== diff -u -r9048646630717f980a852df54349805ba63773e0 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/view/VView.h (.../VView.h) (revision 9048646630717f980a852df54349805ba63773e0) +++ sources/view/VView.h (.../VView.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -141,6 +141,9 @@ REGISTER_TYPE( VCloudSync ) \ REGISTER_TYPE( VHDUsageInfo ) \ REGISTER_TYPE( VAdjustmentInstitutionalRecord ) \ + REGISTER_TYPE( VInstitutionalRecord ) \ + REGISTER_TYPE( VAdjustmentAdvancedInstitutionalRecord ) \ + REGISTER_TYPE( VAdvancedInstitutionalRecord ) \ /* Alarm */ \ REGISTER_TYPE( VAlarmStatus ) \ REGISTER_TYPE( VAlarmActiveList ) \ Index: sources/view/hd/data/VTreatmentRanges.cpp =================================================================== diff -u -rc369e34e8864b8b7a7bca07b77f5d3a41701ffbf -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/view/hd/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision c369e34e8864b8b7a7bca07b77f5d3a41701ffbf) +++ sources/view/hd/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -161,6 +161,16 @@ FROMVARIANT_WITHRETURN ( acidConcentrateCalciumMax , "Acid Concentrate Ranges" , "Acid_Concentrate_Calcium_Max" , Float , isConfigsOk ); FROMVARIANT_WITHRETURN ( acidConcentrateCalciumRes , "Acid Concentrate Ranges" , "Acid_Concentrate_Calcium_Res" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateBicarbonateDef , "Dialysate Composition Ranges" , "Dialysate_Composition_Bicarbonate_Def", UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateBicarbonateMin , "Dialysate Composition Ranges" , "Dialysate_Composition_Bicarbonate_Min", UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateBicarbonateMax , "Dialysate Composition Ranges" , "Dialysate_Composition_Bicarbonate_Max", UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateBicarbonateRes , "Dialysate Composition Ranges" , "Dialysate_Composition_Bicarbonate_Res", UInt , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( dialysateSodiumDef , "Dialysate Composition Ranges" , "Dialysate_Composition_Sodium_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateSodiumMin , "Dialysate Composition Ranges" , "Dialysate_Composition_Sodium_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateSodiumMax , "Dialysate Composition Ranges" , "Dialysate_Composition_Sodium_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( dialysateSodiumRes , "Dialysate Composition Ranges" , "Dialysate_Composition_Sodium_Res" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( salineBolusVolumeDef , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Def" , UInt , isConfigsOk ); FROMVARIANT_WITHRETURN ( salineBolusVolumeMin , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Min" , UInt , isConfigsOk ); FROMVARIANT_WITHRETURN ( salineBolusVolumeMax , "Saline Bolus Volume Ranges" , "Saline_Bolus_Volume_Max" , UInt , isConfigsOk ); @@ -171,13 +181,21 @@ bicarbonateConcentrateOptions ( _Settings.keys(mCategory , "Bicarbonate Concentrate Options" )); dialyzerTypeOptions ( _Settings.keys(mCategory , "Dialyzer Type Options" )); bloodPressureMeasureInterval ( _Settings.keys(mCategory , "Vitals Measurement Interval Options" )); + treatmentModalityOptions ( _Settings.keys(mCategory , "Treatment Modality" )); + hdfTreatmentModeOptions ( _Settings.keys(mCategory , "HDF Treatment Mode" )); + dryBicabCartridgeSizeOptions ( _Settings.keys(mCategory , "Dry Bicarb Cartridge Size" )); + waterSampleTestResultRequired ( _Settings.keys(mCategory , "Water Sample Test Result Required" )); isConfigsOk = isConfigsOk && !_heparinTypeOptions .isEmpty(); if ( _heparinTypeOptions.isEmpty() ) { heparinTypeOptions({"-- --"}); } isConfigsOk = isConfigsOk && !_acidConcentrateOptions .isEmpty(); isConfigsOk = isConfigsOk && !_bicarbonateConcentrateOptions.isEmpty(); isConfigsOk = isConfigsOk && !_dialyzerTypeOptions .isEmpty(); isConfigsOk = isConfigsOk && !_bloodPressureMeasureInterval .isEmpty(); + isConfigsOk = isConfigsOk && !_treatmentModalityOptions .isEmpty(); + isConfigsOk = isConfigsOk && !_hdfTreatmentModeOptions .isEmpty(); + isConfigsOk = isConfigsOk && !_dryBicabCartridgeSizeOptions .isEmpty(); + isConfigsOk = isConfigsOk && !_waterSampleTestResultRequired.isEmpty(); FROMVARIANT_WITHRETURN ( dialysateTempDef , "Dialysate Temperature" , "Dialysate_Temperature_Def" , Float , isConfigsOk ); FROMVARIANT_WITHRETURN ( dialysateTempMin , "Dialysate Temperature" , "Dialysate_Temperature_Min" , Float , isConfigsOk ); @@ -224,13 +242,55 @@ FROMVARIANT_WITHRETURN ( rinsebackFlowRateMax , "Rinseback Flow Rate Ranges" , "Rinseback_Flow_Rate_Max" , UInt , isConfigsOk ); FROMVARIANT_WITHRETURN ( rinsebackFlowRateRes , "Rinseback Flow Rate Ranges" , "Rinseback_Flow_Rate_Res" , UInt , isConfigsOk ); - FROMVARIANT_WITHRETURN ( rinsebackFlowRateDef , "Rinseback Volume Ranges" , "Rinseback_Volume_Def" , UInt , isConfigsOk ); - FROMVARIANT_WITHRETURN ( rinsebackFlowRateMin , "Rinseback Volume Ranges" , "Rinseback_Volume_Min" , UInt , isConfigsOk ); - FROMVARIANT_WITHRETURN ( rinsebackFlowRateMax , "Rinseback Volume Ranges" , "Rinseback_Volume_Max" , UInt , isConfigsOk ); - FROMVARIANT_WITHRETURN ( rinsebackFlowRateRes , "Rinseback Volume Ranges" , "Rinseback_Volume_Res" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeDef , "Rinseback Volume Ranges" , "Rinseback_Volume_Def" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeMin , "Rinseback Volume Ranges" , "Rinseback_Volume_Min" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeMax , "Rinseback Volume Ranges" , "Rinseback_Volume_Max" , UInt , isConfigsOk ); + FROMVARIANT_WITHRETURN ( rinsebackVolumeRes , "Rinseback Volume Ranges" , "Rinseback_Volume_Res" , UInt , isConfigsOk ); - // ultrafiltrationVolume: Def, Min, Max intentionally omitted (see config/configurations/Parameters/DataList.conf) + FROMVARIANT_WITHRETURN ( ultrafiltrationVolumeDef , "Ultrafiltration Volume Ranges" , "Ultrafiltration_Volume_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( ultrafiltrationVolumeMin , "Ultrafiltration Volume Ranges" , "Ultrafiltration_Volume_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( ultrafiltrationVolumeMax , "Ultrafiltration Volume Ranges" , "Ultrafiltration_Volume_Max" , Float , isConfigsOk ); FROMVARIANT_WITHRETURN ( ultrafiltrationVolumeRes , "Ultrafiltration Volume Ranges" , "Ultrafiltration_Volume_Res" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( substitutionVolumeDef , "Substitution Volume Ranges" , "Substitution_Volume_Def" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( substitutionVolumeMin , "Substitution Volume Ranges" , "Substitution_Volume_Min" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( substitutionVolumeMax , "Substitution Volume Ranges" , "Substitution_Volume_Max" , Float , isConfigsOk ); + FROMVARIANT_WITHRETURN ( substitutionVolumeRes , "Substitution Volume Ranges" , "Substitution_Volume_Res" , Float , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( minRORejectionRatioAlarmDef , "Minimum RO Rejection Ratio Alarm" , "Min_RO_Rejection_Ratio_Alarm_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( minRORejectionRatioAlarmMin , "Minimum RO Rejection Ratio Alarm" , "Min_RO_Rejection_Ratio_Alarm_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( minRORejectionRatioAlarmMax , "Minimum RO Rejection Ratio Alarm" , "Min_RO_Rejection_Ratio_Alarm_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( minRORejectionRatioAlarmRes , "Minimum RO Rejection Ratio Alarm" , "Min_RO_Rejection_Ratio_Alarm_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( disinfectionFrequencyDef , "Disinfection Frequency" , "Disinfection_Frequency_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( disinfectionFrequencyMin , "Disinfection Frequency" , "Disinfection_Frequency_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( disinfectionFrequencyMax , "Disinfection Frequency" , "Disinfection_Frequency_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( disinfectionFrequencyRes , "Disinfection Frequency" , "Disinfection_Frequency_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( disinfectionParametersCycleTimeDef, "Disinfection Parameters Cycle Time" , "Disinfection_Parameters_Cycle_Time_Def", Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( disinfectionParametersCycleTimeMin, "Disinfection Parameters Cycle Time" , "Disinfection_Parameters_Cycle_Time_Min", Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( disinfectionParametersCycleTimeMax, "Disinfection Parameters Cycle Time" , "Disinfection_Parameters_Cycle_Time_Max", Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( disinfectionParametersCycleTimeRes, "Disinfection Parameters Cycle Time" , "Disinfection_Parameters_Cycle_Time_Res", Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( maxBloodPumpStopTimeDef , "Maximum Blood Pump Stop Time" , "Max_Blood_Pump_Stop_Time_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( maxBloodPumpStopTimeMin , "Maximum Blood Pump Stop Time" , "Max_Blood_Pump_Stop_Time_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( maxBloodPumpStopTimeMax , "Maximum Blood Pump Stop Time" , "Max_Blood_Pump_Stop_Time_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( maxBloodPumpStopTimeRes , "Maximum Blood Pump Stop Time" , "Max_Blood_Pump_Stop_Time_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( inletWaterCondLowThresholdDef , "Inlet Water Cond. Low Threshold" , "Inlet_Water_Cond_Low_Threshold_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( inletWaterCondLowThresholdMin , "Inlet Water Cond. Low Threshold" , "Inlet_Water_Cond_Low_Threshold_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( inletWaterCondLowThresholdMax , "Inlet Water Cond. Low Threshold" , "Inlet_Water_Cond_Low_Threshold_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( inletWaterCondLowThresholdRes , "Inlet Water Cond. Low Threshold" , "Inlet_Water_Cond_Low_Threshold_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( inletWaterCondHighThresholdDef , "Inlet Water Cond. High Threshold" , "Inlet_Water_Cond_High_Threshold_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( inletWaterCondHighThresholdMin , "Inlet Water Cond. High Threshold" , "Inlet_Water_Cond_High_Threshold_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( inletWaterCondHighThresholdMax , "Inlet Water Cond. High Threshold" , "Inlet_Water_Cond_High_Threshold_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( inletWaterCondHighThresholdRes , "Inlet Water Cond. High Threshold" , "Inlet_Water_Cond_High_Threshold_Res" , Int , isConfigsOk ); + + FROMVARIANT_WITHRETURN ( chlorineWaterSampleCheckDef , "Chlorine Water Sample Check" , "Chlorine_Water_Sample_Check_Def" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( chlorineWaterSampleCheckMin , "Chlorine Water Sample Check" , "Chlorine_Water_Sample_Check_Min" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( chlorineWaterSampleCheckMax , "Chlorine Water Sample Check" , "Chlorine_Water_Sample_Check_Max" , Int , isConfigsOk ); + FROMVARIANT_WITHRETURN ( chlorineWaterSampleCheckRes , "Chlorine Water Sample Check" , "Chlorine_Water_Sample_Check_Res" , Int , isConfigsOk ); + emit didTreatmentRangesDone( isConfigsOk ); } Index: sources/view/hd/data/VTreatmentRanges.h =================================================================== diff -u -rde099919f262c3429cb0592ef71deb6a16e92892 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/view/hd/data/VTreatmentRanges.h (.../VTreatmentRanges.h) (revision de099919f262c3429cb0592ef71deb6a16e92892) +++ sources/view/hd/data/VTreatmentRanges.h (.../VTreatmentRanges.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -57,11 +57,17 @@ VALUESET( float , potassium , 0) VALUESET( float , calcium , 0) + RANGESET( quint32 , dialysateBicarbonate , 0) + RANGESET( quint32 , dialysateSodium , 0) + READONLY( QStringList , heparinTypeOptions ,{}) READONLY( QStringList , acidConcentrateOptions ,{}) READONLY( QStringList , bicarbonateConcentrateOptions ,{}) READONLY( QStringList , dialyzerTypeOptions ,{}) READONLY( QStringList , bloodPressureMeasureInterval ,{}) + READONLY( QStringList , treatmentModalityOptions ,{}) + READONLY( QStringList , hdfTreatmentModeOptions ,{}) + READONLY( QStringList , dryBicabCartridgeSizeOptions ,{}) PROPERTY( QString , acidConcentrate ,"") TRIGGER ( bool , acidConcentrateAccepted , false) @@ -72,7 +78,19 @@ RANGESET( qint32 , venousPressureLimitWindow , 0) RANGESET( qint32 , venousPressureLimitAsymtrc , 0) RANGESET( quint32 , rinsebackFlowRate , 0) + RANGESET( quint32 , rinsebackVolume , 0) + RANGESET( float , substitutionVolume , 0) + // Advanced + RANGESET( quint32 , minRORejectionRatioAlarm , 0) + RANGESET( quint32 , disinfectionFrequency , 0) + RANGESET( quint32 , disinfectionParametersCycleTime , 0) + RANGESET( quint32 , maxBloodPumpStopTime , 0) + RANGESET( quint32 , inletWaterCondLowThreshold , 0) + RANGESET( quint32 , inletWaterCondHighThreshold , 0) + RANGESET( quint32 , chlorineWaterSampleCheck , 0) + READONLY( QStringList , waterSampleTestResultRequired ,{}) + // monitoring ranges RANGESET( qint32 , trancembrncPressureMonitor , 0) RANGESET( qint32 , arterialPressureMonitor , 0) Index: sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.cpp =================================================================== diff -u --- sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.cpp (revision 0) +++ sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,99 @@ +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VAdjustmentAdvancedInstitutionalRecord.cpp + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#include "VAdjustmentAdvancedInstitutionalRecord.h" + +// Project +#include "GuiController.h" +#include "format.h" + + +VIEW_DEF_CLASS_ADJUSTMENT(VAdjustmentAdvancedInstitutionalRecord) + +void View::VAdjustmentAdvancedInstitutionalRecord::initConnections() +{ + ADJUST_VIEW_CONNECTION(AdjustAdvancedInstitutionalRequestData) + ACTION_VIEW_CONNECTION(AdjustAdvancedInstitutionalRecordResponseData) +} + +/** +// * \brief View::VAdjustmentAdvancedInstitutionalRecord::onActionReceive +// * Slot to handle a adjust institutional record response from FW +// * \param actionType The action type must be a institutional record response +// * \param messageData The message data must contain the reject reason codes for all parameters +// * \returns True if FW OK's treatment parameters, false otherwise + */ +void View::VAdjustmentAdvancedInstitutionalRecord::onActionReceive(const AdjustAdvancedInstitutionalRecordResponseData &vData) +{ + adjustment_Accepted ( vData.mAccepted ); + minRORejectionRatioAlarmMinRejectionReason ( vData.mMinRORejectionRatioAlarmMinRejectionReason ); + minRORejectionRatioAlarmMaxRejectionReason ( vData.mMinRORejectionRatioAlarmMaxRejectionReason ); + minRORejectionRatioAlarmDefRejectionReason ( vData.mMinRORejectionRatioAlarmDefRejectionReason ); + disinfectionFrequencyMinRejectionReason ( vData.mDisinfectionFrequencyMinRejectionReason ); + disinfectionFrequencyMaxRejectionReason ( vData.mDisinfectionFrequencyMaxRejectionReason ); + disinfectionFrequencyDefRejectionReason ( vData.mDisinfectionFrequencyDefRejectionReason ); + disinfectionParametersCycleTimeMinRejectionReason ( vData.mDisinfectionParametersCycleTimeMinRejectionReason ); + disinfectionParametersCycleTimeMaxRejectionReason ( vData.mDisinfectionParametersCycleTimeMaxRejectionReason ); + disinfectionParametersCycleTimeDefRejectionReason ( vData.mDisinfectionParametersCycleTimeDefRejectionReason ); + maxBloodPumpStopTimeMinRejectionReason ( vData.mMaxBloodPumpStopTimeMinRejectionReason ); + maxBloodPumpStopTimeMaxRejectionReason ( vData.mMaxBloodPumpStopTimeMaxRejectionReason ); + maxBloodPumpStopTimeDefRejectionReason ( vData.mMaxBloodPumpStopTimeDefRejectionReason ); + inletWaterCondLowThresholdMinRejectionReason ( vData.mInletWaterCondLowThresholdMinRejectionReason ); + inletWaterCondLowThresholdMaxRejectionReason ( vData.mInletWaterCondLowThresholdMaxRejectionReason ); + inletWaterCondLowThresholdDefRejectionReason ( vData.mInletWaterCondLowThresholdDefRejectionReason ); + inletWaterCondHighThresholdMinRejectionReason ( vData.mInletWaterCondHighThresholdMinRejectionReason ); + inletWaterCondHighThresholdMaxRejectionReason ( vData.mInletWaterCondHighThresholdMaxRejectionReason ); + inletWaterCondHighThresholdDefRejectionReason ( vData.mInletWaterCondHighThresholdDefRejectionReason ); + chlorineWaterSampleCheckMinRejectionReason ( vData.mChlorineWaterSampleCheckMinRejectionReason ); + chlorineWaterSampleCheckMaxRejectionReason ( vData.mChlorineWaterSampleCheckMaxRejectionReason ); + chlorineWaterSampleCheckDefRejectionReason ( vData.mChlorineWaterSampleCheckDefRejectionReason ); + waterSampleTestResultRequiredDefRejectionReason ( vData.mWaterSampleTestResultRequiredDefRejectionReason ); + + // *** has to be the last to let the information to be set and then emit the signal *** + // *** otherwise will use the Previous values before being set. *** + adjustment ( true ); +} + +/** + * \brief VAdjustmentAdvancedInstitutionalRecord::doConfirm + * \details Validates the institutional records with FW + */ +void View::VAdjustmentAdvancedInstitutionalRecord::doConfirm() +{ + AdjustAdvancedInstitutionalRequestData advancedInstitutionalRecordsRequest; + advancedInstitutionalRecordsRequest.mMinRORejectionRatioAlarmMin = _minRORejectionRatioAlarmMin ; + advancedInstitutionalRecordsRequest.mMinRORejectionRatioAlarmMax = _minRORejectionRatioAlarmMax ; + advancedInstitutionalRecordsRequest.mMinRORejectionRatioAlarmDef = _minRORejectionRatioAlarmDef ; + advancedInstitutionalRecordsRequest.mDisinfectionFrequencyMin = _disinfectionFrequencyMin ; + advancedInstitutionalRecordsRequest.mDisinfectionFrequencyMax = _disinfectionFrequencyMax ; + advancedInstitutionalRecordsRequest.mDisinfectionFrequencyDef = _disinfectionFrequencyDef ; + advancedInstitutionalRecordsRequest.mDisinfectionParametersCycleTimeMin = _disinfectionParametersCycleTimeMin; + advancedInstitutionalRecordsRequest.mDisinfectionParametersCycleTimeMax = _disinfectionParametersCycleTimeMax; + advancedInstitutionalRecordsRequest.mDisinfectionParametersCycleTimeDef = _disinfectionParametersCycleTimeDef; + advancedInstitutionalRecordsRequest.mMaxBloodPumpStopTimeMin = _maxBloodPumpStopTimeMin ; + advancedInstitutionalRecordsRequest.mMaxBloodPumpStopTimeMax = _maxBloodPumpStopTimeMax ; + advancedInstitutionalRecordsRequest.mMaxBloodPumpStopTimeDef = _maxBloodPumpStopTimeDef ; + advancedInstitutionalRecordsRequest.mInletWaterCondLowThresholdMin = _inletWaterCondLowThresholdMin ; + advancedInstitutionalRecordsRequest.mInletWaterCondLowThresholdMax = _inletWaterCondLowThresholdMax ; + advancedInstitutionalRecordsRequest.mInletWaterCondLowThresholdDef = _inletWaterCondLowThresholdDef ; + advancedInstitutionalRecordsRequest.mInletWaterCondHighThresholdMin = _inletWaterCondHighThresholdMin ; + advancedInstitutionalRecordsRequest.mInletWaterCondHighThresholdMax = _inletWaterCondHighThresholdMax ; + advancedInstitutionalRecordsRequest.mInletWaterCondHighThresholdDef = _inletWaterCondHighThresholdDef ; + advancedInstitutionalRecordsRequest.mChlorineWaterSampleCheckMin = _chlorineWaterSampleCheckMin ; + advancedInstitutionalRecordsRequest.mChlorineWaterSampleCheckMax = _chlorineWaterSampleCheckMax ; + advancedInstitutionalRecordsRequest.mChlorineWaterSampleCheckDef = _chlorineWaterSampleCheckDef ; + advancedInstitutionalRecordsRequest.mWaterSampleTestResultRequiredDef = _waterSampleTestResultRequiredDef ; + + emit didAdjustment(advancedInstitutionalRecordsRequest); +} Index: sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.h =================================================================== diff -u --- sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.h (revision 0) +++ sources/view/settings/VAdjustmentAdvancedInstitutionalRecord.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,84 @@ +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VAdjustmentAdvancedInstitutionalRecord.h + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ + +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VAdjustmentResponseBase.h" +#include "MAdjustTDAdvancedInstitutionalRecordResponse.h" + +namespace View { + +/*! + * \brief The VAdjustmentAdvancedInstitutionalRecord class + * \details View for Model's Data representation. + */ +class VAdjustmentAdvancedInstitutionalRecord : public VAdjustmentResponseBase { + Q_OBJECT + + // friends + friend class ::tst_views; + + + // The property adjustment_Triggered has to be always true + // and to always trigger the change event to work as a notifier for GUI + TRIGGER( bool , adjustment , 0) + + RANGEVALUESET( quint32 , minRORejectionRatioAlarm , 0) + RANGEVALUESET( quint32 , disinfectionFrequency , 0) + RANGEVALUESET( quint32 , disinfectionParametersCycleTime , 0) + RANGEVALUESET( quint32 , maxBloodPumpStopTime , 0) + RANGEVALUESET( quint32 , inletWaterCondLowThreshold , 0) + RANGEVALUESET( quint32 , inletWaterCondHighThreshold , 0) + RANGEVALUESET( quint32 , chlorineWaterSampleCheck , 0) + RANGEVALUESET( quint32 , waterSampleTestResultRequired , 0) + + // rejection reasons + TRIGGER(quint32 , minRORejectionRatioAlarmMinRejectionReason , 0) + TRIGGER(quint32 , minRORejectionRatioAlarmMaxRejectionReason , 0) + TRIGGER(quint32 , minRORejectionRatioAlarmDefRejectionReason , 0) + TRIGGER(quint32 , disinfectionFrequencyMinRejectionReason , 0) + TRIGGER(quint32 , disinfectionFrequencyMaxRejectionReason , 0) + TRIGGER(quint32 , disinfectionFrequencyDefRejectionReason , 0) + TRIGGER(quint32 , disinfectionParametersCycleTimeMinRejectionReason , 0) + TRIGGER(quint32 , disinfectionParametersCycleTimeMaxRejectionReason , 0) + TRIGGER(quint32 , disinfectionParametersCycleTimeDefRejectionReason , 0) + TRIGGER(quint32 , maxBloodPumpStopTimeMinRejectionReason , 0) + TRIGGER(quint32 , maxBloodPumpStopTimeMaxRejectionReason , 0) + TRIGGER(quint32 , maxBloodPumpStopTimeDefRejectionReason , 0) + TRIGGER(quint32 , inletWaterCondLowThresholdMinRejectionReason , 0) + TRIGGER(quint32 , inletWaterCondLowThresholdMaxRejectionReason , 0) + TRIGGER(quint32 , inletWaterCondLowThresholdDefRejectionReason , 0) + TRIGGER(quint32 , inletWaterCondHighThresholdMinRejectionReason , 0) + TRIGGER(quint32 , inletWaterCondHighThresholdMaxRejectionReason , 0) + TRIGGER(quint32 , inletWaterCondHighThresholdDefRejectionReason , 0) + TRIGGER(quint32 , chlorineWaterSampleCheckMinRejectionReason , 0) + TRIGGER(quint32 , chlorineWaterSampleCheckMaxRejectionReason , 0) + TRIGGER(quint32 , chlorineWaterSampleCheckDefRejectionReason , 0) + TRIGGER(quint32 , waterSampleTestResultRequiredDefRejectionReason , 0) + + VIEW_DEC_CLASS_ADJUSTMENT(VAdjustmentAdvancedInstitutionalRecord, AdjustAdvancedInstitutionalRecordResponseData) + +public slots: + void doConfirm (); + +signals: + void didAdjustment(const AdjustAdvancedInstitutionalRequestData &vData); +}; +} Index: sources/view/settings/VAdjustmentInstitutionalRecord.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/view/settings/VAdjustmentInstitutionalRecord.cpp (.../VAdjustmentInstitutionalRecord.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/view/settings/VAdjustmentInstitutionalRecord.cpp (.../VAdjustmentInstitutionalRecord.cpp) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -21,59 +21,151 @@ VIEW_DEF_CLASS_ADJUSTMENT(VAdjustmentInstitutionalRecord) -void View::VAdjustmentInstitutionalRecord::initConnections() { +void View::VAdjustmentInstitutionalRecord::initConnections() +{ ADJUST_VIEW_CONNECTION(AdjustInstitutionalRequestData) ACTION_VIEW_CONNECTION(AdjustInstitutionalRecordResponseData) } +/** +// * \brief View::VAdjustmentInstitutionalRecord::onActionReceive +// * Slot to handle a adjust institutional record response from FW +// * \param actionType The action type must be a institutional record response +// * \param messageData The message data must contain the reject reason codes for all parameters +// * \returns True if FW OK's treatment parameters, false otherwise + */ void View::VAdjustmentInstitutionalRecord::onActionReceive(const AdjustInstitutionalRecordResponseData &vData) { - adjustment_Accepted ( vData.mAccepted ); - adjustment_Reason ( vData.mReason ); - minBloodFlowMLPM ( vData.mMinBloodFlowMLPM ); - maxBloodFlowMLPM ( vData.mMaxBloodFlowMLPM ); - minDialysateFlowMLPM ( vData.mMinDialysateFlowMLPM ); - maxDialysateFlowMLPM ( vData.mMaxDialysateFlowMLPM ); - minTxDurationMIN ( vData.mMinTxDurationMIN ); - maxTxDurationMIN ( vData.mMaxTxDurationMIN ); - minStopHepDispBeforeTxEndMIN ( vData.mMinStopHepDispBeforeTxEndMIN ); - maxStopHepDispBeforeTxEndMIN ( vData.mMaxStopHepDispBeforeTxEndMIN ); - minSalineBolVolumeML ( vData.mMinSalineBolVolumeML ); - maxSalineBolVolumeML ( vData.mMaxSalineBolVolumeML ); - minDialysateTempC ( vData.mMinDialysateTempC ); - maxDialysateTempC ( vData.mMaxDialysateTempC ); - minArtPressLimitWindowMMHG ( vData.mMinArtPressLimitWindowMMHG ); - maxArtPressLimitWindowMMHG ( vData.mMaxArtPressLimitWindowMMHG ); - minVenPressLimitWindowMMHG ( vData.mMinVenPressLimitWindowMMHG ); - maxVenPressLimitWindowMMHG ( vData.mMaxVenPressLimitWindowMMHG ); - minVenAsymPressLimitMMHG ( vData.mMinVenAsymPressLimitMMHG ); - maxVenAsymPressLimitMMHG ( vData.mMaxVenAsymPressLimitMMHG ); - minUltrafiltrationVolumeL ( vData.mMinUltrafiltrationVolumeL ); - maxUltrafiltrationVolumeL ( vData.mMaxUltrafiltrationVolumeL ); - minHepDispRateMLPM ( vData.mMinHepDispRateMLPM ); - maxHepDispRateMLPM ( vData.mMaxHepDispRateMLPM ); - minHepBolVolumeML ( vData.mMinHepBolVolumeML ); - maxHepBolVolumeML ( vData.mMaxHepBolVolumeML ); - enableChemicalDisinfect ( vData.mEnableChemicalDisinfect ); + adjustment_Accepted ( vData.mAccepted ); + bloodFlowRateMinRejectionReason ( vData.mBloodFlowRateMinRejectionReason ); + bloodFlowRateMaxRejectionReason ( vData.mBloodFlowRateMaxRejectionReason ); + bloodFlowRateDefRejectionReason ( vData.mBloodFlowRateDefRejectionReason ); + dialysateFlowRateMinRejectionReason ( vData.mDialysateFlowRateMinRejectionReason ); + dialysateFlowRateMaxRejectionReason ( vData.mDialysateFlowRateMaxRejectionReason ); + dialysateFlowRateDefRejectionReason ( vData.mDialysateFlowRateDefRejectionReason ); + treatmentDurationMinRejectionReason ( vData.mTreatmentDurationMinRejectionReason ); + treatmentDurationMaxRejectionReason ( vData.mTreatmentDurationMaxRejectionReason ); + treatmentDurationDefRejectionReason ( vData.mTreatmentDurationDefRejectionReason ); + heparinBolusVolumeMinRejectionReason ( vData.mHeparinBolusVolumeMinRejectionReason ); + heparinBolusVolumeMaxRejectionReason ( vData.mHeparinBolusVolumeMaxRejectionReason ); + heparinBolusVolumeDefRejectionReason ( vData.mHeparinBolusVolumeDefRejectionReason ); + heparinDispensingRateMinRejectionReason ( vData.mHeparinDispensingRateMinRejectionReason ); + heparinDispensingRateMaxRejectionReason ( vData.mHeparinDispensingRateMaxRejectionReason ); + heparinDispensingRateDefRejectionReason ( vData.mHeparinDispensingRateDefRejectionReason ); + heparinStopTimeMinRejectionReason ( vData.mHeparinStopTimeMinRejectionReason ); + heparinStopTimeMaxRejectionReason ( vData.mHeparinStopTimeMaxRejectionReason ); + dialysateTempMinRejectionReason ( vData.mDialysateTempMinRejectionReason ); + dialysateTempMaxRejectionReason ( vData.mDialysateTempMaxRejectionReason ); + dialysateTempDefRejectionReason ( vData.mDialysateTempDefRejectionReason ); + acidConcentratePotassiumMinRejectionReason ( vData.mAcidConcentratePotassiumMinRejectionReason ); + acidConcentratePotassiumMaxRejectionReason ( vData.mAcidConcentratePotassiumMaxRejectionReason ); + acidConcentrateCalciumMinRejectionReason ( vData.mAcidConcentrateCalciumMinRejectionReason ); + acidConcentrateCalciumMaxRejectionReason ( vData.mAcidConcentrateCalciumMaxRejectionReason ); + bicarbFinalDialysateCompositionMinRejectionReason ( vData.mBicarbFinalDialysateCompositionMinRejectionReason ); + bicarbFinalDialysateCompositionMaxRejectionReason ( vData.mBicarbFinalDialysateCompositionMaxRejectionReason ); + bicarbFinalDialysateCompositionDefRejectionReason ( vData.mBicarbFinalDialysateCompositionDefRejectionReason ); + sodiumFinalDialysateCompositionMinRejectionReason ( vData.mSodiumFinalDialysateCompositionMinRejectionReason ); + sodiumFinalDialysateCompositionMaxRejectionReason ( vData.mSodiumFinalDialysateCompositionMaxRejectionReason ); + sodiumFinalDialysateCompositionDefRejectionReason ( vData.mSodiumFinalDialysateCompositionDefRejectionReason ); + fluidBolusVolumeMinRejectionReason ( vData.mFluidBolusVolumeMinRejectionReason ); + fluidBolusVolumeMaxRejectionReason ( vData.mFluidBolusVolumeMaxRejectionReason ); + fluidBolusVolumeDefRejectionReason ( vData.mFluidBolusVolumeDefRejectionReason ); + arterialPressureLimitWindowMinRejectionReason ( vData.mArterialPressureLimitWindowMinRejectionReason ); + arterialPressureLimitWindowMaxRejectionReason ( vData.mArterialPressureLimitWindowMaxRejectionReason ); + arterialPressureLimitWindowDefRejectionReason ( vData.mArterialPressureLimitWindowDefRejectionReason ); + venousPressureLimitWindowMinRejectionReason ( vData.mVenousPressureLimitWindowMinRejectionReason ); + venousPressureLimitWindowMaxRejectionReason ( vData.mVenousPressureLimitWindowMaxRejectionReason ); + venousPressureLimitWindowDefRejectionReason ( vData.mVenousPressureLimitWindowDefRejectionReason ); + venousPressureLimitAsymtrcMinRejectionReason ( vData.mVenousPressureLimitAsymtrcMinRejectionReason ); + venousPressureLimitAsymtrcMaxRejectionReason ( vData.mVenousPressureLimitAsymtrcMaxRejectionReason ); + venousPressureLimitAsymtrcDefRejectionReason ( vData.mVenousPressureLimitAsymtrcDefRejectionReason ); + trancembrncPressureLimitWindowMinRejectionReason ( vData.mTrancembrncPressureLimitWindowMinRejectionReason ); + trancembrncPressureLimitWindowMaxRejectionReason ( vData.mTrancembrncPressureLimitWindowMaxRejectionReason ); + trancembrncPressureLimitWindowDefRejectionReason ( vData.mTrancembrncPressureLimitWindowDefRejectionReason ); + ultrafiltrationVolumeMinRejectionReason ( vData.mUltrafiltrationVolumeMinRejectionReason ); + ultrafiltrationVolumeMaxRejectionReason ( vData.mUltrafiltrationVolumeMaxRejectionReason ); + ultrafiltrationVolumeDefRejectionReason ( vData.mUltrafiltrationVolumeDefRejectionReason ); + vitalsIntervalDefRejectionReason ( vData.mVitalsIntervalDefRejectionReason ); + rinsebackVolumeMinRejectionReason ( vData.mRinsebackVolumeMinRejectionReason ); + rinsebackVolumeMaxRejectionReason ( vData.mRinsebackVolumeMaxRejectionReason ); + rinsebackVolumeDefRejectionReason ( vData.mRinsebackVolumeDefRejectionReason ); + rinsebackFlowRateMinRejectionReason ( vData.mRinsebackFlowRateMinRejectionReason ); + rinsebackFlowRateMaxRejectionReason ( vData.mRinsebackFlowRateMaxRejectionReason ); + rinsebackFlowRateDefRejectionReason ( vData.mRinsebackFlowRateDefRejectionReason ); + substitutionVolumeMinRejectionReason ( vData.mSubstitutionVolumeMinRejectionReason ); + substitutionVolumeMaxRejectionReason ( vData.mSubstitutionVolumeMaxRejectionReason ); + substitutionVolumeDefRejectionReason ( vData.mSubstitutionVolumeDefRejectionReason ); - - QStringList values; - values << QString("%1 - %2").arg(vData.mMinBloodFlowMLPM ).arg(vData.mMaxBloodFlowMLPM ); - values << QString("%1 - %2").arg(vData.mMinDialysateFlowMLPM ).arg(vData.mMaxDialysateFlowMLPM ); - values << QString("%1 - %2").arg(vData.mMinTxDurationMIN ).arg(vData.mMaxTxDurationMIN ); - values << QString("%1 - %2").arg(vData.mMinStopHepDispBeforeTxEndMIN ).arg(vData.mMaxStopHepDispBeforeTxEndMIN ); - values << QString("%1 - %2").arg(vData.mMinSalineBolVolumeML ).arg(vData.mMaxSalineBolVolumeML ); - values << QString("%1 - %2").arg(vData.mMinDialysateTempC ).arg(vData.mMaxDialysateTempC ); - values << QString("%1 - %2").arg(vData.mMinArtPressLimitWindowMMHG ).arg(vData.mMaxArtPressLimitWindowMMHG ); - values << QString("%1 - %2").arg(vData.mMinVenPressLimitWindowMMHG ).arg(vData.mMaxVenPressLimitWindowMMHG ); - values << QString("%1 - %2").arg(vData.mMinVenAsymPressLimitMMHG ).arg(vData.mMaxVenAsymPressLimitMMHG ); - values << QString("%1 - %2").arg(vData.mMinUltrafiltrationVolumeL ).arg(vData.mMaxUltrafiltrationVolumeL ); - values << QString("%1 - %2").arg(vData.mMinHepDispRateMLPM ).arg(vData.mMaxHepDispRateMLPM ); - values << QString("%1 - %2").arg(vData.mMinHepBolVolumeML ).arg(vData.mMaxHepBolVolumeML ); - values << QString("%1") .arg(vData.mEnableChemicalDisinfect ? tr("Enabled") : tr("Disabled") ); - parametersText(values); - // *** has to be the last to let the information to be set and then emit the signal *** // *** otherwise will use the Previous values before being set. *** adjustment ( true ); } + +/** + * \brief VAdjustmentInstitutionalRecord::doConfirm + * \details Validates the institutional records with FW + */ +void View::VAdjustmentInstitutionalRecord::doConfirm() +{ + AdjustInstitutionalRequestData institutionalRecordsRequest; + institutionalRecordsRequest.mBloodFlowMin = _bloodFlowRateMin ; + institutionalRecordsRequest.mBloodFlowMax = _bloodFlowRateMax ; + institutionalRecordsRequest.mBloodFlowDef = _bloodFlowRateDef ; + institutionalRecordsRequest.mDialysateFlowMin = _dialysateFlowRateMin ; + institutionalRecordsRequest.mDialysateFlowMax = _dialysateFlowRateMax ; + institutionalRecordsRequest.mDialysateFlowDef = _dialysateFlowRateDef ; + institutionalRecordsRequest.mTreatmentDurationMin = _treatmentDurationMin ; + institutionalRecordsRequest.mTreatmentDurationMax = _treatmentDurationMax ; + institutionalRecordsRequest.mTreatmentDurationDef = _treatmentDurationDef ; + institutionalRecordsRequest.mHepBolusVolumeMin = _heparinBolusVolumeMin ; + institutionalRecordsRequest.mHepBolusVolumeMax = _heparinBolusVolumeMax ; + institutionalRecordsRequest.mHepBolusVolumeDef = _heparinBolusVolumeDef ; + institutionalRecordsRequest.mHepDispRateMin = _heparinDispensingRateMin ; + institutionalRecordsRequest.mHepDispRateMax = _heparinDispensingRateMax ; + institutionalRecordsRequest.mHepDispRateDef = _heparinDispensingRateDef ; + institutionalRecordsRequest.mHepStopTimeMin = _heparinStopTimeMin ; + institutionalRecordsRequest.mHepStopTimeMax = _heparinStopTimeMax ; + institutionalRecordsRequest.mDialysateTempMin = _dialysateTempMin ; + institutionalRecordsRequest.mDialysateTempMax = _dialysateTempMax ; + institutionalRecordsRequest.mDialysateTempDef = _dialysateTempDef ; + institutionalRecordsRequest.mPotassiumMin = _acidConcentratePotassiumMin ; + institutionalRecordsRequest.mPotassiumMax = _acidConcentratePotassiumMax ; + institutionalRecordsRequest.mCalciumMin = _acidConcentrateCalciumMin ; + institutionalRecordsRequest.mCalciumMax = _acidConcentrateCalciumMax ; + institutionalRecordsRequest.mDialysateBicarbonateMin = _bicarbFinalDialysateCompositionMin ; + institutionalRecordsRequest.mDialysateBicarbonateMax = _bicarbFinalDialysateCompositionMax ; + institutionalRecordsRequest.mDialysateBicarbonateDef = _bicarbFinalDialysateCompositionDef ; + institutionalRecordsRequest.mDialysateSodiumMin = _sodiumFinalDialysateCompositionMin ; + institutionalRecordsRequest.mDialysateSodiumMax = _sodiumFinalDialysateCompositionMax ; + institutionalRecordsRequest.mDialysateSodiumDef = _sodiumFinalDialysateCompositionDef ; + institutionalRecordsRequest.mFluidBolusVolumeMin = _fluidBolusVolumeMin ; + institutionalRecordsRequest.mFluidBolusVolumeMax = _fluidBolusVolumeMax ; + institutionalRecordsRequest.mFluidBolusVolumeDef = _fluidBolusVolumeDef ; + institutionalRecordsRequest.mArterialWindowMin = _arterialPressureLimitWindowMin ; + institutionalRecordsRequest.mArterialWindowMax = _arterialPressureLimitWindowMax ; + institutionalRecordsRequest.mArterialWindowDef = _arterialPressureLimitWindowDef ; + institutionalRecordsRequest.mVenousWindowMin = _venousPressureLimitWindowMin ; + institutionalRecordsRequest.mVenousWindowMax = _venousPressureLimitWindowMax ; + institutionalRecordsRequest.mVenousWindowDef = _venousPressureLimitWindowDef ; + institutionalRecordsRequest.mVenousAsymmetricMin = _venousPressureLimitAsymtrcMin ; + institutionalRecordsRequest.mVenousAsymmetricMax = _venousPressureLimitAsymtrcMax ; + institutionalRecordsRequest.mVenousAsymmetricDef = _venousPressureLimitAsymtrcDef ; + institutionalRecordsRequest.mTMPWindowMin = _trancembrncPressureLimitWindowMin ; + institutionalRecordsRequest.mTMPWindowMax = _trancembrncPressureLimitWindowMax ; + institutionalRecordsRequest.mTMPWindowDef = _trancembrncPressureLimitWindowDef ; + institutionalRecordsRequest.mUltrafiltrationVolumeMin = _ultrafiltrationVolumeMin ; + institutionalRecordsRequest.mUltrafiltrationVolumeMax = _ultrafiltrationVolumeMax ; + institutionalRecordsRequest.mUltrafiltrationVolumeDef = _ultrafiltrationVolumeDef ; + institutionalRecordsRequest.mVitalsIntervalDef = _vitalsIntervalDef ; + institutionalRecordsRequest.mRinsebackVolumeMin = _rinsebackVolumeMin ; + institutionalRecordsRequest.mRinsebackVolumeMax = _rinsebackVolumeMax ; + institutionalRecordsRequest.mRinsebackVolumeDef = _rinsebackVolumeDef ; + institutionalRecordsRequest.mRinsebackFlowRateMin = _rinsebackFlowRateMin ; + institutionalRecordsRequest.mRinsebackFlowRateMax = _rinsebackFlowRateMax ; + institutionalRecordsRequest.mRinsebackFlowRateDef = _rinsebackFlowRateDef ; + institutionalRecordsRequest.mSubstitutionVolumeMin = _substitutionVolumeMin ; + institutionalRecordsRequest.mSubstitutionVolumeMax = _substitutionVolumeMax ; + institutionalRecordsRequest.mSubstitutionVolumeDef = _substitutionVolumeDef ; + + emit didAdjustment(institutionalRecordsRequest); +} Index: sources/view/settings/VAdjustmentInstitutionalRecord.h =================================================================== diff -u -ra58f91b077c8131bea3dbde0fc338adb113fc9f3 -re49c956894f999f6539b0c404dd1c9b18a76bb4b --- sources/view/settings/VAdjustmentInstitutionalRecord.h (.../VAdjustmentInstitutionalRecord.h) (revision a58f91b077c8131bea3dbde0fc338adb113fc9f3) +++ sources/view/settings/VAdjustmentInstitutionalRecord.h (.../VAdjustmentInstitutionalRecord.h) (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -21,7 +21,7 @@ // Project #include "main.h" // Doxygen : do not remove #include "VAdjustmentResponseBase.h" -#include "MAdjustHDInstitutionalRecordResponse.h" +#include "MAdjustTDInstitutionalRecordResponse.h" namespace View { @@ -38,85 +38,97 @@ // friends friend class ::tst_views; - const QStringList _titles { - tr("Blood Flow Rate" ), - tr("Dialysate Flow Rate" ), - tr("Treatment Duration" ), - tr("Heparin Stop" ), - tr("Saline Bolus Volume" ), - tr("Dialysate Temperature" ), - tr("Arterial Pressure Limit" ), - tr("Venous Pressure Limit" ), - tr("Venous Asym Pressure Limit" ), - tr("Prescribed UF Volume" ), - tr("Heparin Dispense Rate" ), - tr("Heparin Bolus Volume" ), - tr("Chemical Disinfect" ), - }; - const QStringList _units { - tr("mL/min" ), - tr("mL/min" ), - tr("min" ), - tr("min" ), - tr("mL" ), - tr("C" ), - tr("mmHg" ), - tr("mmHg" ), - tr("mmHg" ), - tr("L" ), - tr("mL/hr" ), - tr("mL" ), - tr("" ), - }; - - - // The property adjustment_Triggered has to be always true // and to always trigger the change event to work as a notifier for GUI TRIGGER( bool , adjustment , 0) - PROPERTY(quint32 , minBloodFlowMLPM , 0 ) - PROPERTY(quint32 , maxBloodFlowMLPM , 0 ) - PROPERTY(quint32 , minDialysateFlowMLPM , 0 ) - PROPERTY(quint32 , maxDialysateFlowMLPM , 0 ) - PROPERTY(quint32 , minTxDurationMIN , 0 ) - PROPERTY(quint32 , maxTxDurationMIN , 0 ) - PROPERTY(quint32 , minStopHepDispBeforeTxEndMIN , 0 ) - PROPERTY(quint32 , maxStopHepDispBeforeTxEndMIN , 0 ) - PROPERTY(quint32 , minSalineBolVolumeML , 0 ) - PROPERTY(quint32 , maxSalineBolVolumeML , 0 ) - PROPERTY(float , minDialysateTempC , 0.0 ) - PROPERTY(float , maxDialysateTempC , 0.0 ) - PROPERTY(qint32 , minArtPressLimitWindowMMHG , 0 ) - PROPERTY(qint32 , maxArtPressLimitWindowMMHG , 0 ) - PROPERTY(qint32 , minVenPressLimitWindowMMHG , 0 ) - PROPERTY(qint32 , maxVenPressLimitWindowMMHG , 0 ) - PROPERTY(qint32 , minVenAsymPressLimitMMHG , 0 ) - PROPERTY(qint32 , maxVenAsymPressLimitMMHG , 0 ) - PROPERTY(float , minUltrafiltrationVolumeL , 0.0 ) - PROPERTY(float , maxUltrafiltrationVolumeL , 0.0 ) - PROPERTY(float , minHepDispRateMLPM , 0.0 ) - PROPERTY(float , maxHepDispRateMLPM , 0.0 ) - PROPERTY(float , minHepBolVolumeML , 0.0 ) - PROPERTY(float , maxHepBolVolumeML , 0.0 ) - PROPERTY(bool , enableChemicalDisinfect , true ) + RANGEVALUESET( quint32 , bloodFlowRate , 0) + RANGEVALUESET( quint32 , dialysateFlowRate , 0) + RANGEVALUESET( quint32 , treatmentDuration , 0) + RANGEVALUESET( float , heparinBolusVolume , 0) + RANGEVALUESET( float , heparinDispensingRate , 0) + RANGEVALUESET( quint32 , heparinStopTime , 0) + RANGEVALUESET( float , dialysateTemp , 0) + RANGEVALUESET( float , acidConcentratePotassium , 0) + RANGEVALUESET( float , acidConcentrateCalcium , 0) + RANGEVALUESET( quint32 , bicarbFinalDialysateComposition , 0) + RANGEVALUESET( quint32 , sodiumFinalDialysateComposition , 0) + RANGEVALUESET( quint32 , fluidBolusVolume , 0) + RANGEVALUESET( qint32 , arterialPressureLimitWindow , 0) + RANGEVALUESET( qint32 , venousPressureLimitWindow , 0) + RANGEVALUESET( qint32 , venousPressureLimitAsymtrc , 0) + RANGEVALUESET( qint32 , trancembrncPressureLimitWindow , 0) + RANGEVALUESET( float , ultrafiltrationVolume , 0) + RANGEVALUESET( qint32 , vitalsInterval , 0) + RANGEVALUESET( quint32 , rinsebackVolume , 0) + RANGEVALUESET( quint32 , rinsebackFlowRate , 0) + RANGEVALUESET( float , substitutionVolume , 0) - PROPERTY(QStringList , parametersTitle , titles()) - PROPERTY(QStringList , parametersText , {} ) - PROPERTY(QStringList , parametersUnit , units ()) + // rejection reasons + TRIGGER(quint32 , bloodFlowRateMinRejectionReason , 0) + TRIGGER(quint32 , bloodFlowRateMaxRejectionReason , 0) + TRIGGER(quint32 , bloodFlowRateDefRejectionReason , 0) + TRIGGER(quint32 , dialysateFlowRateMinRejectionReason , 0) + TRIGGER(quint32 , dialysateFlowRateMaxRejectionReason , 0) + TRIGGER(quint32 , dialysateFlowRateDefRejectionReason , 0) + TRIGGER(quint32 , treatmentDurationMinRejectionReason , 0) + TRIGGER(quint32 , treatmentDurationMaxRejectionReason , 0) + TRIGGER(quint32 , treatmentDurationDefRejectionReason , 0) + TRIGGER(quint32 , heparinBolusVolumeMinRejectionReason , 0) + TRIGGER(quint32 , heparinBolusVolumeMaxRejectionReason , 0) + TRIGGER(quint32 , heparinBolusVolumeDefRejectionReason , 0) + TRIGGER(quint32 , heparinDispensingRateMinRejectionReason , 0) + TRIGGER(quint32 , heparinDispensingRateMaxRejectionReason , 0) + TRIGGER(quint32 , heparinDispensingRateDefRejectionReason , 0) + TRIGGER(quint32 , heparinStopTimeMinRejectionReason , 0) + TRIGGER(quint32 , heparinStopTimeMaxRejectionReason , 0) + TRIGGER(quint32 , dialysateTempMinRejectionReason , 0) + TRIGGER(quint32 , dialysateTempMaxRejectionReason , 0) + TRIGGER(quint32 , dialysateTempDefRejectionReason , 0) + TRIGGER(quint32 , acidConcentratePotassiumMinRejectionReason , 0) + TRIGGER(quint32 , acidConcentratePotassiumMaxRejectionReason , 0) + TRIGGER(quint32 , acidConcentrateCalciumMinRejectionReason , 0) + TRIGGER(quint32 , acidConcentrateCalciumMaxRejectionReason , 0) + TRIGGER(quint32 , bicarbFinalDialysateCompositionMinRejectionReason , 0) + TRIGGER(quint32 , bicarbFinalDialysateCompositionMaxRejectionReason , 0) + TRIGGER(quint32 , bicarbFinalDialysateCompositionDefRejectionReason , 0) + TRIGGER(quint32 , sodiumFinalDialysateCompositionMinRejectionReason , 0) + TRIGGER(quint32 , sodiumFinalDialysateCompositionMaxRejectionReason , 0) + TRIGGER(quint32 , sodiumFinalDialysateCompositionDefRejectionReason , 0) + TRIGGER(quint32 , fluidBolusVolumeMinRejectionReason , 0) + TRIGGER(quint32 , fluidBolusVolumeMaxRejectionReason , 0) + TRIGGER(quint32 , fluidBolusVolumeDefRejectionReason , 0) + TRIGGER(quint32 , arterialPressureLimitWindowMinRejectionReason , 0) + TRIGGER(quint32 , arterialPressureLimitWindowMaxRejectionReason , 0) + TRIGGER(quint32 , arterialPressureLimitWindowDefRejectionReason , 0) + TRIGGER(quint32 , venousPressureLimitWindowMinRejectionReason , 0) + TRIGGER(quint32 , venousPressureLimitWindowMaxRejectionReason , 0) + TRIGGER(quint32 , venousPressureLimitWindowDefRejectionReason , 0) + TRIGGER(quint32 , venousPressureLimitAsymtrcMinRejectionReason , 0) + TRIGGER(quint32 , venousPressureLimitAsymtrcMaxRejectionReason , 0) + TRIGGER(quint32 , venousPressureLimitAsymtrcDefRejectionReason , 0) + TRIGGER(quint32 , trancembrncPressureLimitWindowMinRejectionReason , 0) + TRIGGER(quint32 , trancembrncPressureLimitWindowMaxRejectionReason , 0) + TRIGGER(quint32 , trancembrncPressureLimitWindowDefRejectionReason , 0) + TRIGGER(quint32 , ultrafiltrationVolumeMinRejectionReason , 0) + TRIGGER(quint32 , ultrafiltrationVolumeMaxRejectionReason , 0) + TRIGGER(quint32 , ultrafiltrationVolumeDefRejectionReason , 0) + TRIGGER(quint32 , vitalsIntervalDefRejectionReason , 0) + TRIGGER(quint32 , rinsebackVolumeMinRejectionReason , 0) + TRIGGER(quint32 , rinsebackVolumeMaxRejectionReason , 0) + TRIGGER(quint32 , rinsebackVolumeDefRejectionReason , 0) + TRIGGER(quint32 , rinsebackFlowRateMinRejectionReason , 0) + TRIGGER(quint32 , rinsebackFlowRateMaxRejectionReason , 0) + TRIGGER(quint32 , rinsebackFlowRateDefRejectionReason , 0) + TRIGGER(quint32 , substitutionVolumeMinRejectionReason , 0) + TRIGGER(quint32 , substitutionVolumeMaxRejectionReason , 0) + TRIGGER(quint32 , substitutionVolumeDefRejectionReason , 0) VIEW_DEC_CLASS_ADJUSTMENT(VAdjustmentInstitutionalRecord, AdjustInstitutionalRecordResponseData) -private: - QStringList titles() { return _titles; } - QStringList units () { return _units ; } - public slots: - void doAdjustment() { - AdjustInstitutionalRequestData data; - emit didAdjustment(data); - } + void doConfirm (); signals: void didAdjustment(const AdjustInstitutionalRequestData &vData); Index: sources/view/settings/VAdvancedInstitutionalRecord.cpp =================================================================== diff -u --- sources/view/settings/VAdvancedInstitutionalRecord.cpp (revision 0) +++ sources/view/settings/VAdvancedInstitutionalRecord.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,60 @@ +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VAdvancedInstitutionalRecord.cpp + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ +#include "VAdvancedInstitutionalRecord.h" + +// Project +#include "GuiController.h" +#include "format.h" + + +VIEW_DEF_CLASS_ADJUSTMENT(VAdvancedInstitutionalRecord) + +void View::VAdvancedInstitutionalRecord::initConnections() +{ + ADJUST_VIEW_CONNECTION(AdvancedInstitutionalRequestData) + ACTION_VIEW_CONNECTION(AdvancedInstitutionalRecordResponseData) +} + +void View::VAdvancedInstitutionalRecord::onActionReceive(const AdvancedInstitutionalRecordResponseData &vData) +{ + adjustment_Accepted ( vData.mAccepted ); + adjustment_Reason ( vData.mReason ); + minRORejectionRatioAlarmMin ( vData.mMinRORejectionRatioAlarmMin ); + minRORejectionRatioAlarmMax ( vData.mMinRORejectionRatioAlarmMax ); + minRORejectionRatioAlarmDef ( vData.mMinRORejectionRatioAlarmDef ); + disinfectionFrequencyMin ( vData.mDisinfectionFrequencyMin ); + disinfectionFrequencyMax ( vData.mDisinfectionFrequencyMax ); + disinfectionFrequencyDef ( vData.mDisinfectionFrequencyDef ); + disinfectionParametersCycleTimeMin ( vData.mDisinfectionParametersCycleTimeMin ); + disinfectionParametersCycleTimeMax ( vData.mDisinfectionParametersCycleTimeMax ); + disinfectionParametersCycleTimeDef ( vData.mDisinfectionParametersCycleTimeDef ); + maxBloodPumpStopTimeMin ( vData.mMaxBloodPumpStopTimeMin ); + maxBloodPumpStopTimeMax ( vData.mMaxBloodPumpStopTimeMax ); + maxBloodPumpStopTimeDef ( vData.mMaxBloodPumpStopTimeDef ); + inletWaterCondLowThresholdMin ( vData.mInletWaterCondLowThresholdMin ); + inletWaterCondLowThresholdMax ( vData.mInletWaterCondLowThresholdMax ); + inletWaterCondLowThresholdDef ( vData.mInletWaterCondLowThresholdDef ); + inletWaterCondHighThresholdMin ( vData.mInletWaterCondHighThresholdMin ); + inletWaterCondHighThresholdMax ( vData.mInletWaterCondHighThresholdMax ); + inletWaterCondHighThresholdDef ( vData.mInletWaterCondHighThresholdDef ); + chlorineWaterSampleCheckMin ( vData.mChlorineWaterSampleCheckMin ); + chlorineWaterSampleCheckMax ( vData.mChlorineWaterSampleCheckMax ); + chlorineWaterSampleCheckDef ( vData.mChlorineWaterSampleCheckDef ); + waterSampleTestResultRequiredDef ( vData.mWaterSampleTestResultRequiredDef ); + + // *** has to be the last to let the information to be set and then emit the signal *** + // *** otherwise will use the Previous values before being set. *** + adjustment ( true ); +} Index: sources/view/settings/VAdvancedInstitutionalRecord.h =================================================================== diff -u --- sources/view/settings/VAdvancedInstitutionalRecord.h (revision 0) +++ sources/view/settings/VAdvancedInstitutionalRecord.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,99 @@ +#pragma once + +/*! + * + * Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VAdvancedInstitutionalRecord.h + * \author (last) Nico Ramirez + * \date (last) 20-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 20-Nov-2025 + * + */ + +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VAdjustmentResponseBase.h" +#include "MTDAdvancedInstitutionalRecordResponse.h" + +namespace View { + +/*! + * \brief The VAdvancedInstitutionalRecord class + * \details View for Model's Data representation. + * + * \sa Model::VAdjustmentResponseBase + * + */ +class VAdvancedInstitutionalRecord : public VAdjustmentResponseBase { + Q_OBJECT + + // friends + friend class ::tst_views; + + const QStringList _titles { + tr("Minimum RO Rejection Ratio Alarm" ), + tr("Disinfection Frequency" ), + tr("Disinfection Parameters, Cycle Time"), + tr("Maximum Blood Pump Stop Time" ), + tr("Inlet Water Cond. Low Threshold" ), + tr("Inlet Water Cond. High Threshold" ), + tr("Chlorine Water Sample Check" ), + tr("Water Sample Test Result Required" ), + }; + + const QStringList _units { + tr("% reject" ), // Minimum RO Rejection Ratio Alarm + tr("days between cycles" ), // Disinfection Frequency + tr("Time" ), // Disinfection Parameters, Cycle Time + tr("min" ), // Maximum Blood Pump Stop Time + tr("uS/cm" ), // Inlet Water Cond. Low Threshold + tr("uS/cm" ), // Inlet Water Cond. High Threshold + tr("min" ), // Chlorine Water Sample Check + tr("" ), // Water Sample Test Result Required + }; + + // The property adjustment_Triggered has to be always true + // and to always trigger the change event to work as a notifier for GUI + TRIGGER( bool , adjustment , 0) + + RANGESET( quint32 , minRORejectionRatioAlarm , 0) + RANGESET( quint32 , disinfectionFrequency , 0) + RANGESET( quint32 , disinfectionParametersCycleTime , 0) + RANGESET( quint32 , maxBloodPumpStopTime , 0) + RANGESET( quint32 , inletWaterCondLowThreshold , 0) + RANGESET( quint32 , inletWaterCondHighThreshold , 0) + RANGESET( quint32 , chlorineWaterSampleCheck , 0) + RANGESET( quint32 , waterSampleTestResultRequired , 0) + + PROPERTY(QStringList , parametersTitle , titles()) + PROPERTY(QStringList , parametersUnit , units ()) + + VIEW_DEC_CLASS_ADJUSTMENT(VAdvancedInstitutionalRecord, AdvancedInstitutionalRecordResponseData) + +private: + QStringList titles() { return _titles; } + QStringList units () { return _units ; } + +public slots: + void doAdjustment() { + AdvancedInstitutionalRequestData data; + emit didAdjustment(data); + } + +signals: + void didAdjustment(const AdvancedInstitutionalRequestData &vData); +}; +} + + + Index: sources/view/settings/VInstitutionalRecord.cpp =================================================================== diff -u --- sources/view/settings/VInstitutionalRecord.cpp (revision 0) +++ sources/view/settings/VInstitutionalRecord.cpp (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,96 @@ +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VInstitutionalRecord.cpp + * \author (last) Dara Navaei + * \date (last) 26-Mar-2024 + * \author (original) Dara Navaei + * \date (original) 28-Feb-2024 + * + */ +#include "VInstitutionalRecord.h" + +// Project +#include "GuiController.h" +#include "format.h" + + +VIEW_DEF_CLASS_ADJUSTMENT(VInstitutionalRecord) + +void View::VInstitutionalRecord::initConnections() +{ + ADJUST_VIEW_CONNECTION(InstitutionalRequestData) + ACTION_VIEW_CONNECTION(InstitutionalRecordResponseData) +} + +void View::VInstitutionalRecord::onActionReceive(const InstitutionalRecordResponseData &vData) +{ + adjustment_Accepted ( vData.mAccepted ); + adjustment_Reason ( vData.mReason ); + bloodFlowRateMin ( vData.mBloodFlowMin ); + bloodFlowRateMax ( vData.mBloodFlowMax ); + bloodFlowRateDef ( vData.mBloodFlowDef ); + dialysateFlowRateMin ( vData.mDialysateFlowMin ); + dialysateFlowRateMax ( vData.mDialysateFlowMax ); + dialysateFlowRateDef ( vData.mDialysateFlowDef ); + treatmentDurationMin ( vData.mTreatmentDurationMin ); + treatmentDurationMax ( vData.mTreatmentDurationMax ); + treatmentDurationDef ( vData.mTreatmentDurationDef ); + heparinBolusVolumeMin ( vData.mHepBolusVolumeMin ); + heparinBolusVolumeMax ( vData.mHepBolusVolumeMax ); + heparinBolusVolumeDef ( vData.mHepBolusVolumeDef ); + heparinDispensingRateMin ( vData.mHepDispRateMin ); + heparinDispensingRateMax ( vData.mHepDispRateMax ); + heparinDispensingRateDef ( vData.mHepDispRateDef ); + heparinStopTimeMin ( vData.mHepStopTimeMin ); + heparinStopTimeMax ( vData.mHepStopTimeMax ); + dialysateTempMin ( vData.mDialysateTempMin ); + dialysateTempMax ( vData.mDialysateTempMax ); + dialysateTempDef ( vData.mDialysateTempDef ); + acidConcentratePotassiumMin ( vData.mPotassiumMin ); + acidConcentratePotassiumMax ( vData.mPotassiumMax ); + acidConcentrateCalciumMin ( vData.mCalciumMin ); + acidConcentrateCalciumMax ( vData.mCalciumMax ); + bicarbFinalDialysateCompositionMin ( vData.mDialysateBicarbonateMin ); + bicarbFinalDialysateCompositionMax ( vData.mDialysateBicarbonateMax ); + bicarbFinalDialysateCompositionDef ( vData.mDialysateBicarbonateDef ); + sodiumFinalDialysateCompositionMin ( vData.mDialysateSodiumMin ); + sodiumFinalDialysateCompositionMax ( vData.mDialysateSodiumMax ); + sodiumFinalDialysateCompositionDef ( vData.mDialysateSodiumDef ); + fluidBolusVolumeMin ( vData.mFluidBolusVolumeMin ); + fluidBolusVolumeMax ( vData.mFluidBolusVolumeMax ); + fluidBolusVolumeDef ( vData.mFluidBolusVolumeDef ); + arterialPressureLimitWindowMin ( vData.mArterialWindowMin ); + arterialPressureLimitWindowMax ( vData.mArterialWindowMax ); + arterialPressureLimitWindowDef ( vData.mArterialWindowDef ); + venousPressureLimitWindowMin ( vData.mVenousWindowMin ); + venousPressureLimitWindowMax ( vData.mVenousWindowMax ); + venousPressureLimitWindowDef ( vData.mVenousWindowDef ); + venousPressureLimitAsymtrcMin ( vData.mVenousAsymmetricMin ); + venousPressureLimitAsymtrcMax ( vData.mVenousAsymmetricMax ); + venousPressureLimitAsymtrcDef ( vData.mVenousAsymmetricDef ); + trancembrncPressureLimitWindowMin ( vData.mTMPWindowMin ); + trancembrncPressureLimitWindowMax ( vData.mTMPWindowMax ); + trancembrncPressureLimitWindowDef ( vData.mTMPWindowDef ); + ultrafiltrationVolumeMin ( vData.mUltrafiltrationVolumeMin ); + ultrafiltrationVolumeMax ( vData.mUltrafiltrationVolumeMax ); + ultrafiltrationVolumeDef ( vData.mUltrafiltrationVolumeDef ); + vitalsIntervalDef ( vData.mVitalsIntervalDef ); + rinsebackVolumeMin ( vData.mRinsebackVolumeMin ); + rinsebackVolumeMax ( vData.mRinsebackVolumeMax ); + rinsebackVolumeDef ( vData.mRinsebackVolumeDef ); + rinsebackFlowRateMin ( vData.mRinsebackFlowRateMin ); + rinsebackFlowRateMax ( vData.mRinsebackFlowRateMax ); + rinsebackFlowRateDef ( vData.mRinsebackFlowRateDef ); + substitutionVolumeMin ( vData.mSubstitutionVolumeMin ); + substitutionVolumeMax ( vData.mSubstitutionVolumeMax ); + substitutionVolumeDef ( vData.mSubstitutionVolumeDef ); + + // *** has to be the last to let the information to be set and then emit the signal *** + // *** otherwise will use the Previous values before being set. *** + adjustment ( true ); +} Index: sources/view/settings/VInstitutionalRecord.h =================================================================== diff -u --- sources/view/settings/VInstitutionalRecord.h (revision 0) +++ sources/view/settings/VInstitutionalRecord.h (revision e49c956894f999f6539b0c404dd1c9b18a76bb4b) @@ -0,0 +1,139 @@ +/*! + * + * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. + * \copyright + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * \file VInstitutionalRecord.h + * \author (last) Behrouz NematiPour + * \date (last) 26-Mar-2024 + * \author (original) Dara Navaei + * \date (original) 28-Feb-2024 + * + */ + +#pragma once + +// Qt +#include + +// Project +#include "main.h" // Doxygen : do not remove +#include "VAdjustmentResponseBase.h" +#include "MTDInstitutionalRecordResponse.h" + +namespace View { + +/*! + * \brief The VInstitutionalRecord class + * \details View for Model's Data representation. + * + * \sa Model::VAdjustmentResponseBase + * + */ +class VInstitutionalRecord : public VAdjustmentResponseBase { + Q_OBJECT + + // friends + friend class ::tst_views; + + const QStringList _titles { + tr("Blood Flow Rate" ), + tr("Dialysate Flow Rate" ), + tr("Treatment Duration" ), + tr("Heparin Bolus Volume" ), + tr("Heparin Dispense Rate" ), + tr("Heparin Stop Time" ), + tr("Dialysate Temperature" ), + tr("Acid Composition ([K+])" ), + tr("Acid Composition ([Ca2+])" ), + tr("Bicarb. Final Dialysate Composition"), + tr("Sodium Final Dialysate Composition" ), + tr("Fluid Bolus Volume" ), + tr("Arterial Pressure Limit" ), + tr("Venous Pressure Limit" ), + tr("Venous Asym Pressure Limit" ), + tr("TMP Window Limit" ), + tr("UF Volume" ), + tr("Vitals Interval" ), + tr("Rinseback Volume" ), + tr("Rinseback Flow Rate" ), + tr("Substitution Volume" ), + }; + + const QStringList _units { + tr("mL/min" ), // Blood Flow Rate + tr("mL/min" ), // Dialysate Flow Rate + tr("min" ), // Treatment Duration + tr("mL" ), // Heparin Bolus Volume + tr("mL/hr" ), // Heparin Dispense Rate + tr("min" ), // Heparin Stop Time + tr("°C" ), // Dialysate Temperature + tr("mEq/L" ), // Acid Composition ([K+]) + tr("mEq/L" ), // Acid Composition ([Ca2+]) + tr("mEq/L" ), // Bicarb. Final Dialysate Composition" + tr("mEq/L" ), // Sodium Final Dialysate Composition + tr("mL" ), // Fluid Bolus Volume + tr("mmHg" ), // Arterial Pressure Limit + tr("mmHg" ), // Venous Pressure Limit + tr("mmHg" ), // Venous Asym Pressure Limit + tr("mmHg" ), // TMP Window Limit + tr("L" ), // UF Volume + tr("min" ), // Vitals Interval + tr("mL" ), // Rinseback Volume + tr("mL/min" ), // Rinseback Flow Rate + tr("L" ), // Substitution Volume + }; + + // The property adjustment_Triggered has to be always true + // and to always trigger the change event to work as a notifier for GUI + TRIGGER( bool , adjustment , 0) + + RANGESET( quint32 , bloodFlowRate , 0) + RANGESET( quint32 , dialysateFlowRate , 0) + RANGESET( quint32 , treatmentDuration , 0) + RANGESET( float , heparinBolusVolume , 0) + RANGESET( float , heparinDispensingRate , 0) + RANGESET( quint32 , heparinStopTime , 0) + RANGESET( float , dialysateTemp , 0) + RANGESET( float , acidConcentratePotassium , 0) + RANGESET( float , acidConcentrateCalcium , 0) + RANGESET( quint32 , bicarbFinalDialysateComposition , 0) + RANGESET( quint32 , sodiumFinalDialysateComposition , 0) + RANGESET( quint32 , fluidBolusVolume , 0) + RANGESET( qint32 , arterialPressureLimitWindow , 0) + RANGESET( qint32 , venousPressureLimitWindow , 0) + RANGESET( qint32 , venousPressureLimitAsymtrc , 0) + RANGESET( qint32 , trancembrncPressureLimitWindow , 0) + RANGESET( float , ultrafiltrationVolume , 0) + RANGESET( qint32 , vitalsInterval , 0) + RANGESET( quint32 , rinsebackVolume , 0) + RANGESET( quint32 , rinsebackFlowRate , 0) + RANGESET( float , substitutionVolume , 0) + + // TODO: enhancement + READONLY( QStringList , treatmentModalityOptions ,{}) + READONLY( QStringList , hdfTreatmentModeOptions ,{}) + READONLY( QStringList , dryBicabCartridgeSizeOptions ,{}) + READONLY( QStringList , dialyzerTypeOptions ,{}) + + PROPERTY(QStringList , parametersTitle , titles()) + PROPERTY(QStringList , parametersUnit , units ()) + + VIEW_DEC_CLASS_ADJUSTMENT(VInstitutionalRecord, InstitutionalRecordResponseData) + +private: + QStringList titles() { return _titles; } + QStringList units () { return _units ; } + +public slots: + void doAdjustment() { + InstitutionalRequestData data; + emit didAdjustment(data); + } + +signals: + void didAdjustment(const InstitutionalRequestData &vData); +}; +}