Browse Source

fix 0019018: 【图像测量】【小动物】HAR模式下,计算项Epi LVAd和 Endo LVAd测量后不生成结果,对应的左室心肌质量也无法算出

Melon 9 months ago
parent
commit
5a6ae1a140

+ 0 - 7
lib/process/calcuators/formulas/cardiac.dart

@@ -496,11 +496,4 @@ class AnimalsCardiacFormulas extends BaseCardiacFormulas {
     double value = ((density * part1 - part2) + correctionFactor) / 1000.0;
     return value;
   }
-
-  /// LVd Mass Index
-  @override
-  double lvdMassIndex(double lvdmass, double bsa) {
-    double animalsLvdmass = lvdmass / 10;
-    return animalsLvdmass / bsa * 1000;
-  }
 }

+ 18 - 12
lib/process/calcuators/lv_mass.dart

@@ -1,10 +1,10 @@
 import 'package:fis_measure/configs/patient.dart';
+import 'package:fis_measure/interfaces/process/calculators/values.dart';
 import 'package:fis_measure/interfaces/process/items/terms.dart';
+import 'package:fis_measure/process/calcuators/unit_formulas/index.dart';
 import 'package:fis_measure/process/primitives/combos/lv_mass.dart';
-import 'package:vid/us/vid_us_unit.dart';
 
 import 'calculator.dart';
-import 'formulas/cardiac.dart';
 
 class LvdMassALCal extends Calculator<LVMass, double> {
   LvdMassALCal(super.ref);
@@ -15,30 +15,36 @@ class LvdMassALCal extends Calculator<LVMass, double> {
 
     final feature = ref.feature!;
 
-    double? epi = pickChildFloatValue(ref.epi);
-    double? endo = pickChildFloatValue(ref.endo);
-    double? l = pickChildFloatValue(ref.l);
+    UnitFloatValue? epi = pickChildToFloatValue(ref.epi)?.toUnitFloatValue();
+    UnitFloatValue? endo = pickChildToFloatValue(ref.endo)?.toUnitFloatValue();
+    UnitFloatValue? l = pickChildToFloatValue(ref.l)?.toUnitFloatValue();
 
-    double? lvdmass;
-    double? lvdMassIndex;
+    UnitFloatValue? lvdmass;
+    UnitFloatValue? lvdMassIndex;
     if (epi != null && endo != null && l != null) {
-      lvdmass = CardiacFormulas.lvdMassAL(epi, endo, l);
+      lvdmass = UnitFormulas.cardiac.lvdMassAL(epi, endo, l);
     }
     if (lvdmass != null && GlobalPatientConfig.bsa > 0) {
-      lvdMassIndex =
-          CardiacFormulas.lvdMassIndex(lvdmass, GlobalPatientConfig.bsa);
+      lvdMassIndex = UnitFormulas.cardiac.lvdMassIndex(
+        lvdmass,
+        bsa: GlobalPatientConfig.bsa,
+      );
     }
 
     for (var output in ref.meta.outputs) {
       switch (output.name) {
         case MeasureTerms.LVdMass:
           if (lvdmass != null) {
-            feature.updateFloatValue(output, lvdmass, VidUsUnit.kg);
+            feature.updateFloatValue(output, lvdmass.value, lvdmass.unit);
           }
           break;
         case MeasureTerms.LVdMassIndex:
           if (lvdMassIndex != null) {
-            feature.updateFloatValue(output, lvdMassIndex, VidUsUnit.gm2);
+            feature.updateFloatValue(
+              output,
+              lvdMassIndex.value,
+              lvdMassIndex.unit,
+            );
           }
           break;
       }

+ 20 - 0
lib/process/calcuators/unit_formulas/base/cardiac.dart

@@ -92,6 +92,26 @@ class CardiacFormulasBase implements ICardiacFormulas {
     return UnitFloatValue(value, VidUsUnit.kg);
   }
 
+  @override
+  UnitFloatValue lvdMassAL(UnitFloatValue lvadSaxEpi,
+      UnitFloatValue lvadSaxEndo, UnitFloatValue lvldApical) {
+    var value = formulas.CardiacFormulas.lvdMassAL(
+      lvadSaxEpi.convert(VidUsUnit.cm2),
+      lvadSaxEndo.convert(VidUsUnit.cm2),
+      lvldApical.convert(VidUsUnit.cm),
+    );
+    return UnitFloatValue(value, VidUsUnit.kg);
+  }
+
+  @override
+  UnitFloatValue lvdMassIndex(UnitFloatValue lvdmass, {required double bsa}) {
+    var value = formulas.CardiacFormulas.lvdMassIndex(
+      lvdmass.convert(VidUsUnit.kg),
+      bsa,
+    );
+    return UnitFloatValue(value, VidUsUnit.gm2);
+  }
+
   @override
   UnitFloatValue lvevi(UnitFloatValue lvev, {required double bsa}) {
     var value = formulas.CardiacFormulas.lvevi(

+ 3 - 0
lib/process/calcuators/unit_formulas/interfaces/cardiac.dart

@@ -9,6 +9,9 @@ abstract class ICardiacFormulas {
 
   UnitFloatValue lvdMass(
       UnitFloatValue ivsd, UnitFloatValue lvidd, UnitFloatValue lvpwd);
+  UnitFloatValue lvdMassAL(UnitFloatValue lvadSaxEpi,
+      UnitFloatValue lvadSaxEndo, UnitFloatValue lvldApical);
+  UnitFloatValue lvdMassIndex(UnitFloatValue lvdmass, {required double bsa});
   UnitFloatValue fsPercent(UnitFloatValue lvidd, UnitFloatValue lvids);
   UnitFloatValue ivsPercent(UnitFloatValue ivss, UnitFloatValue ivsd);
   UnitFloatValue lvpwPercent(UnitFloatValue lvpws, UnitFloatValue lvpwd);

+ 7 - 0
lib/view/measure/measure_tool.dart

@@ -209,6 +209,13 @@ class LeftSiderSelectMeasureState extends FState<LeftSiderSelectMeasure> {
       measureData.measureApplicationVersion =
           measureApplicationDTO.version ?? '';
       measureData.availableModes = measureApplicationDTO.availableModes ?? [];
+      // final lvdMassItem = measureData.availableModes.first.availableGroups!
+      //     .first.availableFolders!.first.availableItems!
+      //     .where((e) => e.measureTypeName == "LvdMass")
+      //     .first;
+      measureData.availableModes.first.availableGroups!.first.availableFolders!
+          .first.workingItemNames!
+          .add("LV Mass");
       if (application.isThirdPart) {
         measureData.currentMode = 'TPPTissue';
       }