/*! * * Copyright (c) 2021-2022 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 TreatmentLog.h * \author (last) Behrouz NematiPour * \date (last) 01-Mar-2022 * \author (original) Behrouz NematiPour * \date (original) 04-May-2021 * */ #pragma once // Qt #include #include #include // Project #include "main.h" // Doxygen : do not remove #include "MPostTreatmentAdjustTreatmentLogResponse.h" #include "MTreatmentLogAvrgeData.h" #include "MTreatmentLogAlarmData.h" #include "MTreatmentLogEventData.h" // define #define _TreatmentLog Storage::TreatmentLog::I() namespace Storage { /*! * \brief The TreatmentLog class * This class is the controller which converts/saves/exports model to be used in the UI/TreatmentLog */ class TreatmentLog : public QObject { Q_OBJECT QString _treatmentLogPath; QFutureWatcher _saveWatcher; QFutureWatcher _exportWatcher; QString _dateFormat = "yyyy/MM/dd" ; QString _timeFormat = "HH:mm" ; QString _datetimeFormat = _dateFormat + " " + _timeFormat; // TODO : A Unit class needs to be created to have all the unit string and all the required conversions. QString _unitTextFlowRate = tr("mL/min" ); QString _unitTextDurationHour = tr("hour" ); QString _unitTextDurationMin = tr("min" ); QString _unitTextConcentration = tr("mEg/L" ); QString _unitTextTemperature = tr("C" ); QString _unitTextVolume = tr("L" ); QString _unitTextFluid = tr("mL" ); QString _unitTextHeparinConcentration = tr("IU/mL" ); QString _unitTextDispensingRate = tr("mL/hr" ); QString _unitTextBloodPressure = tr("mmHg" ); struct TxInfo { void clear() { mStatus = false; mDateTime = ""; mDeviceID = ""; mPatientID = ""; mFileName = ""; } bool mStatus = false; QString mDateTime = ""; QString mDeviceID = ""; QString mPatientID = ""; QString mFileName = ""; } _lastTxInfo; enum Role { eValue, eTitle, eUnit }; enum TreatmentLogIndex { ePatientID , eDeviceID , eBloodFlowRate , eDialysateFlowRate , eTreatmentDuration , eActualTreatmentDuration , eAcidConcentrateType , eBicarbonateConcentrateType , ePotassiumConcentration , eCalciumConcentration , eBicarbonateConcentration , eSodiumConcentration , eDialysateTemperature , eDialyzerType , eHeparinType , eHeparinConcentration , eHeparinBolusVolume , eHeparinDispenseRate , eHeparinStop , eHeparinDeliveredVolume , eTreatmentStartDateTime , eTreatmentEndDateTime , eWaterSampleTestResult , eDialysateVolumeUsed , eOriginUFVolume , eTargetUFVolume , eActualUFVolume , eOriginUFRate , eTargetUFRate , eActualUFRate , eSalineBolusVolume , eAverageBloodFlow , eAverageDialysateFlow , eAverageDialysateTemp , eAverageArterialPressure , eAverageVenousPressure , eTreatmentLogIndexCount }; const QStringList _titles { tr("Patient ID" ), // ePatientID tr("Device ID" ), // eDeviceID tr("Blood Flow Rate" ), // eBloodFlowRate tr("Dialysate Flow Rate" ), // eDialysateFlowRate tr("Treatment Duration" ), // eTreatmentDuration tr("Actual Treatment Duration" ), // eActualTreatmentDuration tr("Acid ConcentrateType" ), // eAcidConcentrateType tr("Bicarbonate Concentrate Type" ), // eBicarbonateConcentrateType tr("Potassium Concentration" ), // ePotassiumConcentration tr("Calcium Concentration" ), // eCalciumConcentration tr("Bicarbonate Concentration" ), // eBicarbonateConcentration tr("Sodium Concentration" ), // eSodiumConcentration tr("Dialysate Temperature" ), // eDialysateTemperature tr("Dialyzer Type" ), // eDialyzerType tr("Heparin Type" ), // eHeparinType tr("Heparin Concentration" ), // eHeparinConcentration tr("Heparin Bolus Volume" ), // eHeparinBolusVolume tr("Heparin Dispense Rate" ), // eHeparinDispenseRate tr("Heparin Stop" ), // eHeparinStop tr("Heparin Delivered Volume" ), // eHeparinDeliveredVolume tr("Treatment Start DateTime" ), // eTreatmentStartDateTime tr("Treatment End DateTime" ), // eTreatmentEndDateTime tr("Water Sample Test Result" ), // eWaterSampleTestResult tr("Dialysate Volume Used" ), // eDialysateVolumeUsed tr("Prescribed UF Volume" ), // eOriginUFVolume tr("Target UF Volume" ), // eTargetUFVolume tr("Actual UF Volume" ), // eActualUFVolume tr("Prescribed UF Rate" ), // eOriginUFRate tr("Target UF Rate" ), // eTargetUFRate tr("Actual UF Rate" ), // eActualUFRate tr("Saline Bolus Volume" ), // eSalineBolusVolume tr("Average Blood Flow" ), // eAverageBloodFlow tr("Average Dialysate Flow" ), // eAverageDialysateFlow tr("Average Dialysate Temp" ), // eAverageDialysateTemp tr("Average Arterial Pressure" ), // eAverageArterialPressure tr("Average Venous Pressure" ), // eAverageVenousPressure }; const QStringList _units { "" , // ePatientID "" , // eDeviceID _unitTextFlowRate , // eBloodFlowRate _unitTextFlowRate , // eDialysateFlowRate _unitTextDurationMin , // eTreatmentDuration _unitTextDurationMin , // eActualTreatmentDuration "" , // eAcidConcentrateType "" , // eBicarbonateConcentrateType _unitTextConcentration , // ePotassiumConcentration _unitTextConcentration , // eCalciumConcentration _unitTextConcentration , // eBicarbonateConcentration _unitTextConcentration , // eSodiumConcentration _unitTextTemperature , // eDialysateTemperature "" , // eDialyzerType "" , // eHeparinType _unitTextHeparinConcentration , // eHeparinConcentration _unitTextFluid , // eHeparinBolusVolume _unitTextDispensingRate , // eHeparinDispenseRate _unitTextDurationMin , // eHeparinStop _unitTextFluid , // eHeparinDeliveredVolume "" , // eTreatmentStartDateTime "" , // eTreatmentEndDateTime "" , // eWaterSampleTestResult _unitTextVolume , // eDialysateVolumeUsed _unitTextVolume , // eOriginUFVolume _unitTextVolume , // eTargetUFVolume _unitTextVolume , // eActualUFVolume _unitTextFlowRate , // eOriginUFRate _unitTextFlowRate , // eTargetUFRate _unitTextFlowRate , // eActualUFRate _unitTextFluid , // eSalineBolusVolume _unitTextFlowRate , // eAverageBloodFlow _unitTextFlowRate , // eAverageDialysateFlow _unitTextTemperature , // eAverageDialysateTemp _unitTextBloodPressure , // eAverageArterialPressure _unitTextBloodPressure , // eAverageVenousPressure }; QString title(quint8 vIndex) const { if (vIndex < _titles.count()) return _titles[vIndex]; return ""; } QString value(quint8 vIndex) const { if (vIndex < _values.count()) return _values[vIndex]; return ""; } QString unit(quint8 vIndex) const { if (vIndex < _units.count()) return _units[vIndex]; return ""; } // Lists QStringList _values; QList _treatmentLogAvrgeData; QList _treatmentLogAlarmData; QList _treatmentLogEventData; void initConnections(); void logPath (Logger::LogType vLogType = Logger::eLogTrtmt, QString vLogPath = ""); bool saveLog (); void saveLogConcurrent (); bool exportLog (); void exportLogConcurrent(); NOTIFIER(isIdle) SINGLETON(TreatmentLog) public: void initModel(const AdjustTreatmentLogResponseData &vData, const QString &vPatientID); const QStringList titles() const { return _titles; } const QStringList units () const { return _units ; } const QStringList values() const { return _values; } void append(const TreatmentLogAvrgeData &vData); void append(const TreatmentLogAlarmData &vData); void append(const TreatmentLogEventData &vData); private slots: void onLogPathSet(Logger::LogType vLogType, const QString &vLogPath); void onSave (); void onExport (); public slots: void doSave (); void doExport (); signals: void didTreatmentLogSave( const QString &vPatientID , const QString &vDeviceID , const QString &vFileName ); }; }