Index: SDDs/Institutional.png =================================================================== diff -u Binary files differ Index: SDDs/Institutional.puml =================================================================== diff -u --- SDDs/Institutional.puml (revision 0) +++ SDDs/Institutional.puml (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -0,0 +1,360 @@ +@startuml Institutional + + participant TD as TD + participant SW as SW + participant UI as UI + actor USER as US + + 'Possible actions and interaction tuypes + ' TD -> SW: MSG: Message + ' SW -> TD: MSG: Message + ' SW -> UI: CMD: command + ' UI -> SW: ACT: Action + ' US -> UI: User actions are: + ' ENT: User enters a value or string + ' TCH: User touches a button (RadioButton, CheckBox, ...) + ' SET: User sets/slides a slider + ' SCL: User scrolls a flipable area + ' + 'Messages conventions: + '[x \n ,] + '[x \n ,# certain amount of parameters according to the content] + '[x \n ,X The rest of the parameters do not matter.] + + == Start Up/ POST == + group Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + group Advanced Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + == Institutional Settings Screen (Normal) == + US -> UI: TCH: Press Settings from menu bar + US -> UI: TCH: Press Institutional Settings + UI -> SW: ACT: Request Institutional Settings + group Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + alt Accepted + SW -> UI: ACT: Display all institutional settings + UI -> US: ACT: Display readonly settings + else #Pink Rejected + SW -> UI: ACT: Display rejection reason + UI -> US: ACT: Notify User + end + == Institutional Settings Screen (Service) == + US -> UI: TCH: Press Settings from menu bar + US -> UI: ACT: Log In as Service + US -> UI: TCH: Press Institutional Settings + UI -> SW: ACT: Request Institutional Settings + group Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + alt Accepted + SW -> UI: ACT: Display all Institutional settings + UI -> US: ACT: Display editable settings + US -> UI: TCH: Edit any setting displayed (min,mex,def) + US -> UI: TCH: Confirm Button + UI -> SW: ACT: Request Adjust Institutional Settings + group Adjust Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + alt Accepted + SW -> UI: ACT: Display all institutional settings + UI -> US: ACT: Notify User successful adjustment + else #Pink Rejected + SW -> UI: ACT: Display rejection reason for each parameter + UI -> US: ACT: Notify User + end + else #Pink Rejected + SW -> UI: ACT: Display rejection reason + UI -> US: ACT: Notify User + end + == Advanced Institutional Settings Screen == + US -> UI: TCH: Press Settings from menu bar + US -> UI: ACT: Log In as Service + US -> UI: TCH: Press Advanced Institutional Settings + group Advanced Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + alt Accepted + SW -> UI: ACT: Display all Advanced Institutional settings + UI -> US: ACT: Display editable settings + US -> UI: TCH: Edit any setting displayed (min,mex,def) + US -> UI: TCH: Confirm Button + UI -> SW: ACT: Request Adjust Advanced Institutional Settings + group Adjust Advanced Institutional Settings Request + SW --> TD: ... + TD --> SW: ... + end + alt Accepted + SW -> UI: ACT: Display all advanced institutional settings + UI -> US: ACT: Notify User successful adjustment + else #Pink Rejected + SW -> UI: ACT: Display rejection reason for each parameter + UI -> US: ACT: Notify User + end + else #Pink Rejected + SW -> UI: ACT: Display rejection reason + UI -> US: ACT: Notify User + end + == Institutional Settings Request == + SW -> TD: MSG: [xXX: #0] Request: Institutional Records + TD -> SW: MSG: [xXX: #60] (U32) mAccepted \ + \n (U32) mReason \ + \n (U32) mBloodFlowMin \ + \n (U32) mBloodFlowMax \ + \n (U32) mBloodFlowDef \ + \n (U32) mDialysateFlowMin \ + \n (U32) mDialysateFlowMax \ + \n (U32) mDialysateFlowDef \ + \n (U32) mTreatmentDurationMin \ + \n (U32) mTreatmentDurationMax \ + \n (U32) mTreatmentDurationDef \ + \n (F32) mHepBolusVolumeMin \ + \n (F32) mHepBolusVolumeMax \ + \n (F32) mHepBolusVolumeDef \ + \n (F32) mHepDispRateMin \ + \n (F32) mHepDispRateMax \ + \n (F32) mHepDispRateDef \ + \n (U32) mHepStopTimeMin \ + \n (U32) mHepStopTimeMax \ + \n (F32) mDialysateTempMin \ + \n (F32) mDialysateTempMax \ + \n (F32) mDialysateTempDef \ + \n (F32) mPotassiumMin \ + \n (F32) mPotassiumMax \ + \n (F32) mCalciumMin \ + \n (F32) mCalciumMax \ + \n (U32) mDialysateBicarbonateMin \ + \n (U32) mDialysateBicarbonateMax + TD -> SW: \n (U32) mDialysateBicarbonateDef \ + \n (U32) mDialysateSodiumMin \ + \n (U32) mDialysateSodiumMax \ + \n (U32) mDialysateSodiumDef \ + \n (U32) mFluidBolusVolumeMin \ + \n (U32) mFluidBolusVolumeMax \ + \n (U32) mFluidBolusVolumeDef \ + \n (U32) mArterialWindowMin \ + \n (U32) mArterialWindowMax \ + \n (U32) mArterialWindowDef \ + \n (U32) mVenousWindowMin \ + \n (U32) mVenousWindowMax \ + \n (U32) mVenousWindowDef \ + \n (U32) mVenousAsymmetricMin \ + \n (U32) mVenousAsymmetricMax \ + \n (U32) mVenousAsymmetricDef \ + \n (U32) mTMPWindowMin \ + \n (U32) mTMPWindowMax \ + \n (U32) mTMPWindowDef \ + \n (F32) mUltrafiltrationVolumeMin \ + \n (F32) mUltrafiltrationVolumeMax \ + \n (F32) mUltrafiltrationVolumeDef \ + \n (U32) mVitalsIntervalDef \ + \n (U32) mRinsebackVolumeMin \ + \n (U32) mRinsebackVolumeMax \ + \n (U32) mRinsebackVolumeDef \ + \n (U32) mRinsebackFlowRateMin \ + \n (U32) mRinsebackFlowRateMax + TD -> SW: \n (U32) mRinsebackFlowRateDef \ + \n (F32) mSubstitutionVolumeMin \ + \n (F32) mSubstitutionVolumeMax \ + \n (F32) mSubstitutionVolumeDef + == Institutional Settings Adjustment == + SW -> TD: MSG: [xXX: #58] Adjust Request \n (U32) mBloodFlowMin \ + \n (U32) mBloodFlowMax \ + \n (U32) mBloodFlowDef \ + \n (U32) mDialysateFlowMin \ + \n (U32) mDialysateFlowMax \ + \n (U32) mDialysateFlowDef \ + \n (U32) mTreatmentDurationMin \ + \n (U32) mTreatmentDurationMax \ + \n (U32) mTreatmentDurationDef \ + \n (F32) mHepBolusVolumeMin \ + \n (F32) mHepBolusVolumeMax \ + \n (F32) mHepBolusVolumeDef \ + \n (F32) mHepDispRateMin \ + \n (F32) mHepDispRateMax \ + \n (F32) mHepDispRateDef \ + \n (U32) mHepStopTimeMin \ + \n (U32) mHepStopTimeMax \ + \n (F32) mDialysateTempMin \ + \n (F32) mDialysateTempMax \ + \n (F32) mDialysateTempDef \ + \n (F32) mPotassiumMin \ + \n (F32) mPotassiumMax \ + \n (F32) mCalciumMin \ + \n (F32) mCalciumMax \ + \n (U32) mDialysateBicarbonateMin \ + \n (U32) mDialysateBicarbonateMax + SW -> TD: \n (U32) mDialysateBicarbonateDef \ + \n (U32) mDialysateSodiumMin \ + \n (U32) mDialysateSodiumMax \ + \n (U32) mDialysateSodiumDef \ + \n (U32) mFluidBolusVolumeMin \ + \n (U32) mFluidBolusVolumeMax \ + \n (U32) mFluidBolusVolumeDef \ + \n (U32) mArterialWindowMin \ + \n (U32) mArterialWindowMax \ + \n (U32) mArterialWindowDef \ + \n (U32) mVenousWindowMin \ + \n (U32) mVenousWindowMax \ + \n (U32) mVenousWindowDef \ + \n (U32) mVenousAsymmetricMin \ + \n (U32) mVenousAsymmetricMax \ + \n (U32) mVenousAsymmetricDef \ + \n (U32) mTMPWindowMin \ + \n (U32) mTMPWindowMax \ + \n (U32) mTMPWindowDef \ + \n (F32) mUltrafiltrationVolumeMin \ + \n (F32) mUltrafiltrationVolumeMax \ + \n (F32) mUltrafiltrationVolumeDef \ + \n (U32) mVitalsIntervalDef \ + \n (U32) mRinsebackVolumeMin \ + \n (U32) mRinsebackVolumeMax \ + \n (U32) mRinsebackVolumeDef \ + \n (U32) mRinsebackFlowRateMin \ + \n (U32) mRinsebackFlowRateMax + SW -> TD: \n (U32) mRinsebackFlowRateDef \ + \n (F32) mSubstitutionVolumeMin \ + \n (F32) mSubstitutionVolumeMax \ + \n (F32) mSubstitutionVolumeDef + TD -> SW: MSG: [xXX: #59] Rejection Reasons : \n(U32) mAccepted \ + \n (U32) mBloodFlowRateMinRejectionReason \ + \n (U32) mBloodFlowRateMaxRejectionReason \ + \n (U32) mBloodFlowRateDefRejectionReason \ + \n (U32) mDialysateFlowRateMinRejectionReason \ + \n (U32) mDialysateFlowRateMaxRejectionReason \ + \n (U32) mDialysateFlowRateDefRejectionReason \ + \n (U32) mTreatmentDurationMinRejectionReason \ + \n (U32) mTreatmentDurationMaxRejectionReason \ + \n (U32) mTreatmentDurationDefRejectionReason \ + \n (U32) mHeparinBolusVolumeMinRejectionReason \ + \n (U32) mHeparinBolusVolumeMaxRejectionReason \ + \n (U32) mHeparinBolusVolumeDefRejectionReason \ + \n (U32) mHeparinDispensingRateMinRejectionReason \ + \n (U32) mHeparinDispensingRateMaxRejectionReason \ + \n (U32) mHeparinDispensingRateDefRejectionReason \ + \n (U32) mHeparinStopTimeMinRejectionReason \ + \n (U32) mHeparinStopTimeMaxRejectionReason \ + \n (U32) mDialysateTempMinRejectionReason + TD -> SW: \n (U32) mDialysateTempMaxRejectionReason \ + \n (U32) mDialysateTempDefRejectionReason \ + \n (U32) mAcidConcentratePotassiumMinRejectionReason \ + \n (U32) mAcidConcentratePotassiumMaxRejectionReason \ + \n (U32) mAcidConcentrateCalciumMinRejectionReason \ + \n (U32) mAcidConcentrateCalciumMaxRejectionReason \ + \n (U32) mBicarbFinalDialysateCompositionMinRejectionReason \ + \n (U32) mBicarbFinalDialysateCompositionMaxRejectionReason \ + \n (U32) mBicarbFinalDialysateCompositionDefRejectionReason \ + \n (U32) mSodiumFinalDialysateCompositionMinRejectionReason \ + \n (U32) mSodiumFinalDialysateCompositionMaxRejectionReason \ + \n (U32) mSodiumFinalDialysateCompositionDefRejectionReason \ + \n (U32) mFluidBolusVolumeMinRejectionReason \ + \n (U32) mFluidBolusVolumeMaxRejectionReason \ + \n (U32) mFluidBolusVolumeDefRejectionReason + TD -> SW: \n (U32) mArterialPressureLimitWindowMinRejectionReason \ + \n (U32) mArterialPressureLimitWindowMaxRejectionReason \ + \n (U32) mArterialPressureLimitWindowDefRejectionReason \ + \n (U32) mVenousPressureLimitWindowMinRejectionReason \ + \n (U32) mVenousPressureLimitWindowMaxRejectionReason \ + \n (U32) mVenousPressureLimitWindowDefRejectionReason \ + \n (U32) mVenousPressureLimitAsymtrcMinRejectionReason \ + \n (U32) mVenousPressureLimitAsymtrcMaxRejectionReason \ + \n (U32) mVenousPressureLimitAsymtrcDefRejectionReason \ + \n (U32) mTrancembrncPressureLimitWindowMinRejectionReason \ + \n (U32) mTrancembrncPressureLimitWindowMaxRejectionReason \ + \n (U32) mTrancembrncPressureLimitWindowDefRejectionReason \ + \n (U32) mUltrafiltrationVolumeMinRejectionReason \ + \n (U32) mUltrafiltrationVolumeMaxRejectionReason \ + \n (U32) mUltrafiltrationVolumeDefRejectionReason + TD -> SW: \n (U32) mVitalsIntervalDefRejectionReason \ + \n (U32) mRinsebackVolumeMinRejectionReason \ + \n (U32) mRinsebackVolumeMaxRejectionReason \ + \n (U32) mRinsebackVolumeDefRejectionReason \ + \n (U32) mRinsebackFlowRateMinRejectionReason \ + \n (U32) mRinsebackFlowRateMaxRejectionReason \ + \n (U32) mRinsebackFlowRateDefRejectionReason \ + \n (U32) mSubstitutionVolumeMinRejectionReason \ + \n (U32) mSubstitutionVolumeMaxRejectionReason \ + \n (U32) mSubstitutionVolumeDefRejectionReason + == Advanced Institutional Settings Request == + SW -> TD: MSG: [xXX: #0] Request: Advanced Institutional Records + TD -> SW: MSG: [xXX: #24] (U32) mAccepted \ + \n (U32) mReason \ + \n (U32) mMinRORejectionRatioAlarmMin \ + \n (U32) mMinRORejectionRatioAlarmMax \ + \n (U32) mMinRORejectionRatioAlarmDef \ + \n (U32) mDisinfectionFrequencyMin \ + \n (U32) mDisinfectionFrequencyMax \ + \n (U32) mDisinfectionFrequencyDef \ + \n (U32) mDisinfectionParametersCycleTimeMin \ + \n (U32) mDisinfectionParametersCycleTimeMax \ + \n (U32) mDisinfectionParametersCycleTimeDef \ + \n (U32) mMaxBloodPumpStopTimeMin \ + \n (U32) mMaxBloodPumpStopTimeMax \ + \n (U32) mMaxBloodPumpStopTimeDef \ + \n (U32) mInletWaterCondLowThresholdMin \ + \n (U32) mInletWaterCondLowThresholdMax \ + \n (U32) mInletWaterCondLowThresholdDef \ + \n (U32) mInletWaterCondHighThresholdMin \ + \n (U32) mInletWaterCondHighThresholdMax \ + \n (U32) mInletWaterCondHighThresholdDef \ + \n (U32) mChlorineWaterSampleCheckMin \ + \n (U32) mChlorineWaterSampleCheckMax \ + \n (U32) mChlorineWaterSampleCheckDef \ + \n (U32) mWaterSampleTestResultRequiredDef + == Advanced Institutional Settings Adjustment == + SW -> TD: MSG: [xXX: #22] Request: Adjust Advanced Institutional Records \ + \n (U32) mMinRORejectionRatioAlarmMin \ + \n (U32) mMinRORejectionRatioAlarmMax \ + \n (U32) mMinRORejectionRatioAlarmDef \ + \n (U32) mDisinfectionFrequencyMin \ + \n (U32) mDisinfectionFrequencyMax \ + \n (U32) mDisinfectionFrequencyDef \ + \n (U32) mDisinfectionParametersCycleTimeMin \ + \n (U32) mDisinfectionParametersCycleTimeMax \ + \n (U32) mDisinfectionParametersCycleTimeDef \ + \n (U32) mMaxBloodPumpStopTimeMin \ + \n (U32) mMaxBloodPumpStopTimeMax \ + \n (U32) mMaxBloodPumpStopTimeDef \ + \n (U32) mInletWaterCondLowThresholdMin \ + \n (U32) mInletWaterCondLowThresholdMax \ + \n (U32) mInletWaterCondLowThresholdDef \ + \n (U32) mInletWaterCondHighThresholdMin \ + \n (U32) mInletWaterCondHighThresholdMax \ + \n (U32) mInletWaterCondHighThresholdDef \ + \n (U32) mChlorineWaterSampleCheckMin \ + \n (U32) mChlorineWaterSampleCheckMax \ + \n (U32) mChlorineWaterSampleCheckDef \ + \n (U32) mWaterSampleTestResultRequiredDef + TD -> SW: MSG: [xXX: #23] Rejection Reasons : \n(U32) mAccepted \ + \n (U32) mMinRORejectionRatioAlarmMaxRejectionReason \ + \n (U32) mMinRORejectionRatioAlarmMinRejectionReason \ + \n (U32) mMinRORejectionRatioAlarmDefRejectionReason \ + \n (U32) mDisinfectionFrequencyMinRejectionReason \ + \n (U32) mDisinfectionFrequencyMaxRejectionReason \ + \n (U32) mDisinfectionFrequencyDefRejectionReason \ + \n (U32) mDisinfectionParametersCycleTimeMinRejectionReason \ + \n (U32) mDisinfectionParametersCycleTimeMaxRejectionReason \ + \n (U32) mDisinfectionParametersCycleTimeDefRejectionReason \ + \n (U32) mMaxBloodPumpStopTimeMinRejectionReason \ + \n (U32) mMaxBloodPumpStopTimeMaxRejectionReason \ + \n (U32) mMaxBloodPumpStopTimeDefRejectionReason + TD -> SW: \n (U32) mInletWaterCondLowThresholdMinRejectionReason \ + \n (U32) mInletWaterCondLowThresholdMaxRejectionReason \ + \n (U32) mInletWaterCondLowThresholdDefRejectionReason \ + \n (U32) mInletWaterCondHighThresholdMinRejectionReason \ + \n (U32) mInletWaterCondHighThresholdMaxRejectionReason \ + \n (U32) mInletWaterCondHighThresholdDefRejectionReason \ + \n (U32) mChlorineWaterSampleCheckMinRejectionReason \ + \n (U32) mChlorineWaterSampleCheckMaxRejectionReason \ + \n (U32) mChlorineWaterSampleCheckDefRejectionReason \ + \n (U32) mWaterSampleTestResultRequiredDefRejectionReason +@enduml \ No newline at end of file Index: etc/reports/alarms/AlarmMapping.csv =================================================================== diff -u -r712f4c8a1b2382919300895b4422b831471044a3 -rc43d24c50f4344348d36d8ae9273797f4557356a --- etc/reports/alarms/AlarmMapping.csv (.../AlarmMapping.csv) (revision 712f4c8a1b2382919300895b4422b831471044a3) +++ etc/reports/alarms/AlarmMapping.csv (.../AlarmMapping.csv) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -1,7 +1,7 @@ 0,"Indication for when no alarms is a possible situation." 1,"TD Software fault.\nSoftware found itself in an unexpected state." 2,"DD software fault.\nSoftware found itself in an unexpected state." - 3,"RO software fault.\nSoftware found itself in an unexpected state." + 3,"FP software fault.\nSoftware found itself in an unexpected state." 4,"TD FPGA POST failure." 5,"TD Watchdog POST failure." 6,"TD UI communication POST failure.\nUI failed to communicate within a reasonable time after power up." @@ -17,7 +17,7 @@ 16,"TD watchdog expired." 17,"DD watchdog expired." 18,"DD too many bad communications CRC." - 19,"DD didn't get ACK on message to RO that required acknowledgment." + 19,"DD didn't get ACK on message to FP that required acknowledgment." 20,"DD didn't get ACK on message to TD that required acknowledgment." 21,"DD FPGA POST failure." 22,"DD processor clock speed checks against FPGA clock failure." @@ -72,32 +72,32 @@ 71,"DD trimmer heater is On when no fluid is present." 72,"DD water inlet input pressure sensor freshness/error timeout fault." 73,"DD water inlet output pressure sensor freshness/error timeout fault." - 74,"DD inlet water pressure input low range." - 75,"DD inlet water pressure input high range." - 76,"DD inlet water pressure output low range." - 77,"DD inlet water pressure output high range." + 74,"DD UF pump speed control error." + 75,"DD spent chamber state 1 fill pressure out of range." + 76,"DD spent chamber state 2 fill pressure out of range." + 77,"DD spent chamber fill timeout fault." 78,"TD air trap fill timeout alarm during treatment." 79,"TD air trap illegal levels." 80,"TD pinch valve fault." 81,"TD pinch valve homing fault." 82,"TD pinch valve transition timeout." - 83,"RO can message not acked by DD fault." - 84,"RO FPGA communication timeout." - 85,"RO too many bad crcs." - 86,"RO valve control failure." + 83,"FP can message not acked by DD fault." + 84,"FP FPGA communication timeout." + 85,"FP too many bad crcs." + 86,"FP valve control failure." 87,"DD balance chamber state1 fill start pressure not in range." 88,"DD balance chamber state1 fill end pressure not in range." 89,"DD balance chamber state2 fill start pressure not in range." 90,"DD balance chamber state2 fill end pressure not in range." 91,"DD generate dialysate hydraulics chamber ngative pressure out of range." - 92,"Available alarms." + 92,"DD spent chamber fill timeout fault." 93,"Available alarms." 94,"DD balance chamber state1 fill initiated and pressure drop is not in range." 95,"DD balance chamber state2 fill initiated and pressure drop is not in range." 96,"TD treatment paused by user." 97,"DD D74 bicarb conductivity sensor freshness/error timeout fault." - 98,"Available alarms." - 99,"Available alarms." + 98,"TD blood sitting too long warning." + 99,"TD blood sitting too long alarm; no resume; no rinseback." 100,"TD communication timeout." 101,"UI POST OS version compatibility failure." 102,"UI POST Application Integrity (Sha256Sum) failure." @@ -130,4 +130,33 @@ 129,"UI Reserved failure." 130,"UI Reserved failure." 131,"TD Battery Low warning." - 132,"Number of alarms." + 132,"DD dialysate temperature above safety." + 133,"DD dialysate temperature high." + 134,"DD dialysate temperature low." + 135,"FP Pressure relief valve low." + 136,"FP Pressure relief valve high." + 137,"FP Power budget exceeded." + 138,"FP flow rate low." + 139,"FP inlet water temperature low." + 140,"FP inlet water temperature high." + 141,"FP inlet pressure low." + 142,"FP inlet pressure high." + 143,"FP inlet conductivity high." + 144,"FP inlet conductivty low." + 145,"FP pump inlet pressure high." + 146,"FP pump outlet conductivity high." + 147,"FP pump inlet conductivity high." + 148,"FP rejection ratio low." + 149,"FP inlet pressure regulator out of range." + 150,"FP filter health pressure out of range." + 151,"FP membrane flush timeout." + 152,"FP membrane flush integrated out of range." + 153,"FP tank full time out alarm." + 154,"DD dialysate temperature sensors out of range." + 155,"DD blood leak detected." + 156,"DD blood leak invalid calibration record." + 157,"DD blood leak sensor embedded mode failure." + 158,"DD blood leak sensor set point failure." + 159,"DD blood leak sensor recovering please wait." + 160,"FP tank fill time out alarm." + 161,"Number of alarms." Index: etc/reports/alarms/AlarmMapping.py =================================================================== diff -u -r712f4c8a1b2382919300895b4422b831471044a3 -rc43d24c50f4344348d36d8ae9273797f4557356a --- etc/reports/alarms/AlarmMapping.py (.../AlarmMapping.py) (revision 712f4c8a1b2382919300895b4422b831471044a3) +++ etc/reports/alarms/AlarmMapping.py (.../AlarmMapping.py) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -2,7 +2,7 @@ 0 : "Indication for when no alarms is a possible situation." 1 : "TD Software fault.\nSoftware found itself in an unexpected state." 2 : "DD software fault.\nSoftware found itself in an unexpected state." - 3 : "RO software fault.\nSoftware found itself in an unexpected state." + 3 : "FP software fault.\nSoftware found itself in an unexpected state." 4 : "TD FPGA POST failure." 5 : "TD Watchdog POST failure." 6 : "TD UI communication POST failure.\nUI failed to communicate within a reasonable time after power up." @@ -18,7 +18,7 @@ 16 : "TD watchdog expired." 17 : "DD watchdog expired." 18 : "DD too many bad communications CRC." - 19 : "DD didn't get ACK on message to RO that required acknowledgment." + 19 : "DD didn't get ACK on message to FP that required acknowledgment." 20 : "DD didn't get ACK on message to TD that required acknowledgment." 21 : "DD FPGA POST failure." 22 : "DD processor clock speed checks against FPGA clock failure." @@ -73,32 +73,32 @@ 71 : "DD trimmer heater is On when no fluid is present." 72 : "DD water inlet input pressure sensor freshness/error timeout fault." 73 : "DD water inlet output pressure sensor freshness/error timeout fault." - 74 : "DD inlet water pressure input low range." - 75 : "DD inlet water pressure input high range." - 76 : "DD inlet water pressure output low range." - 77 : "DD inlet water pressure output high range." + 74 : "DD UF pump speed control error." + 75 : "DD spent chamber state 1 fill pressure out of range." + 76 : "DD spent chamber state 2 fill pressure out of range." + 77 : "DD spent chamber fill timeout fault." 78 : "TD air trap fill timeout alarm during treatment." 79 : "TD air trap illegal levels." 80 : "TD pinch valve fault." 81 : "TD pinch valve homing fault." 82 : "TD pinch valve transition timeout." - 83 : "RO can message not acked by DD fault." - 84 : "RO FPGA communication timeout." - 85 : "RO too many bad crcs." - 86 : "RO valve control failure." + 83 : "FP can message not acked by DD fault." + 84 : "FP FPGA communication timeout." + 85 : "FP too many bad crcs." + 86 : "FP valve control failure." 87 : "DD balance chamber state1 fill start pressure not in range." 88 : "DD balance chamber state1 fill end pressure not in range." 89 : "DD balance chamber state2 fill start pressure not in range." 90 : "DD balance chamber state2 fill end pressure not in range." 91 : "DD generate dialysate hydraulics chamber ngative pressure out of range." - 92 : "Available alarms." + 92 : "DD spent chamber fill timeout fault." 93 : "Available alarms." 94 : "DD balance chamber state1 fill initiated and pressure drop is not in range." 95 : "DD balance chamber state2 fill initiated and pressure drop is not in range." 96 : "TD treatment paused by user." 97 : "DD D74 bicarb conductivity sensor freshness/error timeout fault." - 98 : "Available alarms." - 99 : "Available alarms." + 98 : "TD blood sitting too long warning." + 99 : "TD blood sitting too long alarm; no resume; no rinseback." 100 : "TD communication timeout." 101 : "UI POST OS version compatibility failure." 102 : "UI POST Application Integrity (Sha256Sum) failure." @@ -131,7 +131,36 @@ 129 : "UI Reserved failure." 130 : "UI Reserved failure." 131 : "TD Battery Low warning." - 132 : "Number of alarms." + 132 : "DD dialysate temperature above safety." + 133 : "DD dialysate temperature high." + 134 : "DD dialysate temperature low." + 135 : "FP Pressure relief valve low." + 136 : "FP Pressure relief valve high." + 137 : "FP Power budget exceeded." + 138 : "FP flow rate low." + 139 : "FP inlet water temperature low." + 140 : "FP inlet water temperature high." + 141 : "FP inlet pressure low." + 142 : "FP inlet pressure high." + 143 : "FP inlet conductivity high." + 144 : "FP inlet conductivty low." + 145 : "FP pump inlet pressure high." + 146 : "FP pump outlet conductivity high." + 147 : "FP pump inlet conductivity high." + 148 : "FP rejection ratio low." + 149 : "FP inlet pressure regulator out of range." + 150 : "FP filter health pressure out of range." + 151 : "FP membrane flush timeout." + 152 : "FP membrane flush integrated out of range." + 153 : "FP tank full time out alarm." + 154 : "DD dialysate temperature sensors out of range." + 155 : "DD blood leak detected." + 156 : "DD blood leak invalid calibration record." + 157 : "DD blood leak sensor embedded mode failure." + 158 : "DD blood leak sensor set point failure." + 159 : "DD blood leak sensor recovering please wait." + 160 : "FP tank fill time out alarm." + 161 : "Number of alarms." } # dictionary of rejection reason from application source code. Index: leahi.pro =================================================================== diff -u -rcb9c48c7c307690dcafcfd16ef412fe660291692 -rc43d24c50f4344348d36d8ae9273797f4557356a --- leahi.pro (.../leahi.pro) (revision cb9c48c7c307690dcafcfd16ef412fe660291692) +++ leahi.pro (.../leahi.pro) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 \ @@ -239,6 +243,12 @@ sources/view/td/adjustment/treatment/VTreatmentAdjustmentVitals.h \ \ # ---------- Models - TD - Adjustment - In-Treatment 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 sources/model/confirm/MDuetConfirmHDi.h \ \ # ---------- Models - POST @@ -255,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 \ @@ -381,6 +390,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 \ @@ -501,9 +511,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 \ @@ -571,7 +583,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 \ @@ -584,6 +595,12 @@ sources/model/hd/data/posttreatment/MPostTreatmentStatesData.cpp \ \ # ---------- Models - TD - Adjustment - In-Treatment 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 sources/model/hd/adjustment/MAdjustPowerOff.cpp \ \ # ---------- Models - HD - Adjustment - Settings @@ -673,6 +690,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 \ @@ -706,6 +725,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.pro.user =================================================================== diff -u -r712f4c8a1b2382919300895b4422b831471044a3 -rc43d24c50f4344348d36d8ae9273797f4557356a --- leahi.pro.user (.../leahi.pro.user) (revision 712f4c8a1b2382919300895b4422b831471044a3) +++ leahi.pro.user (.../leahi.pro.user) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -1,6 +1,6 @@ - + EnvironmentId @@ -13,8 +13,8 @@ ProjectExplorer.Project.EditorSettings - true true + false true Cpp @@ -33,12 +33,10 @@ false 4 false - 0 80 true true 1 - 0 false true false @@ -80,7 +78,6 @@ true Builtin.DefaultTidyAndClazy 1 - false /home/denali/Public/luis/application/leahi.pro @@ -101,7 +98,7 @@ Desktop Qt 5.15.10 GCC 64bit Desktop Qt 5.15.10 GCC 64bit qt.qt5.51510.gcc_64_kit - 0 + 1 0 0 @@ -165,6 +162,7 @@ true + "" 0 %{sourceDir}/imake.sh %{sourceDir} ProjectExplorer.ProcessStep @@ -227,20 +225,22 @@ 1 + true true + true 2 - false leahi - Qt4ProjectManager.Qt4RunConfiguration: + Qt4ProjectManager.Qt4RunConfiguration:/home/denali/Public/luis/application/leahi.pro /home/denali/Public/luis/application/leahi.pro - true + false true true + false true %{ActiveProject:RunConfig:Executable:Path} - /home/denali/Public/tmp/build/leahi-Qt_5_15_10_GCC-Debug + /home/denali/Public/tmp/build/leahi-Qt_5_15_10_GCC-Release 1 @@ -397,18 +397,20 @@ 1 + true true + true 1 - false leahi (on %{Device:Name}) - RemoteLinuxRunConfiguration: + RemoteLinuxRunConfiguration:/home/denali/Public/luis/application/leahi.pro /home/denali/Public/luis/application/leahi.pro - false 1 + false true true + false true :0 Index: leahi.qrc =================================================================== diff -u -rf2aa3ee850de1023cfc011b845ed0364d251b749 -rc43d24c50f4344348d36d8ae9273797f4557356a --- leahi.qrc (.../leahi.qrc) (revision f2aa3ee850de1023cfc011b845ed0364d251b749) +++ leahi.qrc (.../leahi.qrc) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -27,6 +27,9 @@ sources/gui/qml/pages/settings/SettingsDecommission.qml 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/pages/settings/SettingsFeatureConfigurations.qml sources/gui/qml/dialogs/ConfirmDialog.qml @@ -176,6 +179,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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- main.cpp (.../main.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ main.cpp (.../main.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/ApplicationController.cpp (.../ApplicationController.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/ApplicationController.h (.../ApplicationController.h) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/ApplicationController.h (.../ApplicationController.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rcb9c48c7c307690dcafcfd16ef412fe660291692 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision cb9c48c7c307690dcafcfd16ef412fe660291692) +++ sources/canbus/MessageDispatcher.cpp (.../MessageDispatcher.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rc1d0546e2d1a51ff919b2172ce647003359f0853 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/canbus/MessageDispatcher.h (.../MessageDispatcher.h) (revision c1d0546e2d1a51ff919b2172ce647003359f0853) +++ sources/canbus/MessageDispatcher.h (.../MessageDispatcher.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -160,6 +160,9 @@ GuiActionType::ID_AdjustDGDateTimeReq , 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 -rcb9c48c7c307690dcafcfd16ef412fe660291692 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision cb9c48c7c307690dcafcfd16ef412fe660291692) +++ sources/canbus/MessageGlobals.h (.../MessageGlobals.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -r9048646630717f980a852df54349805ba63773e0 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 9048646630717f980a852df54349805ba63773e0) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -230,7 +230,10 @@ case Gui::GuiActionType::ID_AdjustDGDateTimeReq : INTERPRET_TRANSMIT_MESSAGE(AdjustDGDateTimeRequestData ); 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_AdjustHDDateTimeRsp : ok = notify(vMessage, vData, Gui::GuiActionType::ID_AdjustHDDateTimeRsp ); 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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision 9048646630717f980a852df54349805ba63773e0) +++ sources/gui/GuiGlobals.cpp (.../GuiGlobals.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rcb9c48c7c307690dcafcfd16ef412fe660291692 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision cb9c48c7c307690dcafcfd16ef412fe660291692) +++ sources/gui/GuiGlobals.h (.../GuiGlobals.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 = 0xCF00, // 207 UI -> TD request institutional record + ID_InstitutionalRecordRsp = 0xD000, // 208 TD -> UI response institutional record + ID_AdjustInstitutionalRecordReq = 0xD100, // 207 UI -> TD request institutional record + ID_AdjustInstitutionalRecordRsp = 0xD200, // 208 TD -> UI response institutional record + // Advanced Institutional record request and response + ID_AdvancedInstitutionalRecordReq = 0xD300, // 207 UI -> TD request institutional record + ID_AdvancedInstitutionalRecordRsp = 0xD400, // 208 TD -> UI response institutional record + ID_AdjustAdvancedInstitutionalRecordReq = 0xD500, // 207 UI -> TD request institutional record + ID_AdjustAdvancedInstitutionalRecordRsp = 0xD600, // 208 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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/compounds/ValueAdjuster.qml (.../ValueAdjuster.qml) (revision b16fd955f65d83321decdc54bd3d5695fc81c32c) +++ sources/gui/qml/compounds/ValueAdjuster.qml (.../ValueAdjuster.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -r0498a13bb66d3a3b0814521d794e737b5dd9a372 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/dialogs/AcidConcentrateAdjustment.qml (.../AcidConcentrateAdjustment.qml) (revision 0498a13bb66d3a3b0814521d794e737b5dd9a372) +++ sources/gui/qml/dialogs/AcidConcentrateAdjustment.qml (.../AcidConcentrateAdjustment.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -77,8 +77,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 @@ -102,8 +102,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 -rcb9c48c7c307690dcafcfd16ef412fe660291692 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision cb9c48c7c307690dcafcfd16ef412fe660291692) +++ sources/gui/qml/globals/Colors.qml (.../Colors.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -148,6 +148,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" @@ -156,6 +157,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 -r8672e62f205231b08dd7d4a4f6f7f3a60b2c677b -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision 8672e62f205231b08dd7d4a4f6f7f3a60b2c677b) +++ sources/gui/qml/globals/Variables.qml (.../Variables.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -157,7 +157,6 @@ readonly property int settingsNotificationMargin : 10 readonly property int settingsContentSidesMargin : headerButtonsMargin 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 @@ -192,6 +191,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 @@ -249,6 +249,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 -rb12853c86ef9e517667516dc3e47bca07349cedf -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/main.qml (.../main.qml) (revision b12853c86ef9e517667516dc3e47bca07349cedf) +++ sources/gui/qml/main.qml (.../main.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 @@ -175,6 +178,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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/pages/disinfect/DisinfectStack.qml (.../DisinfectStack.qml) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/gui/qml/pages/disinfect/DisinfectStack.qml (.../DisinfectStack.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -r24f141c96bdd5d4043e6ff05ea7ad962f63faabc -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml (.../PreTreatmentCreateContent.qml) (revision 24f141c96bdd5d4043e6ff05ea7ad962f63faabc) +++ sources/gui/qml/pages/pretreatment/create/PreTreatmentCreateContent.qml (.../PreTreatmentCreateContent.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -255,10 +255,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 } @@ -276,10 +276,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 } @@ -297,10 +297,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 } @@ -321,10 +321,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 @@ -344,10 +344,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 @@ -383,7 +383,7 @@ contentItem : ValueAdjuster { id: _heparinStopTimeControl editable : _root.editingEnabled - minimum : vTreatmentRanges.heparinStopTimeMin + minimum : vInstitutionalRecord.heparinStopTimeMin maximum : _durationControl.value step : _durationControl.step defaultValue : _durationControl.value @@ -533,10 +533,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 @@ -549,16 +549,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 } 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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/pages/settings/SettingsBase.qml (.../SettingsBase.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/settings/SettingsBase.qml (.../SettingsBase.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -104,6 +104,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/SettingsFeatureConfigurations.qml =================================================================== diff -u --- sources/gui/qml/pages/settings/SettingsFeatureConfigurations.qml (revision 0) +++ sources/gui/qml/pages/settings/SettingsFeatureConfigurations.qml (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -0,0 +1,74 @@ +/*! + * + * Copyright (c) 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 SettingsFeatureConfigurations.qml + * \author (last) Nico Ramirez + * \date (last) 10-Nov-2025 + * \author (original) Nico Ramirez + * \date (original) 10-Nov-2025 + * + */ + +// Qt +import QtQuick 2.12 + + +// Qml imports +import "qrc:/globals" +import "qrc:/components" +import "qrc:/compounds" + +/*! + * \brief SettingsFeatureConfigurations is the screen + * which enables the Ro Water Input + */ +SettingsBase { id: _root + itemIndex : SettingsStack.FeatureConfigurations + + readonly property int diameter : 85 + + confirmVisible : false + + contentItem: Column { + spacing : 25 + + LabelUnitContainer { id: _integratedBPCuff + anchors.horizontalCenter : parent.horizontalCenter + width : Variables.adjustmentLabelUnitContainerWidth + height : Variables.adjustmentLabelUnitContainerHeight + showUnit : false + text : qsTr("Integrated BP Cuff") + contentArea.anchors.leftMargin : width * 0.75 + + contentItem: BaseSwitch { id: _integratedBPCuffSwitch + checked : vSettings.integratedBPCuff + + onClicked: { + vSettings.integratedBPCuff = _integratedBPCuffSwitch.checked + } + } + } + + LabelUnitContainer { id: _heparinSyringePump + anchors.horizontalCenter : parent.horizontalCenter + width : Variables.adjustmentLabelUnitContainerWidth + height : Variables.adjustmentLabelUnitContainerHeight + showUnit : false + text : qsTr("Heparin Syringe Pump") + contentArea.anchors.leftMargin : width * 0.75 + + contentItem: BaseSwitch { id: _heparinSyringePumpSwitch + checked : vSettings.heparinSyringePump + + onClicked: { + vSettings.heparinSyringePump = _heparinSyringePumpSwitch.checked + } + } + } + } +} + Index: sources/gui/qml/pages/settings/SettingsHome.qml =================================================================== diff -u -ra58f91b077c8131bea3dbde0fc338adb113fc9f3 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/pages/settings/SettingsHome.qml (.../SettingsHome.qml) (revision a58f91b077c8131bea3dbde0fc338adb113fc9f3) +++ sources/gui/qml/pages/settings/SettingsHome.qml (.../SettingsHome.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -37,12 +37,22 @@ signal itemClicked(int vIndex) - TouchGrid { id: _settingItems - anchors.centerIn: _root - onItemClicked : _root.itemClicked(vIndex) - rowCount : _root.rowCount - colCount : _root.colCount - itemWidth : 325 + contentArea.anchors.topMargin: serviceMode ? Variables.defaultMargin * 2 : 0 + + contentItem: TouchGrid { id: _settingItems + onItemClicked : _root.itemClicked(vIndex) + rowCount : _root.rowCount + colCount : _root.colCount + itemWidth : _root.delegateWidth + itemHeight : _root.delegateHeight + lineThickness : 0 + arrowWidth : Variables.iconButtonSize + arrowHeight : Variables.iconButtonSize + arrowRightMargin : Variables.defaultMargin + delegateColor : Colors.panelBackgroundColor + delegateBorderWidth : 1 + delegateBorderColor : Colors.panelBorderColor + itemsHasIndent : Array(itemsText.length).fill(true) // sets all to true } // The Main menu need to hide in case we have any alarm, if not the menu is covered by keyboard but the alram does not. Index: sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml (.../SettingsInstitutionalRecord.qml) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/gui/qml/pages/settings/SettingsInstitutionalRecord.qml (.../SettingsInstitutionalRecord.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -1,53 +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 + contentArea.anchors.rightMargin : 0 + confirmVisible : serviceMode - itemIndex : SettingsStack.InstitutionalRecord + property bool canEdit : serviceMode + property var title : vInstitutionalRecord.parametersTitle + property var unit : vInstitutionalRecord.parametersUnit - confirmVisible : false - TouchGrid { - anchors.top : parent.top - anchors.topMargin : 50 - anchors.horizontalCenter: parent.horizontalCenter + readonly property int min : 0 + readonly property int max : 1 + readonly property int def : 2 + readonly property int defCustom : 3 - 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 none : -1 - itemsValueLeftMargin: 325 - itemsUnitLeftMargin : 465 - itemsValue : vAdjustmentInstitutionalRecord.parametersText - itemsUnit : vAdjustmentInstitutionalRecord.parametersUnit - itemsText : vAdjustmentInstitutionalRecord.parametersTitle + 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 -rf2e4eba6e85c5d36537be782926f23cc9dc01037 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision f2e4eba6e85c5d36537be782926f23cc9dc01037) +++ sources/gui/qml/pages/settings/SettingsStack.qml (.../SettingsStack.qml) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -70,50 +70,57 @@ readonly property bool visibleDeviceConfiguration : onlyManufacturing && loggedIn readonly property bool visibleDeviceRegistration : onlyManufacturing && loggedIn readonly property bool visibleInstitutionalRecord : true - readonly property bool visibleLocalization : true // loggedIn TODO: + readonly property bool visibleAdvancedInstitutional : loggedIn + readonly property bool visibleFeatureConfigurations : loggedIn + readonly property bool visibleLocalization : loggedIn + readonly property bool visibleUserModes : loggedIn enum ItemsIndex { - Information , - VolumeBrightness , - WiFi , - Bluetooth , - 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 , + FeatureConfigurations , + UserMode } property var itemsText : [ - qsTr("Information" ), // Information - qsTr("Volume And Brightness" ), // VolumeBrightness - qsTr("Wi-Fi" ), // WiFi - qsTr("Bluetooth Cuff" ), // Bluetooth - qsTr("DG 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("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("Feature Configurations" ), // FeatureConfigurations + qsTr("User Modes" ), // User Modes ] property var itemsEnabled : [ true , // Information @@ -156,6 +163,9 @@ visibleFactoryReset , // FactoryReset visibleDecommission , // Decommission visibleInstitutionalRecord , // Institutional Record + visibleAdvancedInstitutional , // AdvancedInstitutional + visibleFeatureConfigurations , // FeatureConfigurations + visibleUserModes , // User Modes ] SettingsHome { id : _settingsHome @@ -250,10 +260,19 @@ break case SettingsStack.InstitutionalRecord: - vAdjustmentInstitutionalRecord.doAdjustment() + vInstitutionalRecord.doAdjustment() push( _settingsInstitutionalRecord ) break + case SettingsStack.AdvancedInstitutional: + vAdvancedInstitutionalRecord.doAdjustment() + push( _settingsAdvancedInstitutional ) + break + + case SettingsStack.FeatureConfigurations: + push( _settingsFeatureConfigurations ) + break + case SettingsStack.Localization: push( _settingLocalization ) break @@ -265,23 +284,25 @@ } } - SettingsInformation { id: _settingsInformation } - SettingsVolumeBrightness { id: _settingsVolumeBrightness } - SettingsWiFi { id: _settingsWiFi } - SettingsBluetoothCuff { id: _settingsBluetooth } - 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 } + 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} + SettingsFeatureConfigurations { id: _settingsFeatureConfigurations} + SettingsLocalization { id: _settingLocalization } + SettingsUserMode { id: _settingUserMode } function gotoServiceMode( vservice ) { //DEBUG console.log (" 0 ---------- ", _GuiView.manufactMode, _GuiView.manufactSetup, vservice, stackView.initialItem, stackView.currentItem, stackView.depth) @@ -305,17 +326,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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/main.h (.../main.h) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/main.h (.../main.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -r9048646630717f980a852df54349805ba63773e0 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/model/MModel.h (.../MModel.h) (revision 9048646630717f980a852df54349805ba63773e0) +++ sources/model/MModel.h (.../MModel.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -97,7 +97,10 @@ #include "MAdjustHDDateTimeResponse.h" #include "MAdjustDGDateTimeResponse.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" @@ -513,6 +516,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 ) \ @@ -671,7 +680,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 */ \ @@ -730,6 +741,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 ) \ @@ -891,8 +905,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 */ \ @@ -951,6 +967,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 ) \ @@ -1012,6 +1031,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 ) \ @@ -1073,6 +1095,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 ) \ @@ -1218,8 +1243,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 c43d24c50f4344348d36d8ae9273797f4557356a 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 c43d24c50f4344348d36d8ae9273797f4557356a 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 -r712f4c8a1b2382919300895b4422b831471044a3 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/model/hd/adjustment/settings/MAdjustHDRequests.h (.../MAdjustHDRequests.h) (revision 712f4c8a1b2382919300895b4422b831471044a3) +++ sources/model/hd/adjustment/settings/MAdjustHDRequests.h (.../MAdjustHDRequests.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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:: MAdjustHDDateTimeReq AdjustHDDateTimeRequestData; -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0xD000| 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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0xD000| 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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0xD000| 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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 | + * |:----:|:------:|:----:|:---:|:---:|:----:|:-----------:| + * |0xD000| 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/storage/Logger.cpp =================================================================== diff -u -rd862dfcd402206e33b314c458e41c13b684a4565 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/storage/Logger.cpp (.../Logger.cpp) (revision d862dfcd402206e33b314c458e41c13b684a4565) +++ sources/storage/Logger.cpp (.../Logger.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -21,9 +21,9 @@ #include #include #include -#include // Project +#include #include "ApplicationController.h" #include "DeviceController.h" #include "Threads.h" Index: sources/view/VView.h =================================================================== diff -u -r9048646630717f980a852df54349805ba63773e0 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/VView.h (.../VView.h) (revision 9048646630717f980a852df54349805ba63773e0) +++ sources/view/VView.h (.../VView.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rde099919f262c3429cb0592ef71deb6a16e92892 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/hd/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision de099919f262c3429cb0592ef71deb6a16e92892) +++ sources/view/hd/data/VTreatmentRanges.cpp (.../VTreatmentRanges.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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,12 +181,20 @@ 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(); 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 ); @@ -223,13 +241,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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/hd/data/VTreatmentRanges.h (.../VTreatmentRanges.h) (revision de099919f262c3429cb0592ef71deb6a16e92892) +++ sources/view/hd/data/VTreatmentRanges.h (.../VTreatmentRanges.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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) @@ -71,8 +77,19 @@ RANGESET( qint32 , arterialPressureLimitWindow , 0) 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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/settings/VAdjustmentInstitutionalRecord.cpp (.../VAdjustmentInstitutionalRecord.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/view/settings/VAdjustmentInstitutionalRecord.cpp (.../VAdjustmentInstitutionalRecord.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/settings/VAdjustmentInstitutionalRecord.h (.../VAdjustmentInstitutionalRecord.h) (revision a58f91b077c8131bea3dbde0fc338adb113fc9f3) +++ sources/view/settings/VAdjustmentInstitutionalRecord.h (.../VAdjustmentInstitutionalRecord.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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 c43d24c50f4344348d36d8ae9273797f4557356a) @@ -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); +}; +} Index: sources/view/settings/VSettings.cpp =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/settings/VSettings.cpp (.../VSettings.cpp) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/view/settings/VSettings.cpp (.../VSettings.cpp) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -37,9 +37,12 @@ { static bool init = false; if ( init ) return; - PROPERTY_POST_CONNECTION(VSettings, servicePass ); - PROPERTY_POST_CONNECTION(VSettings, alarmVolume ); - PROPERTY_POST_CONNECTION(VSettings, roWaterMode ); + PROPERTY_POST_CONNECTION(VSettings, servicePass ); + PROPERTY_POST_CONNECTION(VSettings, alarmVolume ); + PROPERTY_POST_CONNECTION(VSettings, roWaterMode ); + PROPERTY_POST_CONNECTION(VSettings, userMode ); + PROPERTY_POST_CONNECTION(VSettings, integratedBPCuff ); + PROPERTY_POST_CONNECTION(VSettings, heparinSyringePump ); init = true; } @@ -60,6 +63,30 @@ } } +void VSettings::userMode_post(const bool &vuserMode_post) { + //TODO The Settings shall be the Singleton SettingsController and modify the MSettings like the others. + if ( Storage::Settings::save(userModeGroup(), userModeKey(), QString::number(vuserMode_post)) != 0 ) { + userMode(false); + // FIXME: Notify UI with a message + } +} + +void VSettings::integratedBPCuff_post(const bool &vintegratedBPCuff_post) { + //TODO The Settings shall be the Singleton SettingsController and modify the MSettings like the others. + if ( Storage::Settings::save(integratedBPCuffGroup(), integratedBPCuffKey(), QString::number(vintegratedBPCuff_post)) != 0 ) { + integratedBPCuff(false); + // FIXME: Notify UI with a message + } +} + +void VSettings::heparinSyringePump_post(const bool &vheparinSyringePump_post) { + //TODO The Settings shall be the Singleton SettingsController and modify the MSettings like the others. + if ( Storage::Settings::save(heparinSyringePumpGroup(), heparinSyringePumpKey(), QString::number(vheparinSyringePump_post)) != 0 ) { + heparinSyringePump(false); + // FIXME: Notify UI with a message + } +} + void VSettings::alarmVolume_post(const quint8 &valarmVolume) { //TODO The Settings shall be the Singleton SettingsController and modify the MSettings like the others. Storage::Settings::save(alarmVolumeGroup(), alarmVolumeKey(), QString::number(valarmVolume)); @@ -96,6 +123,24 @@ keyValue[key] = mRoWaterMode ; roWaterMode ( mRoWaterMode); } + else if ( isuserMode (category, group, key) ) { + bool mUserMode; + mUserMode = _Settings.value(category, group, key).toBool (); + keyValue[key] = mUserMode ; + userMode ( mUserMode); + } + else if ( isintegratedBPCuff (category, group, key) ) { + bool mIntegratedBPCuff; + mIntegratedBPCuff = _Settings.value(category, group, key).toBool (); + keyValue[key] = mIntegratedBPCuff ; + integratedBPCuff ( mIntegratedBPCuff ); + } + else if ( isheparinSyringePump (category, group, key) ) { + bool mHeparinSyringePump; + mHeparinSyringePump = _Settings.value(category, group, key).toBool (); + keyValue[key] = mHeparinSyringePump ; + heparinSyringePump ( mHeparinSyringePump ); + } else if ( isalarmVolume (category, group, key) ) { quint8 mAlarmVolume; mAlarmVolume = _Settings.value(category, group, key).toInt (); // returns 0 if fails, so no error checking needed. Index: sources/view/settings/VSettings.h =================================================================== diff -u -ra5760947d3ed0d2748ba023a1c25e3c6aa0b1de1 -rc43d24c50f4344348d36d8ae9273797f4557356a --- sources/view/settings/VSettings.h (.../VSettings.h) (revision a5760947d3ed0d2748ba023a1c25e3c6aa0b1de1) +++ sources/view/settings/VSettings.h (.../VSettings.h) (revision c43d24c50f4344348d36d8ae9273797f4557356a) @@ -65,9 +65,12 @@ PROPERTY(bool , isDefaultServicePassword , false ) - SETTINGS(QString , servicePass , "" , Storage::Settings_Category_SettingsSystem , "Service" , "Password" ) - SETTINGS(quint8 , alarmVolume , 5 , Storage::Settings_Category_SettingsSystem , "Alarm" , "Volume" ) - SETTINGS(bool , roWaterMode , false , Storage::Settings_Category_SettingsSystem , "RoWaterMode" , "RoWaterMode" ) + SETTINGS(QString , servicePass , "" , Storage::Settings_Category_SettingsSystem , "Service" , "Password" ) + SETTINGS(quint8 , alarmVolume , 5 , Storage::Settings_Category_SettingsSystem , "Alarm" , "Volume" ) + SETTINGS(bool , roWaterMode , false , Storage::Settings_Category_SettingsSystem , "RoWaterMode" , "RoWaterMode" ) + SETTINGS(bool , userMode , false , Storage::Settings_Category_SettingsSystem , "UserMode" , "UserMode" ) + SETTINGS(bool , integratedBPCuff , false , Storage::Settings_Category_SettingsSystem , "IntegratedBPCuff" , "IntegratedBPCuff" ) + SETTINGS(bool , heparinSyringePump , false , Storage::Settings_Category_SettingsSystem , "HeparinSyringePump" , "HeparinSyringePump" ) TRIGGER (bool , encryptionPass, false )