@f1studio/form-spec 5.0.0-alpha.108 → 5.0.0-alpha.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FormSpec.FS/FormSpec.d.ts +3 -1
- package/FormSpec.FS/FormSpec.d.ts.map +1 -1
- package/FormSpec.FS/Helpers.d.ts +7 -0
- package/FormSpec.FS/Helpers.d.ts.map +1 -1
- package/FormSpec.FS/Interop/FormSpec.Api.Helpers.d.ts +29 -3
- package/FormSpec.FS/Interop/FormSpec.Api.Helpers.d.ts.map +1 -1
- package/FormSpec.FS/PathwayExecutor.d.ts +0 -4
- package/FormSpec.FS/PathwayExecutor.d.ts.map +1 -1
- package/FormSpec.TS/FormSpec.FS/FormSpec.js +11 -1
- package/FormSpec.TS/FormSpec.FS/FormSpec.js.map +1 -1
- package/FormSpec.TS/FormSpec.FS/FormSpec.ts.map +1 -1
- package/FormSpec.TS/FormSpec.FS/Helpers.js +52 -24
- package/FormSpec.TS/FormSpec.FS/Helpers.js.map +1 -1
- package/FormSpec.TS/FormSpec.FS/Helpers.ts.map +1 -1
- package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Helpers.js +161 -26
- package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Helpers.js.map +1 -1
- package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Helpers.ts.map +1 -1
- package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.js +1 -1
- package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.js.map +1 -1
- package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.ts.map +1 -1
- package/FormSpec.TS/FormSpec.FS/PathwayExecutor.js +4 -32
- package/FormSpec.TS/FormSpec.FS/PathwayExecutor.js.map +1 -1
- package/FormSpec.TS/FormSpec.FS/PathwayExecutor.ts.map +1 -1
- package/FormSpec.TS/fable_modules/Thoth.Json.10.4.1/Encode.fs.js.map +1 -1
- package/FormSpec.TS/fable_modules/Thoth.Json.10.4.1/Encode.fs.ts.map +1 -1
- package/FormSpec.TS/plugins/bmi/src/BMIField.js +1 -1
- package/FormSpec.TS/plugins/bmi/src/BMIField.js.map +1 -1
- package/FormSpec.TS/plugins/bmi/src/BMIField.ts.map +1 -1
- package/FormSpec.TS/plugins/likert/src/LikertField.js +251 -84
- package/FormSpec.TS/plugins/likert/src/LikertField.js.map +1 -1
- package/FormSpec.TS/plugins/likert/src/LikertField.ts.map +1 -1
- package/FormSpec.TS/plugins/signature/src/SignatureField.js +1 -1
- package/FormSpec.TS/plugins/signature/src/SignatureField.js.map +1 -1
- package/FormSpec.TS/plugins/signature/src/SignatureField.ts.map +1 -1
- package/FormSpec.TS/plugins/vitals/src/VitalsField.js +1 -1
- package/FormSpec.TS/plugins/vitals/src/VitalsField.js.map +1 -1
- package/FormSpec.TS/plugins/vitals/src/VitalsField.ts.map +1 -1
- package/README.md +7 -7
- package/package.json +2 -2
- package/plugins/bmi/src/BMIField.d.ts.map +1 -1
- package/plugins/likert/src/LikertField.d.ts.map +1 -1
- package/plugins/signature/src/SignatureField.d.ts.map +1 -1
- package/plugins/vitals/src/VitalsField.d.ts.map +1 -1
- package/src/FormSpec.FS/FormSpec.ts +6 -2
- package/src/FormSpec.FS/Helpers.ts +55 -27
- package/src/FormSpec.FS/Interop/FormSpec.Api.Helpers.ts +172 -36
- package/src/FormSpec.FS/Interop/FormSpec.Api.Option.ts +1 -1
- package/src/FormSpec.FS/PathwayExecutor.ts +40 -69
- package/src/plugins/bmi/src/BMIField.ts +1 -1
- package/src/plugins/likert/src/LikertField.ts +211 -89
- package/src/plugins/signature/src/SignatureField.ts +1 -1
- package/src/plugins/vitals/src/VitalsField.ts +1 -1
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { FSharpRef, Record, Union } from "@fable-org/fable-library-js/Types.js";
|
|
2
|
-
import { fold, findIndex, tryPick, sortByDescending, truncate, length, sortBy, tryHead, filter as filter_1, ofArray as ofArray_1, append, empty, head, tail, concat, singleton, forAll, exists, collect, map, sumBy, sum, isEmpty, choose, tryFind, FSharpList } from "@fable-org/fable-library-js/List.js";
|
|
2
|
+
import { fold, findIndex, tryPick, sortByDescending, truncate, length, sortBy, tryHead, filter as filter_1, ofArray as ofArray_1, append, empty, head, tail, concat, singleton, forAll, exists, collect, map as map_1, sumBy, sum, isEmpty, choose, tryFind, FSharpList } from "@fable-org/fable-library-js/List.js";
|
|
3
3
|
import { tuple_type, bool_type, float64_type, lambda_type, class_type, record_type, int32_type, union_type, list_type, string_type, TypeInfo } from "@fable-org/fable-library-js/Reflection.js";
|
|
4
4
|
import { ClinicalPathway_PathwayExecutionMode_$reflection, ClinicalPathway_SetFieldValueAction, ClinicalPathway_FieldValueSource_$union, ClinicalPathway_PathwayExecutionMode_$union, ClinicalPathway_SelectionStrategy_$union, ClinicalPathway_CombinationStrategy_$union, ClinicalPathway_StateType_$union, ClinicalPathway_StateDefinition, Shared_PluginPropertyKey, Shared_FieldOptionKey, ClinicalPathway_TransitionCondition_$union, ClinicalPathway_LogicalOp_$union, ClinicalPathway_StateEvaluator_$union, Shared_FieldValue_Single, Shared_ConditionValue_$union, Shared_MatrixAnswer, ClinicalPathway_FieldEvaluator_$union, Shared_PluginDataProperty, Shared_PluginDataProperty_$reflection, Spec_Score, Spec_ScoreRange, Spec_FormStep$1, Spec_FormField$1, Shared_FieldValue_$union, Shared_MatrixItemKey, Shared_FieldAnswer, Shared_FieldOption, Spec_FieldType, Shared_TransitionKey_$reflection, Shared_TransitionKey, Shared_FieldKey_$reflection, ClinicalPathway_ActionInfo_$reflection, Spec_FormSpec$1_$reflection, Spec_FieldType_$reflection, ClinicalPathway_ClinicalPathwaySpec_$reflection, Shared_FieldKey, ClinicalPathway_ActionInfo_$union, Spec_FieldType_$union, Spec_FormSpec$1, ClinicalPathway_ClinicalPathwaySpec, Shared_StateKey_$reflection, Shared_StateKey, ClinicalPathway_TransitionDefinition_$reflection, ClinicalPathway_TransitionDefinition } from "./FormSpec.js";
|
|
5
|
-
import { tryParse as tryParse_1,
|
|
6
|
-
import { int32ToString, equals, compare, comparePrimitives,
|
|
7
|
-
import { difference, union, empty as empty_1, FSharpSet__get_IsEmpty, FSharpSet__get_Count, contains, ofList as ofList_1, isSubset, ofArray, map as
|
|
8
|
-
import { toArray, orElse, filter, map
|
|
5
|
+
import { tryParse as tryParse_1, float64, int32 } from "@fable-org/fable-library-js/Int32.js";
|
|
6
|
+
import { int32ToString, equals, compare, comparePrimitives, IComparable, IEquatable } from "@fable-org/fable-library-js/Util.js";
|
|
7
|
+
import { difference, union, empty as empty_1, FSharpSet__get_IsEmpty, FSharpSet__get_Count, contains, ofList as ofList_1, isSubset, ofArray, map as map_2, toList, FSharpSet } from "@fable-org/fable-library-js/Set.js";
|
|
8
|
+
import { toArray, orElse, filter, map, defaultArg, value as value_4, bind, Option } from "@fable-org/fable-library-js/Option.js";
|
|
9
9
|
import { tryFind as tryFind_1, FSharpMap, ofList, toList as toList_1 } from "@fable-org/fable-library-js/Map.js";
|
|
10
10
|
import { updateField, getFieldDetails, FieldDetails$1, fieldToDetails } from "./FormSpecValues.js";
|
|
11
|
-
import {
|
|
12
|
-
import { getBytesInt32 } from "@fable-org/fable-library-js/BitConverter.js";
|
|
13
|
-
import { arrayToGuid } from "@fable-org/fable-library-js/Guid.js";
|
|
11
|
+
import { Helpers_generateDeterministicGuidRaw, Helpers_canonicalizeFieldKey } from "./Helpers.js";
|
|
14
12
|
import { printf, toText, isNullOrEmpty, isNullOrWhiteSpace, join } from "@fable-org/fable-library-js/String.js";
|
|
15
13
|
import { Auto_generateBoxedEncoder_437914C6, toString } from "../fable_modules/Thoth.Json.10.4.1/Encode.fs.js";
|
|
16
14
|
import { tryParse } from "@fable-org/fable-library-js/Double.js";
|
|
17
15
|
import { create, isMatch } from "@fable-org/fable-library-js/RegExp.js";
|
|
16
|
+
import { map as map_3 } from "@fable-org/fable-library-js/Array.js";
|
|
18
17
|
import { PluginValueRegistry_tryGet, IPluginValueConverter } from "./PluginInterface.js";
|
|
19
18
|
import { now } from "@fable-org/fable-library-js/Date.js";
|
|
20
19
|
|
|
@@ -318,45 +317,17 @@ export function ScoreCalculator_getScoreRange(score: Option<Spec_Score>, value:
|
|
|
318
317
|
}
|
|
319
318
|
}
|
|
320
319
|
|
|
321
|
-
/**
|
|
322
|
-
* Generate deterministic GUID from field label
|
|
323
|
-
*/
|
|
324
|
-
export function FieldResolver_generateFieldKey(fieldName: string): Shared_FieldKey {
|
|
325
|
-
const hash: int32 = stringHash(fieldName) | 0;
|
|
326
|
-
const bytes: uint8[] = fill(new Array(16), 0, 16, 0);
|
|
327
|
-
iterateIndexed<uint8>((i: int32, b: uint8): void => {
|
|
328
|
-
if (i < 4) {
|
|
329
|
-
setItem(bytes, i, b);
|
|
330
|
-
}
|
|
331
|
-
}, Array.from(getBytesInt32(hash)));
|
|
332
|
-
iterateIndexed<uint8>((i_1: int32, b_1: uint8): void => {
|
|
333
|
-
if (i_1 < 4) {
|
|
334
|
-
setItem(bytes, i_1 + 4, b_1);
|
|
335
|
-
}
|
|
336
|
-
}, Array.from(getBytesInt32(hash >> 1)));
|
|
337
|
-
iterateIndexed<uint8>((i_2: int32, b_2: uint8): void => {
|
|
338
|
-
if (i_2 < 4) {
|
|
339
|
-
setItem(bytes, i_2 + 8, b_2);
|
|
340
|
-
}
|
|
341
|
-
}, Array.from(getBytesInt32(hash >> 2)));
|
|
342
|
-
iterateIndexed<uint8>((i_3: int32, b_3: uint8): void => {
|
|
343
|
-
if (i_3 < 4) {
|
|
344
|
-
setItem(bytes, i_3 + 12, b_3);
|
|
345
|
-
}
|
|
346
|
-
}, Array.from(getBytesInt32(hash >> 3)));
|
|
347
|
-
return new Shared_FieldKey(arrayToGuid(bytes));
|
|
348
|
-
}
|
|
349
|
-
|
|
350
320
|
/**
|
|
351
321
|
* Create resolver that maps pathway field references to FieldKeys
|
|
352
322
|
*/
|
|
353
323
|
export function FieldResolver_createResolver(formSpec: Spec_FormSpec$1<Spec_FieldType_$union>): ((arg0: string) => Shared_FieldKey) {
|
|
354
|
-
const
|
|
324
|
+
const formCode: string = defaultArg(map<string, string>(Helpers_canonicalizeFieldKey, formSpec.Code), "unknown");
|
|
325
|
+
const labelToFieldKey: FSharpMap<string, Shared_FieldKey> = ofList<string, Shared_FieldKey>(map_1<Spec_FormField$1<Spec_FieldType_$union>, [string, Shared_FieldKey]>((field: Spec_FormField$1<Spec_FieldType_$union>): [string, Shared_FieldKey] => ([field.Label.toLocaleLowerCase().trim(), field.FieldKey] as [string, Shared_FieldKey]), collect<Spec_FormStep$1<Spec_FieldType_$union>, Spec_FormField$1<Spec_FieldType_$union>>((step: Spec_FormStep$1<Spec_FieldType_$union>): FSharpList<Spec_FormField$1<Spec_FieldType_$union>> => step.Fields, formSpec.Steps)), {
|
|
355
326
|
Compare: comparePrimitives,
|
|
356
327
|
});
|
|
357
328
|
return (fieldReference: string): Shared_FieldKey => {
|
|
358
329
|
const matchValue: Option<Shared_FieldKey> = tryFind_1<string, Shared_FieldKey>(fieldReference.toLocaleLowerCase().trim(), labelToFieldKey);
|
|
359
|
-
return (matchValue == null) ?
|
|
330
|
+
return (matchValue == null) ? (new Shared_FieldKey(Helpers_generateDeterministicGuidRaw(`formspec.${formCode}:step0.${Helpers_canonicalizeFieldKey(fieldReference)}`))) : value_4(matchValue);
|
|
360
331
|
};
|
|
361
332
|
}
|
|
362
333
|
|
|
@@ -364,11 +335,11 @@ export function FieldResolver_createResolver(formSpec: Spec_FormSpec$1<Spec_Fiel
|
|
|
364
335
|
* Extract field values from form spec (reads from FormSpec)
|
|
365
336
|
*/
|
|
366
337
|
export function FieldResolver_extractFieldValues(resolver: ((arg0: string) => Shared_FieldKey), formSpec: Spec_FormSpec$1<Spec_FieldType_$union>): FSharpMap<Shared_FieldKey, string> {
|
|
367
|
-
return ofList<Shared_FieldKey, string>(collect<Spec_FormStep$1<Spec_FieldType_$union>, [Shared_FieldKey, string]>((step: Spec_FormStep$1<Spec_FieldType_$union>): FSharpList<[Shared_FieldKey, string]> =>
|
|
338
|
+
return ofList<Shared_FieldKey, string>(collect<Spec_FormStep$1<Spec_FieldType_$union>, [Shared_FieldKey, string]>((step: Spec_FormStep$1<Spec_FieldType_$union>): FSharpList<[Shared_FieldKey, string]> => map_1<Spec_FormField$1<Spec_FieldType_$union>, [Shared_FieldKey, string]>((field: Spec_FormField$1<Spec_FieldType_$union>): [Shared_FieldKey, string] => {
|
|
368
339
|
let matchValue: Shared_FieldValue_$union, pluginData: FSharpList<Shared_PluginDataProperty>;
|
|
369
|
-
return [field.FieldKey, (matchValue = fieldToDetails(field).FieldValue, (matchValue.tag === /* Multiple */ 1) ? join(",", toList<string>(
|
|
340
|
+
return [field.FieldKey, (matchValue = fieldToDetails(field).FieldValue, (matchValue.tag === /* Multiple */ 1) ? join(",", toList<string>(map_2<Shared_FieldAnswer, string>((a: Shared_FieldAnswer): string => a.Value, matchValue.fields[0], {
|
|
370
341
|
Compare: comparePrimitives,
|
|
371
|
-
}))) : ((matchValue.tag === /* Matrix */ 2) ? join(",",
|
|
342
|
+
}))) : ((matchValue.tag === /* Matrix */ 2) ? join(",", map_1<[Shared_MatrixItemKey, string], string>((tupledArg: [Shared_MatrixItemKey, string]): string => tupledArg[1], toList_1<Shared_MatrixItemKey, string>(matchValue.fields[0].Values))) : ((matchValue.tag === /* PluginData */ 3) ? ((pluginData = matchValue.fields[0], toString(0, Auto_generateBoxedEncoder_437914C6(list_type(Shared_PluginDataProperty_$reflection()), undefined, undefined, undefined)(pluginData)))) : matchValue.fields[0].Value)))] as [Shared_FieldKey, string];
|
|
372
343
|
}, step.Fields), formSpec.Steps), {
|
|
373
344
|
Compare: compare,
|
|
374
345
|
});
|
|
@@ -546,10 +517,10 @@ export function evaluateFieldCondition(actualValue: string, evaluator: ClinicalP
|
|
|
546
517
|
return !exists<string>((v_10: string): boolean => (v_10.trim().toLocaleLowerCase() === actualValue.trim().toLocaleLowerCase()), evaluator.fields[0]);
|
|
547
518
|
case /* ContainsAll */ 4: {
|
|
548
519
|
const values_2: FSharpList<string> = evaluator.fields[0];
|
|
549
|
-
const actualParts: FSharpSet<string> = ofArray<string>(
|
|
520
|
+
const actualParts: FSharpSet<string> = ofArray<string>(map_3<string, string>((s: string): string => s.trim().toLocaleLowerCase(), actualValue.split(",")), {
|
|
550
521
|
Compare: comparePrimitives,
|
|
551
522
|
});
|
|
552
|
-
return isSubset<string>(ofList_1<string>(
|
|
523
|
+
return isSubset<string>(ofList_1<string>(map_1<string, string>((s_1: string): string => s_1.trim().toLocaleLowerCase(), values_2), {
|
|
553
524
|
Compare: comparePrimitives,
|
|
554
525
|
}), actualParts);
|
|
555
526
|
}
|
|
@@ -615,9 +586,9 @@ export function evaluateFieldConditionWithConditionValue(actualFieldValue: Share
|
|
|
615
586
|
case 0:
|
|
616
587
|
return evaluateMatrixItemCondition(actualMatrix!, evaluator, expectedMatrix!);
|
|
617
588
|
default:
|
|
618
|
-
return evaluateFieldCondition((actualFieldValue.tag === /* Multiple */ 1) ? join(",", toList<string>(
|
|
589
|
+
return evaluateFieldCondition((actualFieldValue.tag === /* Multiple */ 1) ? join(",", toList<string>(map_2<Shared_FieldAnswer, string>((a: Shared_FieldAnswer): string => a.Value, actualFieldValue.fields[0], {
|
|
619
590
|
Compare: comparePrimitives,
|
|
620
|
-
}))) : ((actualFieldValue.tag === /* Matrix */ 2) ? join(",",
|
|
591
|
+
}))) : ((actualFieldValue.tag === /* Matrix */ 2) ? join(",", map_1<[Shared_MatrixItemKey, string], string>((tupledArg: [Shared_MatrixItemKey, string]): string => tupledArg[1], toList_1<Shared_MatrixItemKey, string>(actualFieldValue.fields[0].Values))) : ((actualFieldValue.tag === /* PluginData */ 3) ? ((pluginData = actualFieldValue.fields[0], toString(0, Auto_generateBoxedEncoder_437914C6(list_type(Shared_PluginDataProperty_$reflection()), undefined, undefined, undefined)(pluginData)))) : actualFieldValue.fields[0].Value)), evaluator, (expectedConditionValue.tag === /* Multiple */ 1) ? join(",", toList<string>(expectedConditionValue.fields[0])) : ((expectedConditionValue.tag === /* Matrix */ 2) ? join(",", map_1<[Shared_MatrixItemKey, string], string>((tupledArg_1: [Shared_MatrixItemKey, string]): string => tupledArg_1[1], toList_1<Shared_MatrixItemKey, string>(expectedConditionValue.fields[0]))) : ((expectedConditionValue.tag === /* PluginData */ 3) ? ((pluginData_1 = expectedConditionValue.fields[0], toString(0, Auto_generateBoxedEncoder_437914C6(Shared_PluginDataProperty_$reflection(), undefined, undefined, undefined)(pluginData_1)))) : expectedConditionValue.fields[0])));
|
|
621
592
|
}
|
|
622
593
|
}
|
|
623
594
|
|
|
@@ -667,7 +638,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
667
638
|
}
|
|
668
639
|
}
|
|
669
640
|
else {
|
|
670
|
-
const actualFieldValueOpt: Option<Shared_FieldValue_$union> = (conditionValue.tag === /* Matrix */ 2) ? ((formSpecForScores != null) ? ((data_1 = value_4(formSpecForScores),
|
|
641
|
+
const actualFieldValueOpt: Option<Shared_FieldValue_$union> = (conditionValue.tag === /* Matrix */ 2) ? ((formSpecForScores != null) ? ((data_1 = value_4(formSpecForScores), map<FieldDetails$1<Spec_FieldType_$union>, Shared_FieldValue_$union>((details_1: FieldDetails$1<Spec_FieldType_$union>): Shared_FieldValue_$union => details_1.FieldValue, getFieldDetails(data_1, fieldKey)))) : undefined) : undefined;
|
|
671
642
|
if (actualFieldValueOpt == null) {
|
|
672
643
|
const matchValue_2: Option<string> = tryFind_1<Shared_FieldKey, string>(fieldKey, fieldValues);
|
|
673
644
|
if (matchValue_2 == null) {
|
|
@@ -760,7 +731,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
760
731
|
const conditions: FSharpList<ClinicalPathway_TransitionCondition_$union> = condition.fields[1];
|
|
761
732
|
switch (logicalOp.tag) {
|
|
762
733
|
case /* Or */ 1: {
|
|
763
|
-
const results_1: FSharpList<TransitionStatus_$union> =
|
|
734
|
+
const results_1: FSharpList<TransitionStatus_$union> = map_1<ClinicalPathway_TransitionCondition_$union, TransitionStatus_$union>((condition_2: ClinicalPathway_TransitionCondition_$union): TransitionStatus_$union => evaluateTransitionWithPartialData(resolver, formSpec, fieldValues, visitedStates, formSpecForScores, condition_2), conditions);
|
|
764
735
|
if (exists<TransitionStatus_$union>((r_3: TransitionStatus_$union): boolean => equals(r_3, TransitionStatus_Satisfied()), results_1)) {
|
|
765
736
|
return TransitionStatus_Satisfied();
|
|
766
737
|
}
|
|
@@ -809,7 +780,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
809
780
|
}
|
|
810
781
|
}
|
|
811
782
|
default: {
|
|
812
|
-
const results: FSharpList<TransitionStatus_$union> =
|
|
783
|
+
const results: FSharpList<TransitionStatus_$union> = map_1<ClinicalPathway_TransitionCondition_$union, TransitionStatus_$union>((condition_1: ClinicalPathway_TransitionCondition_$union): TransitionStatus_$union => evaluateTransitionWithPartialData(resolver, formSpec, fieldValues, visitedStates, formSpecForScores, condition_1), conditions);
|
|
813
784
|
if (exists<TransitionStatus_$union>((r: TransitionStatus_$union): boolean => equals(r, TransitionStatus_Failed()), results)) {
|
|
814
785
|
return TransitionStatus_Failed();
|
|
815
786
|
}
|
|
@@ -841,7 +812,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
841
812
|
const conditionValue_1: Shared_ConditionValue_$union = condition.fields[4];
|
|
842
813
|
const optionValueOpt: Option<string> = (formSpec == null) ? undefined : bind<Spec_FormField$1<Spec_FieldType_$union>, string>((field_5: Spec_FormField$1<Spec_FieldType_$union>): Option<string> => {
|
|
843
814
|
const fieldType = field_5.FieldType as Spec_FieldType_$union;
|
|
844
|
-
return
|
|
815
|
+
return map<Shared_FieldOption, string>((opt_1: Shared_FieldOption): string => opt_1.Value, tryFind<Shared_FieldOption>((opt: Shared_FieldOption): boolean => equals(opt.OptionKey, optionKey), (fieldType.tag === /* SingleChoice */ 13) ? fieldType.fields[0].Options : ((fieldType.tag === /* Radio */ 12) ? fieldType.fields[0].Options : ((fieldType.tag === /* Dropdown */ 14) ? fieldType.fields[0].Options : ((fieldType.tag === /* MultiChoice */ 15) ? fieldType.fields[0].Options : ((fieldType.tag === /* CheckboxList */ 16) ? fieldType.fields[0].Options : empty<Shared_FieldOption>()))))));
|
|
845
816
|
}, tryFind<Spec_FormField$1<Spec_FieldType_$union>>((field_4: Spec_FormField$1<Spec_FieldType_$union>): boolean => equals(field_4.FieldKey, fieldKey_2), collect<Spec_FormStep$1<Spec_FieldType_$union>, Spec_FormField$1<Spec_FieldType_$union>>((step_2: Spec_FormStep$1<Spec_FieldType_$union>): FSharpList<Spec_FormField$1<Spec_FieldType_$union>> => step_2.Fields, value_4(formSpec).Steps)));
|
|
846
817
|
const matchValue_4: Option<string> = tryFind_1<Shared_FieldKey, string>(fieldKey_2, fieldValues);
|
|
847
818
|
if (optionValueOpt == null) {
|
|
@@ -853,7 +824,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
853
824
|
else {
|
|
854
825
|
const actualValueStr_1: string = value_4(matchValue_4);
|
|
855
826
|
const optionValue: string = value_4(optionValueOpt);
|
|
856
|
-
const actualValues: FSharpSet<string> = ofArray<string>(
|
|
827
|
+
const actualValues: FSharpSet<string> = ofArray<string>(map_3<string, string>((s: string): string => s.trim().toLocaleLowerCase(), actualValueStr_1.split(",")), {
|
|
857
828
|
Compare: comparePrimitives,
|
|
858
829
|
});
|
|
859
830
|
const containsOption: boolean = contains<string>(optionValue.trim().toLocaleLowerCase(), actualValues);
|
|
@@ -887,7 +858,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
887
858
|
return TransitionStatus_Failed();
|
|
888
859
|
}
|
|
889
860
|
default:
|
|
890
|
-
if (evaluateFieldCondition(actualValueStr_1, evaluator_2, (conditionValue_1.tag === /* Multiple */ 1) ? join(",", toList<string>(conditionValue_1.fields[0])) : ((conditionValue_1.tag === /* Matrix */ 2) ? join(",",
|
|
861
|
+
if (evaluateFieldCondition(actualValueStr_1, evaluator_2, (conditionValue_1.tag === /* Multiple */ 1) ? join(",", toList<string>(conditionValue_1.fields[0])) : ((conditionValue_1.tag === /* Matrix */ 2) ? join(",", map_1<[Shared_MatrixItemKey, string], string>((tupledArg: [Shared_MatrixItemKey, string]): string => tupledArg[1], toList_1<Shared_MatrixItemKey, string>(conditionValue_1.fields[0]))) : ((conditionValue_1.tag === /* PluginData */ 3) ? ((pluginData = conditionValue_1.fields[0], toString(0, Auto_generateBoxedEncoder_437914C6(Shared_PluginDataProperty_$reflection(), undefined, undefined, undefined)(pluginData)))) : conditionValue_1.fields[0])))) {
|
|
891
862
|
return TransitionStatus_Satisfied();
|
|
892
863
|
}
|
|
893
864
|
else {
|
|
@@ -901,14 +872,14 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
901
872
|
const fieldKey_3: Shared_FieldKey = condition.fields[0];
|
|
902
873
|
const evaluator_3: ClinicalPathway_FieldEvaluator_$union = condition.fields[2];
|
|
903
874
|
const conditionValue_2: Shared_ConditionValue_$union = condition.fields[3];
|
|
904
|
-
const actualFieldValueOpt_1: Option<Shared_FieldValue_$union> = bind<Spec_FormSpec$1<Spec_FieldType_$union>, Shared_FieldValue_$union>((spec_4: Spec_FormSpec$1<Spec_FieldType_$union>): Option<Shared_FieldValue_$union> =>
|
|
875
|
+
const actualFieldValueOpt_1: Option<Shared_FieldValue_$union> = bind<Spec_FormSpec$1<Spec_FieldType_$union>, Shared_FieldValue_$union>((spec_4: Spec_FormSpec$1<Spec_FieldType_$union>): Option<Shared_FieldValue_$union> => map<FieldDetails$1<Spec_FieldType_$union>, Shared_FieldValue_$union>((details_3: FieldDetails$1<Spec_FieldType_$union>): Shared_FieldValue_$union => details_3.FieldValue, getFieldDetails(spec_4, fieldKey_3)), formSpec);
|
|
905
876
|
if (actualFieldValueOpt_1 == null) {
|
|
906
877
|
return TransitionStatus_Pending(singleton(fieldKey_3.fields[0]));
|
|
907
878
|
}
|
|
908
879
|
else {
|
|
909
880
|
const actualFieldValue_2: Shared_FieldValue_$union = value_4(actualFieldValueOpt_1);
|
|
910
881
|
try {
|
|
911
|
-
const pluginIdOpt: Option<string> = filter<string>((id: string): boolean => !isNullOrEmpty(id), bind<Spec_FormSpec$1<Spec_FieldType_$union>, string>((spec_5: Spec_FormSpec$1<Spec_FieldType_$union>): Option<string> =>
|
|
882
|
+
const pluginIdOpt: Option<string> = filter<string>((id: string): boolean => !isNullOrEmpty(id), bind<Spec_FormSpec$1<Spec_FieldType_$union>, string>((spec_5: Spec_FormSpec$1<Spec_FieldType_$union>): Option<string> => map<Spec_FormField$1<Spec_FieldType_$union>, string>((f_1: Spec_FormField$1<Spec_FieldType_$union>): string => {
|
|
912
883
|
const ft = f_1.FieldType as Spec_FieldType_$union;
|
|
913
884
|
switch (ft.tag) {
|
|
914
885
|
case /* PluginField */ 22:
|
|
@@ -921,7 +892,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
921
892
|
}, tryFind<Spec_FormField$1<Spec_FieldType_$union>>((f: Spec_FormField$1<Spec_FieldType_$union>): boolean => equals(f.FieldKey, fieldKey_3), collect<Spec_FormStep$1<Spec_FieldType_$union>, Spec_FormField$1<Spec_FieldType_$union>>((s_1: Spec_FormStep$1<Spec_FieldType_$union>): FSharpList<Spec_FormField$1<Spec_FieldType_$union>> => s_1.Fields, spec_5.Steps))), formSpec));
|
|
922
893
|
return evaluateFieldCondition((pluginIdOpt == null) ? "" : defaultArg(bind<IPluginValueConverter, string>((converter: IPluginValueConverter): Option<string> => {
|
|
923
894
|
let matrixValue: Shared_MatrixAnswer;
|
|
924
|
-
return orElse(
|
|
895
|
+
return orElse(map<Shared_PluginDataProperty, string>((p: Shared_PluginDataProperty): string => p.Value, converter.GetPropertyByKey(propertyKey, actualFieldValue_2)), (actualFieldValue_2.tag === /* Matrix */ 2) ? ((matrixValue = actualFieldValue_2.fields[0], bind<Shared_PluginDataProperty, string>((propMeta: Shared_PluginDataProperty): Option<string> => {
|
|
925
896
|
if (propMeta.Name === "TotalScore") {
|
|
926
897
|
return int32ToString(sumBy<[Shared_MatrixItemKey, string], int32>((tupledArg_1: [Shared_MatrixItemKey, string]): int32 => {
|
|
927
898
|
let matchValue_6: [boolean, int32];
|
|
@@ -944,7 +915,7 @@ export function evaluateTransitionWithPartialData(resolver: ((arg0: string) => S
|
|
|
944
915
|
return undefined;
|
|
945
916
|
}
|
|
946
917
|
}, converter.GetPropertyMetadataByKey(propertyKey)))) : undefined);
|
|
947
|
-
}, PluginValueRegistry_tryGet(value_4(pluginIdOpt))), ""), evaluator_3, (conditionValue_2.tag === /* Multiple */ 1) ? join(",", toList<string>(conditionValue_2.fields[0])) : ((conditionValue_2.tag === /* Matrix */ 2) ? join(",",
|
|
918
|
+
}, PluginValueRegistry_tryGet(value_4(pluginIdOpt))), ""), evaluator_3, (conditionValue_2.tag === /* Multiple */ 1) ? join(",", toList<string>(conditionValue_2.fields[0])) : ((conditionValue_2.tag === /* Matrix */ 2) ? join(",", map_1<[Shared_MatrixItemKey, string], string>((tupledArg_2: [Shared_MatrixItemKey, string]): string => tupledArg_2[1], toList_1<Shared_MatrixItemKey, string>(conditionValue_2.fields[0]))) : ((conditionValue_2.tag === /* PluginData */ 3) ? "" : conditionValue_2.fields[0]))) ? TransitionStatus_Satisfied() : TransitionStatus_Failed();
|
|
948
919
|
}
|
|
949
920
|
catch (matchValue_7: any) {
|
|
950
921
|
return TransitionStatus_Failed();
|
|
@@ -999,7 +970,7 @@ export function isTerminalState(state: ClinicalPathway_StateDefinition): boolean
|
|
|
999
970
|
*/
|
|
1000
971
|
export function evaluateAllTransitions<FieldType>(context: ExecutionContext): FSharpList<MatchedTransition> {
|
|
1001
972
|
const fieldValues: FSharpMap<Shared_FieldKey, string> = FieldResolver_extractFieldValues(context.FieldResolver, context.FormSpec);
|
|
1002
|
-
return
|
|
973
|
+
return map_1<ClinicalPathway_TransitionDefinition, MatchedTransition>((transition: ClinicalPathway_TransitionDefinition): MatchedTransition => {
|
|
1003
974
|
const status: TransitionStatus_$union = evaluateTransitionWithPartialData(context.FieldResolver, context.FormSpec, fieldValues, context.VisitedStates, context.FormSpec, transition.Condition);
|
|
1004
975
|
return new MatchedTransition(transition, defaultArg(transition.Priority, 999), status);
|
|
1005
976
|
}, filter_1<ClinicalPathway_TransitionDefinition>((t: ClinicalPathway_TransitionDefinition): boolean => contains<Shared_StateKey>(t.FromState, context.CurrentStates), context.PathwaySpec.Transitions));
|
|
@@ -1149,11 +1120,11 @@ export function initializeExecution(formSpec: Spec_FormSpec$1<Spec_FieldType_$un
|
|
|
1149
1120
|
let initialStates: FSharpList<Shared_StateKey>;
|
|
1150
1121
|
const matchValue_1: Option<Shared_StateKey> = pathway.InitialState;
|
|
1151
1122
|
if (matchValue_1 == null) {
|
|
1152
|
-
const statesWithIncoming: FSharpSet<Shared_StateKey> = ofList_1<Shared_StateKey>(
|
|
1123
|
+
const statesWithIncoming: FSharpSet<Shared_StateKey> = ofList_1<Shared_StateKey>(map_1<ClinicalPathway_TransitionDefinition, Shared_StateKey>((t: ClinicalPathway_TransitionDefinition): Shared_StateKey => t.ToState, pathway.Transitions), {
|
|
1153
1124
|
Compare: compare,
|
|
1154
1125
|
});
|
|
1155
|
-
const candidates: FSharpList<Shared_StateKey> =
|
|
1156
|
-
initialStates = (isEmpty(candidates) ? defaultArg(
|
|
1126
|
+
const candidates: FSharpList<Shared_StateKey> = map_1<ClinicalPathway_StateDefinition, Shared_StateKey>((s_1: ClinicalPathway_StateDefinition): Shared_StateKey => s_1.StateKey, filter_1<ClinicalPathway_StateDefinition>((s: ClinicalPathway_StateDefinition): boolean => !contains<Shared_StateKey>(s.StateKey, statesWithIncoming), pathway.States));
|
|
1127
|
+
initialStates = (isEmpty(candidates) ? defaultArg(map<ClinicalPathway_StateDefinition, FSharpList<Shared_StateKey>>((s_2: ClinicalPathway_StateDefinition): FSharpList<Shared_StateKey> => singleton(s_2.StateKey), tryHead<ClinicalPathway_StateDefinition>(pathway.States)), empty<Shared_StateKey>()) : candidates);
|
|
1157
1128
|
}
|
|
1158
1129
|
else {
|
|
1159
1130
|
initialStates = singleton(value_4(matchValue_1));
|
|
@@ -1164,7 +1135,7 @@ export function initializeExecution(formSpec: Spec_FormSpec$1<Spec_FieldType_$un
|
|
|
1164
1135
|
Compare: compare,
|
|
1165
1136
|
}), empty_1<Shared_StateKey>({
|
|
1166
1137
|
Compare: compare,
|
|
1167
|
-
}), empty<MatchedTransition>(), empty<MatchedTransition>(), empty<ClinicalPathway_ActionInfo_$union>(), resolver,
|
|
1138
|
+
}), empty<MatchedTransition>(), empty<MatchedTransition>(), empty<ClinicalPathway_ActionInfo_$union>(), resolver, map_1<Shared_StateKey, ExecutionLogEntry>((stateKey: Shared_StateKey): ExecutionLogEntry => (new ExecutionLogEntry(now(), stateKey, "Initialized", "Starting state")), initialStates));
|
|
1168
1139
|
}
|
|
1169
1140
|
}
|
|
1170
1141
|
|
|
@@ -1179,7 +1150,7 @@ export function resolveFieldValueSource(valueSource: ClinicalPathway_FieldValueS
|
|
|
1179
1150
|
const optionKey: Shared_FieldOptionKey = valueSource.fields[0];
|
|
1180
1151
|
return defaultArg(tryPick<Spec_FormField$1<Spec_FieldType_$union>, string>((field: Spec_FormField$1<Spec_FieldType_$union>): Option<string> => {
|
|
1181
1152
|
const fieldType = field.FieldType as Spec_FieldType_$union;
|
|
1182
|
-
return
|
|
1153
|
+
return map<Shared_FieldOption, string>((opt_1: Shared_FieldOption): string => opt_1.Description, tryFind<Shared_FieldOption>((opt: Shared_FieldOption): boolean => equals(opt.OptionKey, optionKey), (fieldType.tag === /* SingleChoice */ 13) ? fieldType.fields[0].Options : ((fieldType.tag === /* MultiChoice */ 15) ? fieldType.fields[0].Options : ((fieldType.tag === /* CheckboxList */ 16) ? fieldType.fields[0].Options : ((fieldType.tag === /* Dropdown */ 14) ? fieldType.fields[0].Options : ((fieldType.tag === /* Radio */ 12) ? fieldType.fields[0].Options : empty<Shared_FieldOption>()))))));
|
|
1183
1154
|
}, collect<Spec_FormStep$1<Spec_FieldType_$union>, Spec_FormField$1<Spec_FieldType_$union>>((step: Spec_FormStep$1<Spec_FieldType_$union>): FSharpList<Spec_FormField$1<Spec_FieldType_$union>> => step.Fields, formSpec.Steps)), "");
|
|
1184
1155
|
}
|
|
1185
1156
|
default:
|
|
@@ -1255,12 +1226,12 @@ export function executeStep(context_mut: ExecutionContext, maxIterations_mut: in
|
|
|
1255
1226
|
return new ExecutionContext(context.PathwaySpec, context.FormSpec, context.CurrentStates, context.VisitedStates, context.CompletedStates, active, pending, context.ExecutedActions, context.FieldResolver, context.ExecutionLog);
|
|
1256
1227
|
}
|
|
1257
1228
|
else {
|
|
1258
|
-
const newStates: FSharpSet<Shared_StateKey> = ofList_1<Shared_StateKey>(
|
|
1229
|
+
const newStates: FSharpSet<Shared_StateKey> = ofList_1<Shared_StateKey>(map_1<MatchedTransition, Shared_StateKey>((t: MatchedTransition): Shared_StateKey => t.Transition.ToState, selectedTransitions), {
|
|
1259
1230
|
Compare: compare,
|
|
1260
1231
|
});
|
|
1261
1232
|
const newActions: FSharpList<ClinicalPathway_ActionInfo_$union> = collect<ClinicalPathway_StateDefinition, ClinicalPathway_ActionInfo_$union>(extractActionsFromState, choose<Shared_StateKey, ClinicalPathway_StateDefinition>((sk: Shared_StateKey): Option<ClinicalPathway_StateDefinition> => findState(sk, context.PathwaySpec.States), toList<Shared_StateKey>(newStates)));
|
|
1262
1233
|
const updatedFormSpec: Spec_FormSpec$1<Spec_FieldType_$union> = executeActions(newActions, context.FormSpec);
|
|
1263
|
-
const newLogEntries: FSharpList<ExecutionLogEntry> =
|
|
1234
|
+
const newLogEntries: FSharpList<ExecutionLogEntry> = map_1<MatchedTransition, ExecutionLogEntry>((t_1: MatchedTransition): ExecutionLogEntry => {
|
|
1264
1235
|
let arg: string, arg_1: string;
|
|
1265
1236
|
return new ExecutionLogEntry(now(), t_1.Transition.ToState, "Transitioned", (arg = t_1.Transition.FromState.fields[0], (arg_1 = t_1.Transition.TransitionKey.fields[0], toText(printf("From %s via %s"))(arg)(arg_1))));
|
|
1266
1237
|
}, selectedTransitions);
|
|
@@ -1287,11 +1258,11 @@ export function executeIncremental(context: ExecutionContext, formSpec: Spec_For
|
|
|
1287
1258
|
const startingAtTerminal: boolean = exists<ClinicalPathway_StateDefinition>(isTerminalState, choose<Shared_StateKey, ClinicalPathway_StateDefinition>((sk: Shared_StateKey): Option<ClinicalPathway_StateDefinition> => findState(sk, context.PathwaySpec.States), toList<Shared_StateKey>(context.CurrentStates)));
|
|
1288
1259
|
const updatedContext: ExecutionContext = new ExecutionContext(context.PathwaySpec, formSpec, context.CurrentStates, context.VisitedStates, context.CompletedStates, context.ActiveTransitions, context.PendingTransitions, context.ExecutedActions, context.FieldResolver, context.ExecutionLog);
|
|
1289
1260
|
const newContext: ExecutionContext = executeStep(updatedContext, 100);
|
|
1290
|
-
return new IncrementalExecutionResult(newContext,
|
|
1261
|
+
return new IncrementalExecutionResult(newContext, map_1<Shared_StateKey, string>((_arg: Shared_StateKey): string => _arg.fields[0], toList<Shared_StateKey>(difference<Shared_StateKey>(newContext.CurrentStates, updatedContext.CurrentStates))), (previousTransitionKeys = ofList_1<Shared_TransitionKey>(map_1<MatchedTransition, Shared_TransitionKey>((t: MatchedTransition): Shared_TransitionKey => t.Transition.TransitionKey, updatedContext.ActiveTransitions), {
|
|
1291
1262
|
Compare: compare,
|
|
1292
|
-
}), (newKeys = difference<Shared_TransitionKey>(ofList_1<Shared_TransitionKey>(
|
|
1263
|
+
}), (newKeys = difference<Shared_TransitionKey>(ofList_1<Shared_TransitionKey>(map_1<MatchedTransition, Shared_TransitionKey>((t_1: MatchedTransition): Shared_TransitionKey => t_1.Transition.TransitionKey, newContext.ActiveTransitions), {
|
|
1293
1264
|
Compare: compare,
|
|
1294
|
-
}), previousTransitionKeys),
|
|
1265
|
+
}), previousTransitionKeys), map_1<MatchedTransition, ClinicalPathway_TransitionDefinition>((t_3: MatchedTransition): ClinicalPathway_TransitionDefinition => t_3.Transition, filter_1<MatchedTransition>((t_2: MatchedTransition): boolean => contains<Shared_TransitionKey>(t_2.Transition.TransitionKey, newKeys), newContext.ActiveTransitions)))), predictOutcomes(newContext), calculateCompletionPercentage(newContext), isExecutionComplete(newContext));
|
|
1295
1266
|
}
|
|
1296
1267
|
|
|
1297
1268
|
/**
|
|
@@ -1299,8 +1270,8 @@ export function executeIncremental(context: ExecutionContext, formSpec: Spec_For
|
|
|
1299
1270
|
*/
|
|
1300
1271
|
export function getVisualizationState(context: ExecutionContext): VisualizationState {
|
|
1301
1272
|
const patternInput: [FSharpList<MatchedTransition>, FSharpList<MatchedTransition>, FSharpList<MatchedTransition>] = categorizeTransitions(context.ActiveTransitions);
|
|
1302
|
-
const completedTransitions: FSharpList<string> =
|
|
1303
|
-
return new VisualizationState(context.CurrentStates, context.VisitedStates,
|
|
1273
|
+
const completedTransitions: FSharpList<string> = map_1<ExecutionLogEntry, string>((log_1: ExecutionLogEntry): string => log_1.Details, filter_1<ExecutionLogEntry>((log: ExecutionLogEntry): boolean => (log.Action === "Transitioned"), context.ExecutionLog));
|
|
1274
|
+
return new VisualizationState(context.CurrentStates, context.VisitedStates, map_1<MatchedTransition, Shared_TransitionKey>((t: MatchedTransition): Shared_TransitionKey => t.Transition.TransitionKey, patternInput[0]), map_1<MatchedTransition, Shared_TransitionKey>((t_1: MatchedTransition): Shared_TransitionKey => t_1.Transition.TransitionKey, patternInput[1]), completedTransitions, predictOutcomes(context));
|
|
1304
1275
|
}
|
|
1305
1276
|
|
|
1306
1277
|
/**
|
|
@@ -324,7 +324,7 @@ export function Form_bmiField<Values, Output>(config: FieldConfig$4<BMIField_Att
|
|
|
324
324
|
return BMIField_form<Values, IField$1<Values>, Output>()(BMIField_Field$1_$ctor_Z1543D607)(config);
|
|
325
325
|
}
|
|
326
326
|
|
|
327
|
-
export const Form_pluginConfig: Spec_PluginFieldConfig = new Spec_PluginFieldConfig("Fable.Form.Simple.Bulma.Fields.BMIField");
|
|
327
|
+
export const Form_pluginConfig: Spec_PluginFieldConfig = new Spec_PluginFieldConfig("Fable.Form.Simple.Bulma.Fields.BMIField", undefined, undefined);
|
|
328
328
|
|
|
329
329
|
export const Form_PropertyKeys_Height: Shared_PluginPropertyKey = new Shared_PluginPropertyKey("276106c7-09ce-44cf-9076-4a4985775a90");
|
|
330
330
|
|