Index: sources/storage/TreatmentLog.h =================================================================== diff -u -r1c18f738693756ca1f0342c2cc158e32bc28f90b -r3b323bd6a1a03429c2321a889049de1c3b11302f --- sources/storage/TreatmentLog.h (.../TreatmentLog.h) (revision 1c18f738693756ca1f0342c2cc158e32bc28f90b) +++ sources/storage/TreatmentLog.h (.../TreatmentLog.h) (revision 3b323bd6a1a03429c2321a889049de1c3b11302f) @@ -1,15 +1,15 @@ /*! * - * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. - * copyright + * Copyright (c) 2021-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 TreatmentLog.h * \author (last) Behrouz NematiPour - * \date (last) 4/30/2021 + * \date (last) 13-Mar-2024 * \author (original) Behrouz NematiPour - * \date (original) 4/30/2021 + * \date (original) 04-May-2021 * */ #pragma once @@ -20,7 +20,7 @@ #include // Project -#include "main.h" // Doxygen : don't remove +#include "main.h" // Doxygen : do not remove #include "MPostTreatmentAdjustTreatmentLogResponse.h" #include "MTreatmentLogAvrgeData.h" #include "MTreatmentLogAlarmData.h" @@ -40,8 +40,18 @@ { Q_OBJECT + const int _interval = 1000; // 1s + const int _pendingInterval= 60 ; // 1m + int _pendingCounter = 0 ; // + + const QString _sep = ","; + QString _treatmentLogPath; + const char* _treatmentLogExtUploaded = "txr"; + const char* _treatmentLogExtPending = "txr.p"; + const char* _txCodeKey = "Tx Code"; + QFutureWatcher _saveWatcher; QFutureWatcher _exportWatcher; @@ -51,24 +61,48 @@ // 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 _unitTextDuration = tr("min" ); - QString _unitTextConcentration = tr("mEg/L" ); - QString _unitTextTemperature = tr("°C" ); + QString _unitTextDurationHour = tr("hour" ); + QString _unitTextDurationMin = tr("min" ); + QString _unitTextConcentration = tr("mEq/L" ); + QString _unitTextTemperature = tr("C" ); QString _unitTextVolume = tr("L" ); QString _unitTextFluid = tr("mL" ); QString _unitTextHeparinConcentration = tr("IU/mL" ); - QString _unitTextDispencingRate = tr("mL/hr" ); + 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; + QString _deviceID = "unknown"; + QString _pendingTxr = ""; + QString _emptyPatinetID = "NoPatientIDEntered"; // No translation + + MEMBER( QString , gTxCode, ""); // content of this value is generated by VPreTreatment. + MEMBER( QString , rTxCode, ""); // content of this value be received from CloudSync App. + enum Role { - eValue, eTitle, - eUnit + eValue, + eUnit , + eCount }; enum TreatmentLogIndex { - eDeviceID , + ePatientID , eBloodFlowRate , eDialysateFlowRate , eTreatmentDuration , @@ -91,144 +125,163 @@ eTreatmentEndDateTime , eWaterSampleTestResult , eDialysateVolumeUsed , + eOriginUFVolume , eTargetUFVolume , eActualUFVolume , + eOriginUFRate , eTargetUFRate , eActualUFRate , eSalineBolusVolume , - eAverageBloodFlow , - eAverageDialysateFlow , - eAverageDialysateTemp , - eAverageArterialPressure , - eAverageVenousPressure , - - eTreatmentLogIndexCount + eTreatmentLogIndexCount , }; const QStringList _titles { - tr("Device ID" ), - tr("Blood Flow Rate" ), - tr("Dialysate Flow Rate" ), - tr("Treatment Duration" ), - tr("Actual Treatment Duration" ), - tr("Acid ConcentrateType" ), - tr("Bicarbonate Concentrate Type" ), - tr("Potassium Concentration" ), - tr("Calcium Concentration" ), - tr("Bicarbonate Concentration" ), - tr("Sodium Concentration" ), - tr("Dialysate Temperature" ), - tr("Dialyzer Type" ), - tr("Heparin Type" ), - tr("Heparin Concentration" ), - tr("Heparin Bolus Volume" ), - tr("Heparin Dispense Rate" ), - tr("Heparin Stop" ), - tr("Heparin Delivered Volume" ), - tr("Treatment Start DateTime" ), - tr("Treatment End DateTime" ), - tr("Water Sample Test Result" ), - tr("Dialysate Volume Used" ), - tr("Target UF Volume" ), - tr("Actual UF Volume" ), - tr("Target UF Rate" ), - tr("Actual UF Rate" ), - tr("Saline Bolus Volume" ), - tr("Average Blood Flow" ), - tr("Average Dialysate Flow" ), - tr("Average Dialysate Temp" ), - tr("Average Arterial Pressure" ), - tr("Average Venous Pressure" ), + tr("Patient ID" ), // ePatientID + 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 }; const QStringList _units { - "" , - _unitTextFlowRate , - _unitTextFlowRate , - _unitTextDuration , - _unitTextDuration , - "" , - "" , - _unitTextConcentration , - _unitTextConcentration , - _unitTextConcentration , - _unitTextConcentration , - _unitTextTemperature , - "" , - "" , - _unitTextHeparinConcentration , - _unitTextFluid , - _unitTextDispencingRate , - _unitTextDuration , - _unitTextFluid , - "" , - "" , - "" , - _unitTextVolume , - _unitTextVolume , - _unitTextVolume , - _unitTextFlowRate , - _unitTextFlowRate , - _unitTextFluid , - _unitTextFlowRate , - _unitTextFlowRate , - _unitTextTemperature , - _unitTextBloodPressure , - _unitTextBloodPressure , + "" , // ePatientID + _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 }; - QString title(quint8 vIndex) const { - if (vIndex < _titles.count()) return _titles[vIndex]; - return ""; + QString string(quint8 vIndex , const QStringList &vStringList) const { + QString str = ""; + if (vIndex < vStringList.count()) { + str = vStringList[vIndex]; + str.remove(_sep); + } + return str; } - 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 ""; - } + QString title(quint8 vIndex) const { return string(vIndex, _titles );} + QString value(quint8 vIndex) const { return string(vIndex, _values );} + QString unit (quint8 vIndex) const { return string(vIndex, _units );} + // Lists QStringList _values; + QList _treatmentLogAvrgeData; QList _treatmentLogAlarmData; QList _treatmentLogEventData; + QMap _treatmentLogAlarmTitles; + QMap _treatmentLogEventTitles; + + void readAlarmTitles ( ); + void readEventTitles ( ); + QString alarmTitle (quint32 vID); + QString eventTitle (quint32 vID); + void initConnections(); - void logPath (Logger::LogType vLogType = Logger::eLogTrtmt, QString vLogPath = ""); + void logPath (Logger::LogType vLogType, QString vLogPath); bool saveLog (); void saveLogConcurrent (); bool exportLog (); void exportLogConcurrent(); + bool checkTxCode(); + bool findTxCode (); + void sendPending(); + // Pending Tx Report + void testPendingTxReports (); // eMessageID_TxReport + NOTIFIER(isIdle) SINGLETON(TreatmentLog) +protected: + void timerEvent(QTimerEvent *) override; + public: - void initModel(const AdjustTreatmentLogResponseData &vData); + void initModel(const AdjustTreatmentLogResponseData &vData, const QString &vPatientID, bool vHeparinBolusVolumeOff, bool vHeparinDispensingRateOff); + void clearModel() { + _values.clear(); + for (int i = 0; i < eTreatmentLogIndexCount; i++) _values << ""; + } - const QStringList titles() const { return _titles; } - const QStringList units () const { return _units ; } - const QStringList values() const { return _values; } + 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); + QString logPath () const { return _treatmentLogPath; } + private slots: void onLogPathSet(Logger::LogType vLogType, const QString &vLogPath); void onSave (); void onExport (); + void onTxCodeReceive (const QString &vTxCode); + void onCloudSyncStatus ( bool vReady ); public slots: void doSave (); void doExport (); signals: + void didPendingTxr ( const QString &vFileName ); + void didTxCodeReceive ( const QString &vTxCode ); + void didNotification ( const QString &vNotification ); }; }