/*! * * Copyright (c) 2020-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 VRxProfiles.cpp * \author (last) Behrouz NematiPour * \date (last) 21-Nov-2023 * \author (original) Peter Lucia * \date (original) 22-Sep-2020 * */ #include "VRxProfiles.h" // Qt // Project #include "ApplicationController.h" #include "RxProfiles.h" #include "FileHandler.h" #include "MsgDefs.h" #include "TreatmentLog.h" using namespace Gui; using namespace View; using namespace Storage; VRxProfiles::VRxProfiles(QObject *parent) : QObject(parent) { ADJUST_VIEW_CONNECTION(AdjustParametersValidationRequestData ) ACTION_VIEW_CONNECTION(AdjustParametersValidationResponseData ) ADJUST_VIEW_CONNECTION(AdjustParametersConfirmRequestData ) connect (this, SIGNAL(didRxProfileList()), &_RxProfilesController, SLOT(doInitRxProfiles())); // ACTION_METHOD_BRIDGE_CONNECTION(RxProfileList, _RxProfilesController, QFileInfoList) connect(&_RxProfilesController, SIGNAL(didRxProfileList(QFileInfoList)), this, SLOT(onRxProfileList(QFileInfoList))); } /** * \brief VCreateTreatment::doValidation * Validates the treatment profile locally, then requests validation of it with FW */ void VRxProfiles::doValidation() { AdjustParametersValidationRequestData data; data.mBloodFlowRate = _bloodFlowRate ; data.mDialysateFlowRate = _dialysateFlowRate ; data.mTreatmentDuration = _treatmentDuration ; data.mSalineBolusVolume = _salineBolusVolume ; data.mHeparinStopTime = _heparinStopTime ; data.mHeparinType = _heparinType ; data.mAcidConcentrate = _acidConcentrate ; data.mBicarbonateConcentrate = _bicarbonateConcentrate ; data.mDialyzerType = _dialyzerType ; data.mBloodPressureMeasureInterval = _bloodPressureMeasureInterval ; data.mRinsebackFlowRate = _rinsebackFlowRate ; data.mRinsebackVolume = _rinsebackVolume ; data.mArterialPressureLimitWindow = _arterialPressureLimitWindow ; data.mVenousPressureLimitWindow = _venousPressureLimitWindow ; data.mVenousPressureLimitAsymtrc = _venousPressureLimitAsymtrc ; data.mTrancembrncPressureLimitWindow = _trancembrncPressureLimitWindow ; data.mDialysateTemp = _dialysateTemp ; data.mHeparinDispensingRate = _heparinDispensingRate ; data.mHeparinBolusVolume = _heparinBolusVolume ; emit didAdjustment(data); parametersConfirmed(false); parametersValidated(false); } void VRxProfiles::doConfirm() { AdjustParametersConfirmRequestData confirmTreatmentRequest; confirmTreatmentRequest.requestedState = AdjustParametersConfirmRequestData::eConfirm; emit didAdjustment(confirmTreatmentRequest); parametersConfirmed(true); } void VRxProfiles::doCancel() { AdjustParametersConfirmRequestData confirmTreatmentRequest; confirmTreatmentRequest.requestedState = AdjustParametersConfirmRequestData::eCancel; emit didAdjustment(confirmTreatmentRequest); parametersValidated(false); } void VRxProfiles::doInitRxProfilesList() { emit didRxProfileList(); } QString VRxProfiles::enumToString(GuiRequestReasons vEnum) { return Gui::enumString(vEnum, "[%1] Unknown Rejection Reason"); } void VRxProfiles::onRxProfileList(const QFileInfoList &vRxProfiles) { qDebug() << "-meow-" << vRxProfiles; QStringList fileNames; for (const QFileInfo fileInfo:vRxProfiles){ fileNames << fileInfo.baseName().replace("_", " "); } rxProfilesList(fileNames); qDebug() << _rxProfilesList; } /** * \brief VCreateTreatment::onFWValidationResponse * Slot to handle a validation response from FW * \param actionType The action type must be a create treatment 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 VRxProfiles::onActionReceive(const AdjustParametersValidationResponseData &data) { if (! data.mAccepted) { bloodFlowRateRejectReason (data.mBloodFlowRateRejectReason ); dialysateFlowRateRejectReason (data.mDialysateFlowRateRejectReason ); treatmentDurationRejectReason (data.mTreatmentDurationRejectReason ); heparinDispensingRateRejectReason (data.mHeparinDispensingRateRejectReason ); heparinBolusVolumeRejectReason (data.mHeparinBolusVolumeRejectReason ); heparinStopTimeRejectReason (data.mHeparinStopTimeRejectReason ); salineBolusVolumeRejectReason (data.mSalineBolusVolumeRejectReason ); heparinTypeRejectReason (data.mHeparinTypeRejectReason ); acidConcentrateRejectReason (data.mAcidConcentrateRejectReason ); bicarbonateConcentrateRejectReason (data.mBicarbonateConcentrateRejectReason ); dialyzerTypeRejectReason (data.mDialyzerTypeRejectReason ); dialysateTempRejectReason (data.mDialysateTempRejectReason ); arterialPressureLimitWindowRejectReason (data.mArterialPressureLimitWindowRejectReason ); venousPressureLimitWindowRejectReason (data.mVenousPressureLimitWindowRejectReason ); venousPressureLimitAsymtrcRejectReason (data.mVenousPressureLimitAsymtrcRejectReason ); bloodPressureMeasureIntervalRejectReason (data.mBloodPressureMeasureIntervalRejectReason ); rinsebackFlowRateRejectReason (data.mRinsebackFlowRateRejectReason ); rinsebackVolumeRejectReason (data.mRinsebackVolumeRejectReason ); trancembrncPressureLimitWindowRejectReason (data.mTrancembrncPressureLimitWindowRejectReason ); emit didValidationFail(); parametersValidated(false); } else { emit didValidationPass(); parametersValidated(true); } } /*! * \brief VCreateTreatment::doGetPrescriptionParameterValues * \details Gets a list of the prescription parameter values * \return (QStringList) The list of parameter values with units */ QStringList VRxProfiles::doGetPrescriptionParameterValues() { return QStringList() << QString("%1 mL/min" ).arg(_bloodFlowRate ) << QString("%1 mL/min" ).arg(_dialysateFlowRate ) << QString("%1 min" ).arg(_treatmentDuration ) << ( _heparinDispensingRate ? QString("%1 mL/hr" ).arg(_heparinDispensingRate) : tr("OFF") ) << ( _heparinBolusVolume ? QString("%1 mL" ).arg(_heparinBolusVolume ) : tr("OFF") ) << ( _heparinDispensingRate ? QString("%1 min" ).arg(_heparinStopTime ) : tr("OFF") ) << QString("%1 mL" ).arg(_salineBolusVolume ) ; } /*! * \brief VCreateTreatment::doGetOperatingParameterValues * \details Gets the operating parameter values * \return (QStringList) The list of operating parameter values with units where applicable */ QStringList VRxProfiles::doGetOperatingParameterValues() { QString mHeparinType ; QString mAcidConcentrate ; QString mBicarbonateConcentrate ; QString mDialyzerType ; QStringList mHeparinTypeOptions ; QStringList mAcidConcentrateOptions ; QStringList mBicarbonateConcentrateOptions ; QStringList mDialyzerTypeOptions ; QString mCategory = Storage::Settings_Category_DataList; if ( heparinTypeSet () ) { // this is managed on UI with heparinTypeSet() // && ( _heparinDispensingRate || _heparinBolusVolume ) mHeparinTypeOptions = _Settings.keys(mCategory, "Heparin Type Options" ); if ((int) _heparinType < mHeparinTypeOptions .length()) mHeparinType = mHeparinTypeOptions .at( _heparinType ); } else { mHeparinType = tr("NONE"); } if ( acidConcentrateSet () ) { mAcidConcentrateOptions = _Settings.keys(mCategory, "Acid Concentrate Options" ); if ((int) _acidConcentrate < mAcidConcentrateOptions .length()) mAcidConcentrate = mAcidConcentrateOptions .at( _acidConcentrate ); } else { mAcidConcentrate = tr("NONE"); } if ( bicarbonateConcentrateSet () ) { mBicarbonateConcentrateOptions = _Settings.keys(mCategory, "Bicarbonate Concentrate Options" ); if ((int) _bicarbonateConcentrate < mBicarbonateConcentrateOptions .length()) mBicarbonateConcentrate = mBicarbonateConcentrateOptions .at( _bicarbonateConcentrate ); } else { mBicarbonateConcentrate = tr("NONE"); } if ( dialyzerTypeSet () ) { mDialyzerTypeOptions = _Settings.keys(mCategory, "Dialyzer Type Options" ); if ((int) _dialyzerType < mDialyzerTypeOptions .length()) mDialyzerType = mDialyzerTypeOptions .at( _dialyzerType ); } else { mDialyzerType = tr("NONE"); } return QStringList() << mHeparinType << mAcidConcentrate << mBicarbonateConcentrate << mDialyzerType << QString("%0 °C" ).arg(_dialysateTemp ) << ( _bloodPressureMeasureInterval ? QString("%0 min").arg(_bloodPressureMeasureInterval) : tr("OFF") ) ; }