|
@@ -1,13 +1,14 @@
|
|
|
import 'package:fis_measure/configs/patient.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/calculators/values.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/items/item_metas.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/terms.dart';
|
|
|
-import 'package:fis_measure/process/calcuators/formulas/cardiac.dart';
|
|
|
import 'package:fis_measure/process/primitives/combos/sv.dart';
|
|
|
import 'package:fis_measure/process/primitives/multi_method/multiple_trace.dart';
|
|
|
import 'package:vid/us/vid_us_unit.dart';
|
|
|
|
|
|
import 'calculator.dart';
|
|
|
-import 'formulas/general.dart';
|
|
|
import 'trace.dart';
|
|
|
+import 'unit_formulas/index.dart';
|
|
|
|
|
|
class SvCal extends Calculator<Sv, double> {
|
|
|
SvCal(super.ref);
|
|
@@ -18,16 +19,28 @@ class SvCal extends Calculator<Sv, double> {
|
|
|
|
|
|
final feature = ref.feature!;
|
|
|
|
|
|
- final diam = pickChildFloatValue(ref.l);
|
|
|
- if (diam == null) {
|
|
|
+ feature.values.clear();
|
|
|
+
|
|
|
+ final itemName = ref.meta.name;
|
|
|
+ if (['qp', 'qs'].contains(itemName.toLowerCase())) {
|
|
|
+ final output = ItemOutputMeta(itemName, itemName, VidUsUnit.None);
|
|
|
+
|
|
|
+ feature.updateStringValue(output, '');
|
|
|
+ } else {
|
|
|
updateStringValue("");
|
|
|
+ }
|
|
|
+
|
|
|
+ final diam = pickChildToFloatValue(ref.l)?.toUnitFloatValue();
|
|
|
+ if (diam == null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- double? vti;
|
|
|
- double? sv;
|
|
|
+ final viewport = ref.application.currentVisualArea.viewport!;
|
|
|
+
|
|
|
+ UnitFloatValue? vti;
|
|
|
+ UnitFloatValue? sv;
|
|
|
+ UnitFloatValue? co;
|
|
|
int? hr;
|
|
|
- double? co;
|
|
|
final bsa = GlobalPatientConfig.bsa;
|
|
|
|
|
|
TraceItemFeatureAbstract? traceFeature = ref.trace.feature;
|
|
@@ -42,21 +55,12 @@ class SvCal extends Calculator<Sv, double> {
|
|
|
var outputVTI = countVTIResult[0];
|
|
|
var outputHR = countVTIResult[5];
|
|
|
|
|
|
- vti = outputVTI;
|
|
|
+ vti = UnitFloatValue(outputVTI, viewport.yUnit);
|
|
|
hr = outputHR.toInt();
|
|
|
|
|
|
- sv = GeneralFormulas.svDiam(diam, vti);
|
|
|
+ sv = UnitFormulas.general.svDiam(diam, vti);
|
|
|
}
|
|
|
|
|
|
- if (sv != null) {
|
|
|
- updateFloatValue(sv, unit: VidUsUnit.cm3);
|
|
|
- } else {
|
|
|
- updateStringValue("");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
if (traceFeature != null) {
|
|
|
|
|
|
for (var output in ref.trace.meta.outputs) {
|
|
@@ -77,22 +81,25 @@ class SvCal extends Calculator<Sv, double> {
|
|
|
if (sv != null) {
|
|
|
for (var output in ref.meta.outputs) {
|
|
|
switch (output.name) {
|
|
|
+ case MeasureTerms.SV:
|
|
|
+ feature.updateFloatValue(output, sv.value, sv.unit);
|
|
|
+ break;
|
|
|
case MeasureTerms.SI:
|
|
|
if (bsa > 0) {
|
|
|
- final si = CardiacFormulas.si(sv, bsa);
|
|
|
- feature.updateFloatValue(output, si, VidUsUnit.mlm2);
|
|
|
+ final si = UnitFormulas.cardiac.si(sv, bsa: bsa);
|
|
|
+ feature.updateFloatValue(output, si.value, si.unit);
|
|
|
}
|
|
|
break;
|
|
|
case MeasureTerms.CO:
|
|
|
if (hr != null) {
|
|
|
- co = CardiacFormulas.co(sv, hr: hr);
|
|
|
- feature.updateFloatValue(output, co, VidUsUnit.Lmin);
|
|
|
+ final co = UnitFormulas.cardiac.co(sv, hr: hr);
|
|
|
+ feature.updateFloatValue(output, co.value, co.unit);
|
|
|
}
|
|
|
break;
|
|
|
case MeasureTerms.CI:
|
|
|
- if (co != null && bsa > 0) {
|
|
|
- final ci = CardiacFormulas.ci(sv, hr: hr!, bsa: bsa);
|
|
|
- feature.updateFloatValue(output, ci, VidUsUnit.Lminm2);
|
|
|
+ if (hr != null && bsa > 0) {
|
|
|
+ final ci = UnitFormulas.cardiac.ci(sv, bsa: bsa, hr: hr);
|
|
|
+ feature.updateFloatValue(output, ci.value, ci.unit);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -103,8 +110,8 @@ class SvCal extends Calculator<Sv, double> {
|
|
|
ref.meta.outputs.indexWhere((e) => e.name == MeasureTerms.CSA);
|
|
|
if (csaIndex > -1) {
|
|
|
final output = ref.meta.outputs[csaIndex];
|
|
|
- final csa = GeneralFormulas.csa(diam);
|
|
|
- feature.updateFloatValue(output, csa, VidUsUnit.cm2);
|
|
|
+ final csa = UnitFormulas.general.csa(diam);
|
|
|
+ feature.updateFloatValue(output, csa.value, csa.unit);
|
|
|
}
|
|
|
}
|
|
|
}
|