#ifndef VCREATETREATMENT_H #define VCREATETREATMENT_H // Qt #include #include #include #include #include #include // Project #include "MTreatmentParametersResp.h" #include "GuiController.h" #include "StorageGlobals.h" #include "FileSaver.h" // forward diclations class tst_views; using namespace Storage; using namespace Gui; using namespace Model; #define UNSET 9999 namespace View { /*! * \brief The VCreateTreatment class * * The Create Treatment View manages the pre-treatment parameter selection entry and validation. * * \details The Create Treatment View manages data display and translation between the user interface * and treatment parameter and treatment parameter response models. * * Upon HD messaging with confirmation of the current parameter selection, * the Create Treatment View segues to the Create Treatment confirmation screen. * * Upon HD messaging with a list of one or more invalid parameters, the Create Treatment View * will signal the invalid parameters to the GUI so the user can make adjustments. * * The Create Treatment View replicates the validation function used by FW to mitigate * incompatible parameter selection situations. * * When a user modifies treatment parameters: * - The treatment parameters model is populated with the data * - The data is validated for correctness and compatibility * - The continue button is enabled upon success so FW can validate the parameter selection * * \sa Model::MAdjustTreatmentParametersReq * \sa Model::MTreatmentParametersResponse * \sa Model::MStartTreatmentReq * \sa Model::MConfirmTreatmentReq * \sa Model::MStartTreatmentResponse */ class VTreatmentCreate : public QObject { Q_OBJECT // friends friend class::tst_views; bool _requestedSaveNewTreatmentProfile = false; public: explicit VTreatmentCreate(QObject *parent = nullptr); private: // mL/min const quint32 bloodFlowRate_Def = 100 ; // PRS 30 const quint32 bloodFlowRate_Min = 100 ; // PRS 30 const quint32 bloodFlowRate_Max = 500 ; // PRS 30 const quint32 bloodFlowRate_Res = 25 ; // PRS 30 // mL/min const quint32 dialysateFlowRate_Def = 100 ; // PRS 345 const quint32 dialysateFlowRate_Min = 100 ; // PRS 345 const quint32 dialysateFlowRate_Max = 600 ; // PRS 345 const quint32 dialysateFlowRate_Res = 50 ; // PRS 345 // minutes const quint32 duration_Def = 60 ; // PRS 346 const quint32 duration_Min = 60 ; // PRS 346 const quint32 duration_Max = 480 ; // PRS 346 const quint32 duration_Res = 15 ; // PRS 346 // mL/hr (0 = off) const qreal heparinDispensingRate_Def = 0 ; // PRS 347 const qreal heparinDispensingRate_Min = 0.1 ; // PRS 347 const qreal heparinDispensingRate_Max = 1.0 ; // PRS 347 const qreal heparinDispensingRate_Res = 0.1 ; // PRS 347 // mL const qreal heparinBolusVolume_Def = 0 ; // PRS 348 const qreal heparinBolusVolume_Min = 0.1 ; // PRS 348 const qreal heparinBolusVolume_Max = 2.0 ; // PRS 348 const qreal heparinBolusVolume_Res = 0.1 ; // PRS 348 // min const quint32 heparinStopTime_Def = 0 ; // PRS 464 const quint32 heparinStopTime_Min = 0 ; // PRS 464 const quint32 heparinStopTime_Max = 480 ; // PRS 464 const quint32 heparinStopTime_Res = 10 ; // PRS 464 // mL const quint32 salineBolusVolume_Def = 100 ; // PRS 350 const quint32 salineBolusVolume_Min = 100 ; // PRS 350 const quint32 salineBolusVolume_Max = 300 ; // PRS 350 const quint32 salineBolusVolume_Res = 100 ; // PRS 350 const quint32 acidConcentrate_Res = 1 ; // PRS 35 const quint32 bicarbonateConcentrate_Res = 1 ; // PRS 351 const quint32 dialyzerType_Res = 1 ; // PRS 352 // Celsius const qreal dialysateTemp_Def = 37 ; // PRS 353 const qreal dialysateTemp_Min = 35 ; // PRS 353 const qreal dialysateTemp_Max = 38 ; // PRS 353 const qreal dialysateTemp_Res = 0.5 ; // PRS 353 // mmHg const qint32 arterialPressureLimitLow_Def = -300 ; // PRS 354 const qint32 arterialPressureLimitLow_Min = -300 ; // PRS 354 const qint32 arterialPressureLimitLow_Max = 200 ; // PRS 354 const qint32 arterialPressureLimitLow_Res = 10 ; // PRS 354 // mmHg const qint32 arterialPressureLimitHigh_Def = 100 ; // PRS 355 const qint32 arterialPressureLimitHigh_Min = -300 ; // PRS 355 const qint32 arterialPressureLimitHigh_Max = 200 ; // PRS 355 const qint32 arterialPressureLimitHigh_Res = 10 ; // PRS 355 // mmHg const qint32 venousPressureLimitLow_Def = -100 ; // PRS 356 const qint32 venousPressureLimitLow_Min = -100 ; // PRS 356 const qint32 venousPressureLimitLow_Max = 600 ; // PRS 356 const qint32 venousPressureLimitLow_Res = 10 ; // PRS 356 // mmHg const qint32 venousPressureLimitHigh_Def = 400 ; // PRS 357 const qint32 venousPressureLimitHigh_Min = 100 ; // PRS 357 const qint32 venousPressureLimitHigh_Max = 600 ; // PRS 357 const qint32 venousPressureLimitHigh_Res = 10 ; // PRS 357 // min const quint32 bloodPressureMeasureInterval_Def = 30 ; // PRS 358 const quint32 bloodPressureMeasureInterval_Min = 15 ; // PRS 358 const quint32 bloodPressureMeasureInterval_Max = 60 ; // PRS 358 const quint32 bloodPressureMeasureInterval_Res = 5 ; // PRS 358 // mL/min const quint32 rinsebackFlowRate_Def = 75 ; // PRS 359 const quint32 rinsebackFlowRate_Min = 50 ; // PRS 359 const quint32 rinsebackFlowRate_Max = 150 ; // PRS 359 const quint32 rinsebackFlowRate_Res = 25 ; // PRS 359 enum ACID_ENUM { eAcid01 = 0, eAcid02, eAcid03, eAcidUnset = 9999, }; enum BICARBONATE_ENUM { eBicarb01 = 0, eBicarbUnset = 9999, }; enum DIALYZER_ENUM { eDialyzer01 = 0, eDialyzer02, eDialyzer03, eDialyzerUnset = 9999, }; protected: TREATMENT_PARAMETER(quint32, bloodFlowRate, bloodFlowRate_Def, bloodFlowRate_Min, bloodFlowRate_Max, bloodFlowRate_Res) TREATMENT_PARAMETER(quint32, dialysateFlowRate, dialysateFlowRate_Def, dialysateFlowRate_Min, dialysateFlowRate_Max, dialysateFlowRate_Res) TREATMENT_PARAMETER(quint32, duration, duration_Def, duration_Min, duration_Max, duration_Res) TREATMENT_PARAMETER(qreal, heparinDispensingRate, heparinDispensingRate_Def, heparinDispensingRate_Min, heparinDispensingRate_Max, heparinDispensingRate_Res) TREATMENT_PARAMETER(qreal, heparinBolusVolume, heparinBolusVolume_Def, heparinBolusVolume_Min, heparinBolusVolume_Max, heparinBolusVolume_Res) TREATMENT_PARAMETER(quint32, heparinStopTime, heparinStopTime_Def, heparinStopTime_Min, heparinStopTime_Max, heparinStopTime_Res) TREATMENT_PARAMETER(quint32, salineBolusVolume, salineBolusVolume_Def, salineBolusVolume_Min, salineBolusVolume_Max, salineBolusVolume_Res) TREATMENT_PARAMETER(quint32, acidConcentrate, eAcidUnset, eAcid01, eAcid03, acidConcentrate_Res) TREATMENT_PARAMETER(quint32, bicarbonateConcentrate, eBicarbUnset, eBicarb01, eBicarb01, bicarbonateConcentrate_Res) TREATMENT_PARAMETER(quint32, dialyzerType, eDialyzerUnset, eDialyzer01, eDialyzer03, dialyzerType_Res) TREATMENT_PARAMETER(qreal, dialysateTemp, dialysateTemp_Def, dialysateTemp_Min, dialysateTemp_Max, dialysateTemp_Res) TREATMENT_PARAMETER(qint32, arterialPressureLimitLow, arterialPressureLimitLow_Def, arterialPressureLimitLow_Min, arterialPressureLimitLow_Max, arterialPressureLimitLow_Res) TREATMENT_PARAMETER(qint32, arterialPressureLimitHigh, arterialPressureLimitHigh_Def, arterialPressureLimitHigh_Min, arterialPressureLimitHigh_Max, arterialPressureLimitHigh_Res) TREATMENT_PARAMETER(qint32, venousPressureLimitLow, venousPressureLimitLow_Def, venousPressureLimitLow_Min, venousPressureLimitLow_Max, venousPressureLimitLow_Res) TREATMENT_PARAMETER(qint32, venousPressureLimitHigh, venousPressureLimitHigh_Def, venousPressureLimitHigh_Min, venousPressureLimitHigh_Max, venousPressureLimitHigh_Res) TREATMENT_PARAMETER(quint32, bloodPressureMeasureInterval, bloodPressureMeasureInterval_Def, bloodPressureMeasureInterval_Min, bloodPressureMeasureInterval_Max, bloodPressureMeasureInterval_Res) TREATMENT_PARAMETER(quint32, rinsebackFlowRate, rinsebackFlowRate_Def, rinsebackFlowRate_Min, rinsebackFlowRate_Max, rinsebackFlowRate_Res) protected: PROPERTY(QStringList, acidConcentrateOptions, QStringList() << "08-1251-1" << "08-2251-0" << "08-3251-9") PROPERTY(QStringList, bicarbonateConcentrateOptions, QStringList() << "Dimesol - BC-201") PROPERTY(QStringList, dialyzerTypeOptions, QStringList() << "Nipro Elisio-H 17" << "Nipro Elisio-H 19" << "Fresenius Optiflux F160NRe" << "Fresenius Optiflux F180NRe") PROPERTY(bool, continueEnabled, false) PROPERTY(bool, saveTreatmentProfile, false) AdjustTreatmentParametersRequestData treatmentData; bool validate(const AdjustTreatmentParametersRequestData &vData); QString saveNewTreatment(const QJsonObject &obj, const QString &dir = Treatment_Profiles_Dir); QString getParameterRangesDataCSV(); bool saveTreatmentRangesCSV(const QString &filename); QJsonObject loadTreatmentParameterRanges(const QString &path = Treatment_Parameter_Ranges_Path_JSON); QStringList jsonArrayToStringList(const QJsonArray &arr); bool indexInItems(quint32 idx, const QStringList &items); void setTreatmentData(); private: enum UIRejectReasons { OUT_OF_RANGE, LOW_HIGH_INCOMPATIBLE }; enum Page { None, CreateTreatment, ConfirmTreatment, Priming, BeginTreatment }; QHash uiRejections { { OUT_OF_RANGE, "The selected value is out of range." }, { LOW_HIGH_INCOMPATIBLE, "The low and high selections are incompatible." }, }; Page pageToShow = None; QString enumToString(GuiRequestReasons vEnum); TreatmentStartRequestData startTreatmentRequest; TreatmentConfirmRequestData confirmTreatmentRequest; void goToNextPage(bool forward); private slots: void onFinishedSaveNewTreatment(bool result); signals: void showCreate(); void showConfirm(); void showPrime(); void showBegin(); void pop(); void showTreatmentStart(); void requestValidateParameters(const AdjustTreatmentParametersRequestData &data); void requestConfirm(const TreatmentConfirmRequestData &data); void requestSelectParameters(const TreatmentStartRequestData &data); void resetCreateTreatment(); void fwValidationFailed(QString reason); void fwValidationSuccess(); void scrollToParameter(QString parameter); void requestConcurrentSave(QString, QString, bool); public slots: void doResetCreateTreatment(); void doFinishedCreate(); void doFinishedConfirm(); void doFinishedPrime(); bool doActionReceive(AdjustTreatmentParametersResponseData data); void doActionReceive(const TreatmentStartResponseData &messageData); void doUserModifiedParameters(); QStringList doGetPrescriptionParameterNames(); QStringList doGetPrescriptionParameterValues(); QStringList doGetOperatingParameterNames(); QStringList doGetOperatingParameterValues(); void doSelectParameters(); void doCancelConfirmParameters(); void doCancelSelectingParameters(); void doRequestPop(); }; } #endif // VCREATETREATMENT_H