@f1studio/form-spec 5.0.0-alpha.141 → 5.0.0-alpha.142

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.
@@ -84,6 +84,9 @@ _export(exports, {
84
84
  get serializeVitalsData () {
85
85
  return serializeVitalsData;
86
86
  },
87
+ get validateVitalsData () {
88
+ return validateVitalsData;
89
+ },
87
90
  get validateVitalsPluginData () {
88
91
  return validateVitalsPluginData;
89
92
  },
@@ -491,16 +494,55 @@ function validateVitalsProperty(propertyName, rawValue) {
491
494
  return new VitalPropertyValidation(propertyName, propertyName, "", rawValue, false, "invalid", "Unknown vital sign property: " + propertyName);
492
495
  }
493
496
  }
494
- function validateVitalsPluginData(properties) {
495
- const results = (0, _Array.map)((def)=>{
496
- const propOpt = (0, _List.tryFind)((p)=>p.Name === def.Name, properties);
497
- if (propOpt != null) {
498
- return validateVitalsProperty(def.Name, (0, _Option.value)(propOpt).Value);
497
+ function validateTypedValue(def, value) {
498
+ if (value != null) {
499
+ const v = (0, _Option.value)(value);
500
+ const rawValue = v.toString();
501
+ if (!def.IsValid(v)) {
502
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, rawValue, false, "invalid", def.DisplayName + " must be " + def.ValidRangeDescription + ", got " + rawValue + def.Unit);
503
+ } else if (def.IsCritical(v)) {
504
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, rawValue, true, "critical", def.DisplayName + " " + rawValue + def.Unit + " — CRITICAL");
499
505
  } else {
500
- return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, "", true, "empty", "");
506
+ const status = getVitalStatus(v, def.IsValid, def.IsCritical, def.IsNormal);
507
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, rawValue, true, status, status === "abnormal" ? def.DisplayName + " " + rawValue + def.Unit + " — above normal" : "");
501
508
  }
502
- }, vitalPropertyDefs);
509
+ } else {
510
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, "", true, "empty", "");
511
+ }
512
+ }
513
+ function validateVitalsData(data) {
514
+ const results = (0, _Array.map)((tupledArg)=>validateTypedValue(tupledArg[0], tupledArg[1]), (0, _Array.zip)(vitalPropertyDefs, [
515
+ data.Temperature,
516
+ data.SystolicBP,
517
+ data.DiastolicBP,
518
+ data.Pulse,
519
+ data.Respiration,
520
+ data.OxygenSaturation,
521
+ data.PainScale
522
+ ]));
503
523
  return new VitalsValidationResult(results.every((r)=>r.IsValid), results.some((r_1)=>r_1.ClinicalStatus === "critical"), results);
524
+ }
525
+ function validateVitalsPluginData(properties) {
526
+ const getPropertyValue = (name)=>(0, _Option.bind)((p_1)=>{
527
+ if ((0, _String.isNullOrWhiteSpace)(p_1.Value)) {
528
+ return undefined;
529
+ } else {
530
+ let matchValue;
531
+ let outArg = 0;
532
+ matchValue = [
533
+ (0, _Double.tryParse)(p_1.Value, new _Types.FSharpRef(()=>outArg, (v)=>{
534
+ outArg = v;
535
+ })),
536
+ outArg
537
+ ];
538
+ if (matchValue[0]) {
539
+ return matchValue[1];
540
+ } else {
541
+ return undefined;
542
+ }
543
+ }
544
+ }, (0, _List.tryFind)((p)=>p.Name === name, properties));
545
+ return validateVitalsData(new VitalsData(getPropertyValue("temperature"), getPropertyValue("systolic_bp"), getPropertyValue("diastolic_bp"), getPropertyValue("pulse"), getPropertyValue("respiration"), getPropertyValue("oxygen_saturation"), getPropertyValue("pain_scale")));
504
546
  } //# sourceMappingURL=VitalsLogic.ts.map
505
547
 
506
548
  //# sourceMappingURL=VitalsLogic.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../FormSpec.TS/plugins/vitals/src/VitalsLogic.ts"],"names":["temp","sys","dia","pulse","resp","sat","pain","value","parts","tryParseFloat","s","matchValue","outArg","optToString","opt","vitalsData","v","isCritical","isValid","isNormal","isValidTemperature","isCriticalTemperature","isNormalTemperature","isValidSystolicBP","isCriticalSystolicBP","isValidDiastolicBP","isCriticalDiastolicBP","isValidPulse","isCriticalPulse","isValidRespiration","isCriticalRespiration","isValidOxygenSat","isCriticalOxygenSat","isValidPainScale","defOpt","d","propertyName","vitalPropertyDefs","def","rawValue","status","getVitalStatus","results","propOpt","p","properties","validateVitalsProperty","array","r"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../FormSpec.TS/plugins/vitals/src/VitalsLogic.ts"],"names":["temp","sys","dia","pulse","resp","sat","pain","value","parts","tryParseFloat","s","matchValue","outArg","optToString","opt","vitalsData","v","isCritical","isValid","isNormal","isValidTemperature","isCriticalTemperature","isNormalTemperature","isValidSystolicBP","isCriticalSystolicBP","isValidDiastolicBP","isCriticalDiastolicBP","isValidPulse","isCriticalPulse","isValidRespiration","isCriticalRespiration","isValidOxygenSat","isCriticalOxygenSat","isValidPainScale","defOpt","d","propertyName","vitalPropertyDefs","def","rawValue","status","getVitalStatus","results","validateTypedValue","tupledArg","data","array","r","getPropertyValue","p","name","properties","validateVitalsData"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../plugins/vitals/src/VitalsLogic.fs"],"names":["temp","sys","dia","pulse","resp","sat","pain","value","parts","tryParseFloat","s","matchValue","outArg","optToString","opt","vitalsData","v","isCritical","isValid","isNormal","isValidTemperature","isCriticalTemperature","isNormalTemperature","isValidSystolicBP","isCriticalSystolicBP","isValidDiastolicBP","isCriticalDiastolicBP","isValidPulse","isCriticalPulse","isValidRespiration","isCriticalRespiration","isValidOxygenSat","isCriticalOxygenSat","isValidPainScale","defOpt","d","propertyName","vitalPropertyDefs","def","rawValue","status","getVitalStatus","results","propOpt","p","properties","validateVitalsProperty","array","r"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwC2C,QAAA,AAAAA,QAAQ;AAAQ,eAAA,AAAAA,QAAQ;;;eAAxB;;;;;AACF,QAAA,AAAAC,OAAO;AAAQ,eAAA,AAAAA,OAAO;;;eAAtB;;;;;AACC,QAAA,AAAAC,OAAO;AAAQ,eAAA,AAAAA,OAAO;;;eAAtB;;;;;AACJ,QAAA,AAAAC,SAAS;AAAQ,eAAA,AAAAA,SAAS;;;eAA1B;;;;;AACK,QAAA,AAAAC,QAAQ;AAAO,eAAA,AAAAA,QAAQ;;;eAAvB;;;;;AACH,QAAA,AAAAC,OAAO;AAAQ,eAAA,AAAAA,OAAO;;;eAAtB;;;;;AACC,QAAA,AAAAC,QAAQ;AAAO,eAAA,AAAAA,QAAQ;;;eAAvB;;;;;AAGK,QAAA,AAAAN,OAAO;eAAP;;;AAAe,eAAA,AAAAA,OAAO;;;;;AACxB,QAAA,AAAAC,MAAM;eAAN;;;AAAc,eAAA,AAAAA,MAAM;;;;;AACnB,QAAA,AAAAC,MAAM;eAAN;;;AAAc,eAAA,AAAAA,MAAM;;;;;AACxB,QAAA,AAAAC,QAAQ;eAAR;;;AAAgB,eAAA,AAAAA,QAAQ;;;;;AACnB,QAAA,AAAAC,OAAO;eAAP;;;AAAe,eAAA,AAAAA,OAAO;;;;;WACzB,AAAAC,MAAM;;;;AAGL,QAAA,AAAAL,QAAQ;AAAQ,eAAA,AAAAA,QAAQ;;;eAAxB;;;;;AAOpC;AACI,YAAG,mBAA0BO;AACzB,mBAAA,eACkB,WAAmB,WAAoB,WAC7C,WAAoB,WAAyB,WAAkB;;;AAGvEC,oCAAQ,MAAAD,QAAY,iBAAZ;AACRE;AACA,oBAAG,mBAA0BC;AAAQ,2BAAA;;;AAE3BC;AAAAC;AAAAD,mCAAA,SAAgBD,GAAhB,sCAAAE;AAAAA;yBAAAA;AAAA,wBAAA,AAAAD;AACS,\u002BBAAA,AAAAA;;;AACR,\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\u002BB9CM,\u002BCAEG;AACKC,2DAAwB,iFAAuB,AAAAC,WAAS,AAAAN,WAA9CO;AACR,YAAA,AAAAF;AAKF,mBAAA,AAAAG,uBAAuB,AAAAR,UAAS,QAAhCK;;;AAHA,mBAAA,4BAAiB,AAAAL,UAAwB,AAAAA,iBAAwB,AAAAA,UACvD,IAAc,MAAuB,SAAmB;;OAN1ED;AAUJ,WAAA,2BACyB,AAAAU,AAAXL,uDAAkC,AAAAM,YACb,AAAAD,AAAXL,yDAAkC,AAAAM,uBAAmB,cAC5DN","file":null,"sourcesContent":null,"sourceRoot":null}
1
+ {"version":3,"sources":["../../../../../../plugins/vitals/src/VitalsLogic.fs"],"names":["temp","sys","dia","pulse","resp","sat","pain","value","parts","tryParseFloat","s","matchValue","outArg","optToString","opt","vitalsData","v","isCritical","isValid","isNormal","isValidTemperature","isCriticalTemperature","isNormalTemperature","isValidSystolicBP","isCriticalSystolicBP","isValidDiastolicBP","isCriticalDiastolicBP","isValidPulse","isCriticalPulse","isValidRespiration","isCriticalRespiration","isValidOxygenSat","isCriticalOxygenSat","isValidPainScale","defOpt","d","propertyName","vitalPropertyDefs","def","rawValue","status","getVitalStatus","results","validateTypedValue","tupledArg","data","array","r","getPropertyValue","p","name","properties","validateVitalsData"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwC2C,QAAA,AAAAA,QAAQ;AAAQ,eAAA,AAAAA,QAAQ;;;eAAxB;;;;;AACF,QAAA,AAAAC,OAAO;AAAQ,eAAA,AAAAA,OAAO;;;eAAtB;;;;;AACC,QAAA,AAAAC,OAAO;AAAQ,eAAA,AAAAA,OAAO;;;eAAtB;;;;;AACJ,QAAA,AAAAC,SAAS;AAAQ,eAAA,AAAAA,SAAS;;;eAA1B;;;;;AACK,QAAA,AAAAC,QAAQ;AAAO,eAAA,AAAAA,QAAQ;;;eAAvB;;;;;AACH,QAAA,AAAAC,OAAO;AAAQ,eAAA,AAAAA,OAAO;;;eAAtB;;;;;AACC,QAAA,AAAAC,QAAQ;AAAO,eAAA,AAAAA,QAAQ;;;eAAvB;;;;;AAGK,QAAA,AAAAN,OAAO;eAAP;;;AAAe,eAAA,AAAAA,OAAO;;;;;AACxB,QAAA,AAAAC,MAAM;eAAN;;;AAAc,eAAA,AAAAA,MAAM;;;;;AACnB,QAAA,AAAAC,MAAM;eAAN;;;AAAc,eAAA,AAAAA,MAAM;;;;;AACxB,QAAA,AAAAC,QAAQ;eAAR;;;AAAgB,eAAA,AAAAA,QAAQ;;;;;AACnB,QAAA,AAAAC,OAAO;eAAP;;;AAAe,eAAA,AAAAA,OAAO;;;;;WACzB,AAAAC,MAAM;;;;AAGL,QAAA,AAAAL,QAAQ;AAAQ,eAAA,AAAAA,QAAQ;;;eAAxB;;;;;AAOpC;AACI,YAAG,mBAA0BO;AACzB,mBAAA,eACkB,WAAmB,WAAoB,WAC7C,WAAoB,WAAyB,WAAkB;;;AAGvEC,oCAAQ,MAAAD,QAAY,iBAAZ;AACRE;AACA,oBAAG,mBAA0BC;AAAQ,2BAAA;;;AAE3BC;AAAAC;AAAAD,mCAAA,SAAgBD,GAAhB,sCAAAE;AAAAA;yBAAAA;AAAA,wBAAA,AAAAD;AACS,\u002BBAAA,AAAAA;;;AACR,\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\u002BCAEG,iJAA\u002BB,AAAAC,mBAAf,AAAAC,cAAA,AAAAA,eADnB,uCAAUP,oBATV,AAAAQ,kBACA,AAAAA,iBACA,AAAAA,kBACA,AAAAA,YACA,AAAAA,kBACA,AAAAA,uBACA,AAAAA;AAKJ,WAAA,2BACyB,AAAAC,AAAXJ,uDAAkC,AAAAK,YACb,AAAAD,AAAXJ,yDAAkC,AAAAK,uBAAmB,cAC5DL;;;;;;;AAKbM,gEAGG;AACC,YAAG,mBAA0B,AAAAC;AAAc,mBAAA;;;AAEjCtC;AAAAC;AAAAD,2BAAA,SAAgB,AAAAsC,WAAhB,sCAAArC;AAAAA;iBAAAA;AAAA,gBAAA,AAAAD;AACS,uBAAA,AAAAA;;;AACR,uBAAA;;;OANZ,iFAAuB,AAAAsC,WAASC,OADnCC;AAiBJ,WAAA,AAAAC,mBATW,eACO,AAAAJ,iBAAiB,gBAClB,AAAAA,iBAAiB,gBAChB,AAAAA,iBAAiB,iBACvB,AAAAA,iBAAiB,UACX,AAAAA,iBAAiB,gBACZ,AAAAA,iBAAiB,sBACxB,AAAAA,iBAAiB","file":null,"sourcesContent":null,"sourceRoot":null}
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # FormSpec – Build & Publish
2
2
 
3
- **Version: `5.0.0-alpha.141`**
3
+ **Version: `5.0.0-alpha.142`**
4
4
 
5
5
  TypeScript package generated from F# via Fable. Runtime uses external `@fable-org/fable-library-js`.
6
6
 
@@ -63,17 +63,17 @@ Notes:
63
63
  ### From Verdaccio (local testing)
64
64
 
65
65
  ```bash
66
- npm install @f1studio/form-spec@5.0.0-alpha.141 --registry http://localhost:4873
67
- pnpm add @f1studio/form-spec@5.0.0-alpha.141 --registry http://localhost:4873
68
- bun add @f1studio/form-spec@5.0.0-alpha.141 --registry http://localhost:4873
66
+ npm install @f1studio/form-spec@5.0.0-alpha.142 --registry http://localhost:4873
67
+ pnpm add @f1studio/form-spec@5.0.0-alpha.142 --registry http://localhost:4873
68
+ bun add @f1studio/form-spec@5.0.0-alpha.142 --registry http://localhost:4873
69
69
  ```
70
70
 
71
71
  ### From npm (public registry)
72
72
 
73
73
  ```bash
74
- npm install @f1studio/form-spec@5.0.0-alpha.141
75
- pnpm add @f1studio/form-spec@5.0.0-alpha.141
76
- bun add @f1studio/form-spec@5.0.0-alpha.141
74
+ npm install @f1studio/form-spec@5.0.0-alpha.142
75
+ pnpm add @f1studio/form-spec@5.0.0-alpha.142
76
+ bun add @f1studio/form-spec@5.0.0-alpha.142
77
77
  ```
78
78
 
79
79
  Entry points:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@f1studio/form-spec",
3
- "version": "5.0.0-alpha.141",
3
+ "version": "5.0.0-alpha.142",
4
4
  "description": "F1 Core - Form specification and types",
5
5
  "main": "./FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.js",
6
6
  "types": "./FormSpec.FS/Interop/FormSpec.Api.Option.d.ts",
@@ -36,6 +36,10 @@
36
36
  "./PathwayExecutor": {
37
37
  "types": "./PathwayExecutor.withPlugins.d.ts",
38
38
  "default": "./FormSpec.TS/PathwayExecutor.withPlugins.js"
39
+ },
40
+ "./plugins/VitalsLogic": {
41
+ "types": "./plugins/vitals/src/VitalsLogic.d.ts",
42
+ "default": "./FormSpec.TS/plugins/vitals/src/VitalsLogic.js"
39
43
  }
40
44
  },
41
45
  "files": [
@@ -1 +1 @@
1
- {"version":3,"file":"VitalsField.d.ts","sourceRoot":"","sources":["../../../../FormSpec.TS/plugins/vitals/src/VitalsField.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VitalsField.d.ts","sourceRoot":"","sources":["../../../../FormSpec.TS/plugins/vitals/src/VitalsField.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import { Option } from "@fable-org/fable-library-js/Option.js";
3
3
  import { float64 } from "@fable-org/fable-library-js/Int32.js";
4
4
  import { IComparable, IEquatable } from "@fable-org/fable-library-js/Util.js";
5
5
  import { TypeInfo } from "@fable-org/fable-library-js/Reflection.js";
6
- import { FSharpList } from "@fable-org/fable-library-js/List.js";
7
6
  import { Shared_PluginDataProperty } from "../../../FormSpec.FS/FormSpec.js";
7
+ import { FSharpList } from "@fable-org/fable-library-js/List.js";
8
8
  export declare class VitalsData extends Record implements IEquatable<VitalsData>, IComparable<VitalsData> {
9
9
  readonly Temperature: Option<float64>;
10
10
  readonly SystolicBP: Option<float64>;
@@ -66,7 +66,13 @@ export declare function VitalsValidationResult_$reflection(): TypeInfo;
66
66
  */
67
67
  export declare function validateVitalsProperty(propertyName: string, rawValue: string): VitalPropertyValidation;
68
68
  /**
69
- * Validate a full set of vitals plugin data. Returns per-property clinical results.
69
+ * Core validator operates on the typed domain object. Single source of medical truth.
70
+ * Studio calls this via parseVitalsData → validateVitalsData.
71
+ * HealixAI calls this via PluginDataProperty list → converter → validateVitalsData.
72
+ */
73
+ export declare function validateVitalsData(data: VitalsData): VitalsValidationResult;
74
+ /**
75
+ * Validate plugin data from the wire format. Parses to VitalsData, then delegates to validateVitalsData.
70
76
  */
71
77
  export declare function validateVitalsPluginData(properties: FSharpList<Shared_PluginDataProperty>): VitalsValidationResult;
72
78
  //# sourceMappingURL=VitalsLogic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VitalsLogic.d.ts","sourceRoot":"","sources":["../../../../FormSpec.TS/plugins/vitals/src/VitalsLogic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VitalsLogic.d.ts","sourceRoot":"","sources":["../../../../FormSpec.TS/plugins/vitals/src/VitalsLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAA2C,MAAM,EAAE,MAAM,uCAAuC,CAAC;AACxG,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAA2F,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAI9J,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAwB,MAAM,qCAAqC,CAAC;AAEvF,qBAAa,UAAW,SAAQ,MAAO,YAAW,UAAU,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC;IAC7F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACxB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;CAU3N;AAED,wBAAgB,sBAAsB,IAAI,QAAQ,CAEjD;AAED,qBAAa,YAAa,SAAQ,MAAO,YAAW,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC;IACnG,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;gBACvB,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO;CASxK;AAED,wBAAgB,wBAAwB,IAAI,QAAQ,CAEnD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAOzD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOpD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAOzD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAOvD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAO5D;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOvD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAO5D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAO1D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CA+BzD;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAGlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,MAAM,CAoB9L;AAED,qBAAa,uBAAwB,SAAQ,MAAO,YAAW,UAAU,CAAC,uBAAuB,CAAC,EAAE,WAAW,CAAC,uBAAuB,CAAC;IACpI,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBACb,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAUhJ;AAED,wBAAgB,mCAAmC,IAAI,QAAQ,CAE9D;AAED,qBAAa,sBAAuB,SAAQ,MAAO,YAAW,UAAU,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC;IACjI,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC;gBACnC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE;CAMlG;AAED,wBAAgB,kCAAkC,IAAI,QAAQ,CAE7D;AA4BD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,CAkCtG;AAsBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,sBAAsB,CAG3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,CAAC,yBAAyB,CAAC,GAAG,sBAAsB,CAoBlH"}
@@ -1,5 +1,5 @@
1
1
  import { FSharpRef, Record } from "@fable-org/fable-library-js/Types.js";
2
- import { isValidPainScale, isCriticalOxygenSat, isValidOxygenSat, isCriticalRespiration, isValidRespiration, isCriticalPulse, isValidPulse, isCriticalDiastolicBP, isValidDiastolicBP, isCriticalSystolicBP, isValidSystolicBP, isNormalTemperature, isCriticalTemperature, isValidTemperature, getVitalStatus, serializeVitalsData, VitalsData, parseVitalsData, VitalsConfig_$reflection, VitalsConfig } from "./VitalsLogic.js";
2
+ import { isCriticalOxygenSat, isCriticalRespiration, isCriticalPulse, isCriticalDiastolicBP, isCriticalSystolicBP, isNormalTemperature, isCriticalTemperature, isValidPainScale, isValidOxygenSat, isValidRespiration, isValidPulse, isValidDiastolicBP, isValidSystolicBP, isValidTemperature, VitalPropertyValidation, validateVitalsProperty, serializeVitalsData, VitalsData, parseVitalsData, VitalsConfig_$reflection, VitalsConfig } from "./VitalsLogic.js";
3
3
  import { equals, createObj, IComparable, IEquatable } from "@fable-org/fable-library-js/Util.js";
4
4
  import { mapValues, Field$3, IAttributes } from "../../../fable_modules/Fable.Form.3.0.0/Field.fs.js";
5
5
  import { class_type, record_type, string_type, TypeInfo } from "@fable-org/fable-library-js/Reflection.js";
@@ -7,14 +7,15 @@ import { Form$3, FieldConfig$4, field as field_1 } from "../../../fable_modules/
7
7
  import { join, printf, toText, isNullOrWhiteSpace, isNullOrEmpty } from "@fable-org/fable-library-js/String.js";
8
8
  import { createElement } from "react";
9
9
  import React from "react";
10
- import { some, bind, value as value_140, Option, map, defaultArg } from "@fable-org/fable-library-js/Option.js";
10
+ import { some, bind, value as value_144, Option, map, defaultArg } from "@fable-org/fable-library-js/Option.js";
11
11
  import { float64 } from "@fable-org/fable-library-js/Int32.js";
12
12
  import { reactApi } from "../../../fable_modules/Feliz.2.8.0/Interop.fs.js";
13
13
  import { tryParse } from "@fable-org/fable-library-js/Double.js";
14
14
  import { ReactElement } from "../../../fable_modules/Fable.React.Types.18.3.0/Fable.React.fs.js";
15
+ import { empty, singleton, append, delay, toList } from "@fable-org/fable-library-js/Seq.js";
15
16
  import { append as append_1, cons, empty as empty_1, tryFind, FSharpList, exists, singleton as singleton_1, ofArray } from "@fable-org/fable-library-js/List.js";
17
+ import { IReactProperty } from "../../../fable_modules/Feliz.2.8.0/Types.fs.js";
16
18
  import { withLabelAndError } from "../../../fable_modules/Fable.Form.Simple.Bulma.5.0.1/Html.View.fs.js";
17
- import { empty, singleton, append, delay, toList } from "@fable-org/fable-library-js/Seq.js";
18
19
  import { IStandardField$3_$reflection, IStandardField$3, IField$1, StandardRenderFieldConfig$2 } from "../../../fable_modules/Fable.Form.Simple.Bulma.5.0.1/Types.fs.js";
19
20
  import { Spec_FormField$1, Spec_FieldType_$union, Shared_FieldOption, Shared_FieldValue_$union, Shared_FieldKey, Shared_FieldValue_PluginData, Shared_PluginDataProperty, Shared_PluginPropertyKey, Spec_PluginFieldConfig } from "../../../FormSpec.FS/FormSpec.js";
20
21
  import { FSharpResult$2_$union, FSharpResult$2_Error, FSharpResult$2_Ok } from "@fable-org/fable-library-js/Result.js";
@@ -101,62 +102,50 @@ export function VitalsField_VitalsFieldComponent(config: StandardRenderFieldConf
101
102
  };
102
103
  config.OnChange(serializeVitalsData(new VitalsData(parseOpt(temperature), parseOpt(systolicBP), parseOpt(diastolicBP), parseOpt(pulse), parseOpt(respiration), parseOpt(oxygenSat), parseOpt(painScale))));
103
104
  }, dependencies);
104
- const parseNumeric = (raw: string): Option<float64> => {
105
- if (isNullOrWhiteSpace(raw)) {
106
- return undefined;
107
- }
108
- else {
109
- let matchValue_1: [boolean, float64];
110
- let outArg_1 = 0;
111
- matchValue_1 = ([tryParse(raw, new FSharpRef<float64>((): float64 => outArg_1, (v_2: float64): void => {
112
- outArg_1 = v_2;
113
- })), outArg_1] as [boolean, float64]);
114
- if (matchValue_1[0]) {
115
- return matchValue_1[1];
116
- }
117
- else {
118
- return undefined;
119
- }
120
- }
105
+ const statusBadge = (clinicalStatus: string): ReactElement => {
106
+ const patternInput_7: [string, string] = (clinicalStatus === "invalid") ? (["bg-red-100 text-red-800 border border-red-300", "Invalid"] as [string, string]) : ((clinicalStatus === "critical") ? (["bg-red-100 text-red-700 border border-red-200", "Critical"] as [string, string]) : ((clinicalStatus === "abnormal") ? (["bg-amber-100 text-amber-700 border border-amber-200", "Abnormal"] as [string, string]) : ((clinicalStatus === "normal") ? (["bg-emerald-100 text-emerald-700 border border-emerald-200", "Normal"] as [string, string]) : (["bg-slate-100 text-slate-600 border border-slate-200", "Pending"] as [string, string]))));
107
+ return createElement<any>("span", {
108
+ className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${patternInput_7[0]}`,
109
+ children: patternInput_7[1],
110
+ });
121
111
  };
122
- const statusBadge = (status: string): ReactElement => createElement<any>("span", {
123
- className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${(status === "critical") ? "bg-red-100 text-red-700 border border-red-200" : ((status === "abnormal") ? "bg-amber-100 text-amber-700 border border-amber-200" : ((status === "normal") ? "bg-emerald-100 text-emerald-700 border border-emerald-200" : "bg-slate-100 text-slate-600 border border-slate-200"))}`,
124
- children: (status === "critical") ? "Critical" : ((status === "abnormal") ? "Abnormal" : ((status === "normal") ? "Normal" : "Pending")),
125
- });
126
- const createVitalInput = (label_1: string, value_18: string, setValue: ((arg0: string) => void), unitText: string, placeholder: string, isValid: ((arg0: float64) => boolean), isCritical: ((arg0: float64) => boolean), isNormal: Option<((arg0: float64) => boolean)>): ReactElement => {
127
- let elems_1: Iterable<ReactElement>, elems: Iterable<ReactElement>;
128
- const vitalStatus: string = getVitalStatus(parseNumeric(value_18), isValid, isCritical, isNormal);
112
+ const createVitalInput = (label_1: string, propertyName: string, value_18: string, setValue: ((arg0: string) => void), unitText: string, placeholder: string): ReactElement => {
113
+ let matchValue_1: string, elems_1: Iterable<ReactElement>;
114
+ const validation: VitalPropertyValidation = validateVitalsProperty(propertyName, value_18);
129
115
  let inputClass: string;
130
116
  const baseClass = "mt-1 block w-full rounded-md border bg-white px-2.5 py-1.5 text-sm text-slate-900 shadow-sm transition placeholder:text-slate-400 focus:outline-none focus:ring-2 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:text-slate-500";
131
- inputClass = ((config.ShowError && (config.Error != null)) ? (`${baseClass} border-red-400 focus:border-red-500 focus:ring-red-500/30`) : (`${baseClass} ${(vitalStatus === "critical") ? "border-red-300 focus:border-red-500 focus:ring-red-500/30" : ((vitalStatus === "abnormal") ? "border-amber-300 focus:border-amber-500 focus:ring-amber-500/30" : "border-slate-300 focus:border-sky-500 focus:ring-sky-500/30")}`));
132
- return createElement<any>("div", createObj(ofArray([["className", "rounded-lg border border-slate-200 bg-white p-2.5 shadow-sm"] as [string, any], (elems_1 = [createElement<any>("div", createObj(ofArray([["className", "flex items-center justify-between gap-3"] as [string, any], (elems = [createElement<any>("label", {
133
- className: "text-xs font-semibold uppercase tracking-wide text-slate-700",
134
- children: label_1,
135
- }), statusBadge(vitalStatus)], ["children", reactApi.Children.toArray(Array.from(elems))] as [string, any])]))), createElement<any>("input", {
136
- type: "number",
137
- className: inputClass,
138
- value: value_18,
139
- placeholder: placeholder,
140
- disabled: config.Disabled ? true : config.IsReadOnly,
141
- onChange: (ev: Event): void => {
142
- setValue(ev.target.value);
143
- },
144
- }), createElement<any>("p", {
145
- className: "mt-1 text-[11px] text-slate-500",
146
- children: unitText,
147
- })], ["children", reactApi.Children.toArray(Array.from(elems_1))] as [string, any])])));
117
+ inputClass = ((config.ShowError && (config.Error != null)) ? (`${baseClass} border-red-400 focus:border-red-500 focus:ring-red-500/30`) : (`${baseClass} ${(matchValue_1 = validation.ClinicalStatus, (matchValue_1 === "invalid") ? "border-red-400 focus:border-red-500 focus:ring-red-500/30" : ((matchValue_1 === "critical") ? "border-red-300 focus:border-red-500 focus:ring-red-500/30" : ((matchValue_1 === "abnormal") ? "border-amber-300 focus:border-amber-500 focus:ring-amber-500/30" : "border-slate-300 focus:border-sky-500 focus:ring-sky-500/30")))}`));
118
+ return createElement<any>("div", createObj(ofArray([["className", "rounded-lg border border-slate-200 bg-white p-2.5 shadow-sm"] as [string, any], (elems_1 = toList<ReactElement>(delay<ReactElement>((): Iterable<ReactElement> => {
119
+ let elems: Iterable<ReactElement>;
120
+ return append<ReactElement>(singleton<ReactElement>(createElement<any>("div", createObj(ofArray([["className", "flex items-center justify-between gap-3"] as [string, any], (elems = [createElement<any>("label", {
121
+ className: "text-xs font-semibold uppercase tracking-wide text-slate-700",
122
+ children: label_1,
123
+ }), statusBadge(validation.ClinicalStatus)], ["children", reactApi.Children.toArray(Array.from(elems))] as [string, any])])))), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(singleton<ReactElement>(createElement<any>("input", {
124
+ type: "number",
125
+ className: inputClass,
126
+ value: value_18,
127
+ placeholder: placeholder,
128
+ disabled: config.Disabled ? true : config.IsReadOnly,
129
+ onChange: (ev: Event): void => {
130
+ setValue(ev.target.value);
131
+ },
132
+ })), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>((validation.Message !== "") ? singleton<ReactElement>(createElement<any>("p", createObj(toList<IReactProperty>(delay<IReactProperty>((): Iterable<IReactProperty> => append<IReactProperty>(singleton<IReactProperty>(["className", !validation.IsValid ? "mt-1 text-[11px] text-red-600 font-medium" : "mt-1 text-[11px] text-amber-600"] as [string, any]), delay<IReactProperty>((): Iterable<IReactProperty> => singleton<IReactProperty>(["children", validation.Message] as [string, any])))))))) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => singleton<ReactElement>(createElement<any>("p", {
133
+ className: "mt-1 text-[11px] text-slate-500",
134
+ children: unitText,
135
+ }))))))));
136
+ })), ["children", reactApi.Children.toArray(Array.from(elems_1))] as [string, any])])));
148
137
  };
149
138
  return withLabelAndError(config.Attributes.Label, config.ShowError, config.Error, createElement<any>("div", createObj(ofArray([["className", "space-y-2.5"] as [string, any], (elems_12 = toList<ReactElement>(delay<ReactElement>((): Iterable<ReactElement> => {
150
139
  let elems_8: Iterable<ReactElement>;
151
- return append<ReactElement>(singleton<ReactElement>(createElement<any>("div", createObj(ofArray([["className", "grid grid-cols-1 auto-rows-min content-start items-start gap-2 md:grid-cols-2 lg:grid-cols-3"] as [string, any], (elems_8 = toList<ReactElement>(delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludeTemperature ? singleton<ReactElement>(createVitalInput("Temperature", temperature, patternInput[1], "Normal: 97-99°F", "98.6", isValidTemperature, isCriticalTemperature, isNormalTemperature)) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => {
152
- let systolicStatus: string, diastolicStatus: string, elems_7: Iterable<ReactElement>, elems_3: Iterable<ReactElement>, elems_2: Iterable<ReactElement>, elems_6: Iterable<ReactElement>, elems_4: Iterable<ReactElement>, value_66: string, elems_5: Iterable<ReactElement>, value_85: string;
153
- return append<ReactElement>(vitalsConfig.IncludeBP ? ((systolicStatus = getVitalStatus(parseNumeric(systolicBP), isValidSystolicBP, isCriticalSystolicBP, undefined), (diastolicStatus = getVitalStatus(parseNumeric(diastolicBP), isValidDiastolicBP, isCriticalDiastolicBP, undefined), singleton<ReactElement>(createElement<any>("div", createObj(ofArray([["className", "rounded-lg border border-slate-200 bg-white p-2.5 shadow-sm"] as [string, any], (elems_7 = [createElement<any>("div", createObj(ofArray([["className", "flex items-center justify-between gap-3"] as [string, any], (elems_3 = [createElement<any>("label", {
140
+ return append<ReactElement>(singleton<ReactElement>(createElement<any>("div", createObj(ofArray([["className", "grid grid-cols-1 auto-rows-min content-start items-start gap-2 md:grid-cols-2 lg:grid-cols-3"] as [string, any], (elems_8 = toList<ReactElement>(delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludeTemperature ? singleton<ReactElement>(createVitalInput("Temperature", "temperature", temperature, patternInput[1], "Normal: 97-99°F", "98.6")) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => {
141
+ let systolicValidation: VitalPropertyValidation, diastolicValidation: VitalPropertyValidation, elems_7: Iterable<ReactElement>, elems_3: Iterable<ReactElement>, elems_2: Iterable<ReactElement>, elems_6: Iterable<ReactElement>, elems_4: Iterable<ReactElement>, value_70: string, elems_5: Iterable<ReactElement>, value_89: string;
142
+ return append<ReactElement>(vitalsConfig.IncludeBP ? ((systolicValidation = validateVitalsProperty("systolic_bp", systolicBP), (diastolicValidation = validateVitalsProperty("diastolic_bp", diastolicBP), singleton<ReactElement>(createElement<any>("div", createObj(ofArray([["className", "rounded-lg border border-slate-200 bg-white p-2.5 shadow-sm"] as [string, any], (elems_7 = [createElement<any>("div", createObj(ofArray([["className", "flex items-center justify-between gap-3"] as [string, any], (elems_3 = [createElement<any>("label", {
154
143
  className: "text-xs font-semibold uppercase tracking-wide text-slate-700",
155
144
  children: "Blood Pressure",
156
- }), createElement<any>("div", createObj(ofArray([["className", "inline-flex gap-2"] as [string, any], (elems_2 = [statusBadge(systolicStatus), statusBadge(diastolicStatus)], ["children", reactApi.Children.toArray(Array.from(elems_2))] as [string, any])])))], ["children", reactApi.Children.toArray(Array.from(elems_3))] as [string, any])]))), createElement<any>("div", createObj(ofArray([["className", "mt-1 grid grid-cols-[1fr_auto_1fr] items-center gap-1.5"] as [string, any], (elems_6 = [createElement<any>("div", createObj(singleton_1((elems_4 = [createElement<any>("label", {
145
+ }), createElement<any>("div", createObj(ofArray([["className", "inline-flex gap-2"] as [string, any], (elems_2 = [statusBadge(systolicValidation.ClinicalStatus), statusBadge(diastolicValidation.ClinicalStatus)], ["children", reactApi.Children.toArray(Array.from(elems_2))] as [string, any])])))], ["children", reactApi.Children.toArray(Array.from(elems_3))] as [string, any])]))), createElement<any>("div", createObj(ofArray([["className", "mt-1 grid grid-cols-[1fr_auto_1fr] items-center gap-1.5"] as [string, any], (elems_6 = [createElement<any>("div", createObj(singleton_1((elems_4 = [createElement<any>("label", {
157
146
  className: "text-[11px] font-medium text-slate-600",
158
147
  children: "Systolic",
159
- }), createElement<any>("input", createObj(ofArray([["type", "number"] as [string, any], (value_66 = "mt-1 block w-full rounded-md border border-slate-300 bg-white px-2.5 py-1.5 text-sm shadow-sm placeholder:text-slate-400 focus:border-sky-500 focus:outline-none focus:ring-2 focus:ring-sky-500/30 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:text-slate-500", ["className", value_66] as [string, any]), ["value", systolicBP] as [string, any], ["placeholder", "120"] as [string, any], ["disabled", config.Disabled ? true : config.IsReadOnly] as [string, any], ["onChange", (ev_1: Event): void => {
148
+ }), createElement<any>("input", createObj(ofArray([["type", "number"] as [string, any], (value_70 = "mt-1 block w-full rounded-md border border-slate-300 bg-white px-2.5 py-1.5 text-sm shadow-sm placeholder:text-slate-400 focus:border-sky-500 focus:outline-none focus:ring-2 focus:ring-sky-500/30 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:text-slate-500", ["className", value_70] as [string, any]), ["value", systolicBP] as [string, any], ["placeholder", "120"] as [string, any], ["disabled", config.Disabled ? true : config.IsReadOnly] as [string, any], ["onChange", (ev_1: Event): void => {
160
149
  patternInput_1[1](ev_1.target.value);
161
150
  }] as [string, any]])))], ["children", reactApi.Children.toArray(Array.from(elems_4))] as [string, any])))), createElement<any>("div", {
162
151
  className: "pt-4 text-base font-semibold text-slate-500",
@@ -164,12 +153,12 @@ export function VitalsField_VitalsFieldComponent(config: StandardRenderFieldConf
164
153
  }), createElement<any>("div", createObj(singleton_1((elems_5 = [createElement<any>("label", {
165
154
  className: "text-[11px] font-medium text-slate-600",
166
155
  children: "Diastolic",
167
- }), createElement<any>("input", createObj(ofArray([["type", "number"] as [string, any], (value_85 = "mt-1 block w-full rounded-md border border-slate-300 bg-white px-2.5 py-1.5 text-sm shadow-sm placeholder:text-slate-400 focus:border-sky-500 focus:outline-none focus:ring-2 focus:ring-sky-500/30 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:text-slate-500", ["className", value_85] as [string, any]), ["value", diastolicBP] as [string, any], ["placeholder", "80"] as [string, any], ["disabled", config.Disabled ? true : config.IsReadOnly] as [string, any], ["onChange", (ev_2: Event): void => {
156
+ }), createElement<any>("input", createObj(ofArray([["type", "number"] as [string, any], (value_89 = "mt-1 block w-full rounded-md border border-slate-300 bg-white px-2.5 py-1.5 text-sm shadow-sm placeholder:text-slate-400 focus:border-sky-500 focus:outline-none focus:ring-2 focus:ring-sky-500/30 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:text-slate-500", ["className", value_89] as [string, any]), ["value", diastolicBP] as [string, any], ["placeholder", "80"] as [string, any], ["disabled", config.Disabled ? true : config.IsReadOnly] as [string, any], ["onChange", (ev_2: Event): void => {
168
157
  patternInput_2[1](ev_2.target.value);
169
158
  }] as [string, any]])))], ["children", reactApi.Children.toArray(Array.from(elems_5))] as [string, any]))))], ["children", reactApi.Children.toArray(Array.from(elems_6))] as [string, any])]))), createElement<any>("p", {
170
159
  className: "mt-1 text-[11px] text-slate-500",
171
160
  children: "mmHg",
172
- })], ["children", reactApi.Children.toArray(Array.from(elems_7))] as [string, any])]))))))) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludePulse ? singleton<ReactElement>(createVitalInput("Pulse Rate", pulse, patternInput_3[1], "BPM", "72", isValidPulse, isCriticalPulse, undefined)) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludeRespiration ? singleton<ReactElement>(createVitalInput("Respiration Rate", respiration, patternInput_4[1], "per minute", "16", isValidRespiration, isCriticalRespiration, undefined)) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludeOxygenSat ? singleton<ReactElement>(createVitalInput("Oxygen Saturation", oxygenSat, patternInput_5[1], "%", "98", isValidOxygenSat, isCriticalOxygenSat, undefined)) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => (vitalsConfig.IncludePainScale ? singleton<ReactElement>(createVitalInput("Pain Scale", painScale, patternInput_6[1], "0-10 scale", "0", isValidPainScale, (_arg: float64): boolean => false, undefined)) : empty<ReactElement>())))))))));
161
+ })], ["children", reactApi.Children.toArray(Array.from(elems_7))] as [string, any])]))))))) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludePulse ? singleton<ReactElement>(createVitalInput("Pulse Rate", "pulse", pulse, patternInput_3[1], "BPM", "72")) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludeRespiration ? singleton<ReactElement>(createVitalInput("Respiration Rate", "respiration", respiration, patternInput_4[1], "per minute", "16")) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => append<ReactElement>(vitalsConfig.IncludeOxygenSat ? singleton<ReactElement>(createVitalInput("Oxygen Saturation", "oxygen_saturation", oxygenSat, patternInput_5[1], "%", "98")) : empty<ReactElement>(), delay<ReactElement>((): Iterable<ReactElement> => (vitalsConfig.IncludePainScale ? singleton<ReactElement>(createVitalInput("Pain Scale", "pain_scale", painScale, patternInput_6[1], "0-10 scale", "0")) : empty<ReactElement>())))))))));
173
162
  })))), ["children", reactApi.Children.toArray(Array.from(elems_8))] as [string, any])])))), delay<ReactElement>((): Iterable<ReactElement> => {
174
163
  let elems_11: Iterable<ReactElement>, elems_10: Iterable<ReactElement>, elems_9: Iterable<ReactElement>;
175
164
  return exists<string>((s_1: string): boolean => !isNullOrWhiteSpace(s_1), ofArray([temperature, systolicBP, diastolicBP, pulse, respiration, oxygenSat, painScale])) ? singleton<ReactElement>(createElement<any>("div", createObj(ofArray([["className", "rounded-lg border border-sky-200 bg-sky-50/60 p-2.5 shadow-sm"] as [string, any], (elems_11 = [createElement<any>("h6", {
@@ -243,7 +232,7 @@ export const Form_PropertyKeys_PainScale: Shared_PluginPropertyKey = new Shared_
243
232
 
244
233
  export const Form_enhancedVitalsConverter: IPluginValueConverter = new IPluginValueConverter((fieldKey: Shared_FieldKey, pluginValue: any): Option<Shared_FieldValue_$union> => {
245
234
  const vitalsData: VitalsData = pluginValue;
246
- return Shared_FieldValue_PluginData(toList<Shared_PluginDataProperty>(delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.Temperature != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Temperature, "temperature", "float", value_140(vitalsData.Temperature).toString(), "Temperature", "°F", "Body temperature in Fahrenheit")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.SystolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_SystolicBP, "systolic_bp", "float", value_140(vitalsData.SystolicBP).toString(), "Systolic BP", "mmHg", "Systolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.DiastolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_DiastolicBP, "diastolic_bp", "float", value_140(vitalsData.DiastolicBP).toString(), "Diastolic BP", "mmHg", "Diastolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.Pulse != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Pulse, "pulse", "float", value_140(vitalsData.Pulse).toString(), "Pulse Rate", "BPM", "Heart rate in beats per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.Respiration != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Respiration, "respiration", "float", value_140(vitalsData.Respiration).toString(), "Respiration Rate", "RPM", "Respiratory rate per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.OxygenSaturation != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_OxygenSaturation, "oxygen_saturation", "float", value_140(vitalsData.OxygenSaturation).toString(), "O2 Saturation", "%", "Oxygen saturation percentage")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => ((vitalsData.PainScale != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_PainScale, "pain_scale", "float", value_140(vitalsData.PainScale).toString(), "Pain Level", "/10", "Pain scale from 0 to 10")) : empty<Shared_PluginDataProperty>()))))))))))))))));
235
+ return Shared_FieldValue_PluginData(toList<Shared_PluginDataProperty>(delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.Temperature != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Temperature, "temperature", "float", value_144(vitalsData.Temperature).toString(), "Temperature", "°F", "Body temperature in Fahrenheit")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.SystolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_SystolicBP, "systolic_bp", "float", value_144(vitalsData.SystolicBP).toString(), "Systolic BP", "mmHg", "Systolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.DiastolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_DiastolicBP, "diastolic_bp", "float", value_144(vitalsData.DiastolicBP).toString(), "Diastolic BP", "mmHg", "Diastolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.Pulse != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Pulse, "pulse", "float", value_144(vitalsData.Pulse).toString(), "Pulse Rate", "BPM", "Heart rate in beats per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.Respiration != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Respiration, "respiration", "float", value_144(vitalsData.Respiration).toString(), "Respiration Rate", "RPM", "Respiratory rate per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData.OxygenSaturation != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_OxygenSaturation, "oxygen_saturation", "float", value_144(vitalsData.OxygenSaturation).toString(), "O2 Saturation", "%", "Oxygen saturation percentage")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => ((vitalsData.PainScale != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_PainScale, "pain_scale", "float", value_144(vitalsData.PainScale).toString(), "Pain Level", "/10", "Pain scale from 0 to 10")) : empty<Shared_PluginDataProperty>()))))))))))))))));
247
236
  }, (fieldValue: Shared_FieldValue_$union): Option<any> => {
248
237
  switch (fieldValue.tag) {
249
238
  case /* PluginData */ 3: {
@@ -357,7 +346,7 @@ export const Form_enhancedVitalsConverter: IPluginValueConverter = new IPluginVa
357
346
  return fieldValue_3.fields[0];
358
347
  case /* Single */ 0: {
359
348
  const vitalsData_3: VitalsData = parseVitalsData(fieldValue_3.fields[0].Value);
360
- return toList<Shared_PluginDataProperty>(delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.Temperature != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Temperature, "temperature", "float", value_140(vitalsData_3.Temperature).toString(), "Temperature", "°F", "Body temperature in Fahrenheit")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.SystolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_SystolicBP, "systolic_bp", "float", value_140(vitalsData_3.SystolicBP).toString(), "Systolic BP", "mmHg", "Systolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.DiastolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_DiastolicBP, "diastolic_bp", "float", value_140(vitalsData_3.DiastolicBP).toString(), "Diastolic BP", "mmHg", "Diastolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.Pulse != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Pulse, "pulse", "float", value_140(vitalsData_3.Pulse).toString(), "Pulse Rate", "BPM", "Heart rate in beats per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.Respiration != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Respiration, "respiration", "float", value_140(vitalsData_3.Respiration).toString(), "Respiration Rate", "RPM", "Respiratory rate per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.OxygenSaturation != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_OxygenSaturation, "oxygen_saturation", "float", value_140(vitalsData_3.OxygenSaturation).toString(), "O2 Saturation", "%", "Oxygen saturation percentage")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => ((vitalsData_3.PainScale != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_PainScale, "pain_scale", "float", value_140(vitalsData_3.PainScale).toString(), "Pain Level", "/10", "Pain scale from 0 to 10")) : empty<Shared_PluginDataProperty>())))))))))))))));
349
+ return toList<Shared_PluginDataProperty>(delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.Temperature != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Temperature, "temperature", "float", value_144(vitalsData_3.Temperature).toString(), "Temperature", "°F", "Body temperature in Fahrenheit")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.SystolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_SystolicBP, "systolic_bp", "float", value_144(vitalsData_3.SystolicBP).toString(), "Systolic BP", "mmHg", "Systolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.DiastolicBP != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_DiastolicBP, "diastolic_bp", "float", value_144(vitalsData_3.DiastolicBP).toString(), "Diastolic BP", "mmHg", "Diastolic blood pressure")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.Pulse != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Pulse, "pulse", "float", value_144(vitalsData_3.Pulse).toString(), "Pulse Rate", "BPM", "Heart rate in beats per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.Respiration != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_Respiration, "respiration", "float", value_144(vitalsData_3.Respiration).toString(), "Respiration Rate", "RPM", "Respiratory rate per minute")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => append<Shared_PluginDataProperty>((vitalsData_3.OxygenSaturation != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_OxygenSaturation, "oxygen_saturation", "float", value_144(vitalsData_3.OxygenSaturation).toString(), "O2 Saturation", "%", "Oxygen saturation percentage")) : empty<Shared_PluginDataProperty>(), delay<Shared_PluginDataProperty>((): Iterable<Shared_PluginDataProperty> => ((vitalsData_3.PainScale != null) ? singleton<Shared_PluginDataProperty>(new Shared_PluginDataProperty(Form_PropertyKeys_PainScale, "pain_scale", "float", value_144(vitalsData_3.PainScale).toString(), "Pain Level", "/10", "Pain scale from 0 to 10")) : empty<Shared_PluginDataProperty>())))))))))))))));
361
350
  }
362
351
  default:
363
352
  return empty_1<Shared_PluginDataProperty>();
@@ -410,33 +399,33 @@ export function Form_markdownRenderer(field: Spec_FormField$1<Spec_FieldType_$un
410
399
  if (exists<Option<float64>>((option: Option<float64>): boolean => (option != null), ofArray([vitalsData.Temperature, vitalsData.SystolicBP, vitalsData.DiastolicBP, vitalsData.Pulse, vitalsData.Respiration, vitalsData.OxygenSaturation, vitalsData.PainScale]))) {
411
400
  let rows: FSharpList<string> = ofArray([("**" + field.Label) + "** 🩺", "", "| Vital Sign | Value | Status |", "|------------|-------|--------|"]);
412
401
  if (vitalsData.Temperature != null) {
413
- const temp: float64 = value_140(vitalsData.Temperature);
402
+ const temp: float64 = value_144(vitalsData.Temperature);
414
403
  const status: string = isCriticalTemperature(temp) ? "🚨 CRITICAL" : (!isValidTemperature(temp) ? "⚠️ ABNORMAL" : (!isNormalTemperature(temp) ? "⚠️ ABNORMAL" : "✅ Normal"));
415
404
  rows = append_1(rows, singleton_1(((("| **Temperature** | " + toText(printf("%.1f"))(temp)) + "°F | ") + status) + " |"));
416
405
  }
417
406
  if ((vitalsData.SystolicBP != null) && (vitalsData.DiastolicBP != null)) {
418
- const sys: float64 = value_140(vitalsData.SystolicBP);
419
- const dia: float64 = value_140(vitalsData.DiastolicBP);
407
+ const sys: float64 = value_144(vitalsData.SystolicBP);
408
+ const dia: float64 = value_144(vitalsData.DiastolicBP);
420
409
  const status_1: string = (isCriticalSystolicBP(sys) ? true : isCriticalDiastolicBP(dia)) ? "🚨 CRITICAL" : ((!isValidSystolicBP(sys) ? true : !isValidDiastolicBP(dia)) ? "⚠️ ABNORMAL" : "✅ Normal");
421
410
  rows = append_1(rows, singleton_1(((((("| **Blood Pressure** | " + toText(printf("%.0f"))(sys)) + "/") + toText(printf("%.0f"))(dia)) + " mmHg | ") + status_1) + " |"));
422
411
  }
423
412
  if (vitalsData.Pulse != null) {
424
- const pulse: float64 = value_140(vitalsData.Pulse);
413
+ const pulse: float64 = value_144(vitalsData.Pulse);
425
414
  const status_2: string = isCriticalPulse(pulse) ? "🚨 CRITICAL" : (!isValidPulse(pulse) ? "⚠️ ABNORMAL" : "✅ Normal");
426
415
  rows = append_1(rows, singleton_1(((("| **Pulse Rate** | " + toText(printf("%.0f"))(pulse)) + " BPM | ") + status_2) + " |"));
427
416
  }
428
417
  if (vitalsData.Respiration != null) {
429
- const resp: float64 = value_140(vitalsData.Respiration);
418
+ const resp: float64 = value_144(vitalsData.Respiration);
430
419
  const status_3: string = isCriticalRespiration(resp) ? "🚨 CRITICAL" : (!isValidRespiration(resp) ? "⚠️ ABNORMAL" : "✅ Normal");
431
420
  rows = append_1(rows, singleton_1(((("| **Respiration** | " + toText(printf("%.0f"))(resp)) + " RPM | ") + status_3) + " |"));
432
421
  }
433
422
  if (vitalsData.OxygenSaturation != null) {
434
- const sat: float64 = value_140(vitalsData.OxygenSaturation);
423
+ const sat: float64 = value_144(vitalsData.OxygenSaturation);
435
424
  const status_4: string = isCriticalOxygenSat(sat) ? "🚨 CRITICAL" : (!isValidOxygenSat(sat) ? "⚠️ ABNORMAL" : "✅ Normal");
436
425
  rows = append_1(rows, singleton_1(((("| **O2 Saturation** | " + toText(printf("%.0f"))(sat)) + "% | ") + status_4) + " |"));
437
426
  }
438
427
  if (vitalsData.PainScale != null) {
439
- const pain: float64 = value_140(vitalsData.PainScale);
428
+ const pain: float64 = value_144(vitalsData.PainScale);
440
429
  const status_5: string = (pain >= 7) ? "🔴 Severe" : ((pain >= 4) ? "🟡 Moderate" : "🟢 Mild");
441
430
  rows = append_1(rows, singleton_1(((("| **Pain Scale** | " + toText(printf("%.0f"))(pain)) + "/10 | ") + status_5) + " |"));
442
431
  }
@@ -1,13 +1,13 @@
1
1
  import { FSharpRef, Record } from "@fable-org/fable-library-js/Types.js";
2
- import { value as value_2, map, defaultArg, Option } from "@fable-org/fable-library-js/Option.js";
2
+ import { bind, value as value_2, map, defaultArg, Option } from "@fable-org/fable-library-js/Option.js";
3
3
  import { float64 } from "@fable-org/fable-library-js/Int32.js";
4
4
  import { IComparable, IEquatable } from "@fable-org/fable-library-js/Util.js";
5
5
  import { lambda_type, array_type, string_type, bool_type, record_type, option_type, float64_type, TypeInfo } from "@fable-org/fable-library-js/Reflection.js";
6
6
  import { join, split, isNullOrWhiteSpace } from "@fable-org/fable-library-js/String.js";
7
7
  import { tryParse } from "@fable-org/fable-library-js/Double.js";
8
- import { map as map_1, tryFind, item } from "@fable-org/fable-library-js/Array.js";
9
- import { FSharpList, tryFind as tryFind_1 } from "@fable-org/fable-library-js/List.js";
8
+ import { zip, map as map_1, tryFind, item } from "@fable-org/fable-library-js/Array.js";
10
9
  import { Shared_PluginDataProperty } from "../../../FormSpec.FS/FormSpec.js";
10
+ import { FSharpList, tryFind as tryFind_1 } from "@fable-org/fable-library-js/List.js";
11
11
 
12
12
  export class VitalsData extends Record implements IEquatable<VitalsData>, IComparable<VitalsData> {
13
13
  readonly Temperature: Option<float64>;
@@ -341,20 +341,59 @@ export function validateVitalsProperty(propertyName: string, rawValue: string):
341
341
  }
342
342
  }
343
343
 
344
+ function validateTypedValue(def: VitalPropertyDef, value: Option<float64>): VitalPropertyValidation {
345
+ if (value != null) {
346
+ const v: float64 = value_2(value);
347
+ const rawValue: string = v.toString();
348
+ if (!def.IsValid(v)) {
349
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, rawValue, false, "invalid", ((((def.DisplayName + " must be ") + def.ValidRangeDescription) + ", got ") + rawValue) + def.Unit);
350
+ }
351
+ else if (def.IsCritical(v)) {
352
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, rawValue, true, "critical", (((def.DisplayName + " ") + rawValue) + def.Unit) + " — CRITICAL");
353
+ }
354
+ else {
355
+ const status: string = getVitalStatus(v, def.IsValid, def.IsCritical, def.IsNormal);
356
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, rawValue, true, status, (status === "abnormal") ? ((((def.DisplayName + " ") + rawValue) + def.Unit) + " — above normal") : "");
357
+ }
358
+ }
359
+ else {
360
+ return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, "", true, "empty", "");
361
+ }
362
+ }
363
+
364
+ /**
365
+ * Core validator — operates on the typed domain object. Single source of medical truth.
366
+ * Studio calls this via parseVitalsData → validateVitalsData.
367
+ * HealixAI calls this via PluginDataProperty list → converter → validateVitalsData.
368
+ */
369
+ export function validateVitalsData(data: VitalsData): VitalsValidationResult {
370
+ const results: VitalPropertyValidation[] = map_1<[VitalPropertyDef, Option<float64>], VitalPropertyValidation>((tupledArg: [VitalPropertyDef, Option<float64>]): VitalPropertyValidation => validateTypedValue(tupledArg[0], tupledArg[1]), zip<VitalPropertyDef, Option<float64>>(vitalPropertyDefs, [data.Temperature, data.SystolicBP, data.DiastolicBP, data.Pulse, data.Respiration, data.OxygenSaturation, data.PainScale]));
371
+ return new VitalsValidationResult(results.every((r: VitalPropertyValidation): boolean => r.IsValid), results.some((r_1: VitalPropertyValidation): boolean => (r_1.ClinicalStatus === "critical")), results);
372
+ }
373
+
344
374
  /**
345
- * Validate a full set of vitals plugin data. Returns per-property clinical results.
375
+ * Validate plugin data from the wire format. Parses to VitalsData, then delegates to validateVitalsData.
346
376
  */
347
377
  export function validateVitalsPluginData(properties: FSharpList<Shared_PluginDataProperty>): VitalsValidationResult {
348
- const results: VitalPropertyValidation[] = map_1<VitalPropertyDef, VitalPropertyValidation>((def: VitalPropertyDef): VitalPropertyValidation => {
349
- const propOpt: Option<Shared_PluginDataProperty> = tryFind_1<Shared_PluginDataProperty>((p: Shared_PluginDataProperty): boolean => (p.Name === def.Name), properties);
350
- if (propOpt != null) {
351
- return validateVitalsProperty(def.Name, value_2(propOpt).Value);
378
+ const getPropertyValue = (name: string): Option<float64> => bind<Shared_PluginDataProperty, float64>((p_1: Shared_PluginDataProperty): Option<float64> => {
379
+ if (isNullOrWhiteSpace(p_1.Value)) {
380
+ return undefined;
352
381
  }
353
382
  else {
354
- return new VitalPropertyValidation(def.Name, def.DisplayName, def.Unit, "", true, "empty", "");
383
+ let matchValue: [boolean, float64];
384
+ let outArg = 0;
385
+ matchValue = ([tryParse(p_1.Value, new FSharpRef<float64>((): float64 => outArg, (v: float64): void => {
386
+ outArg = v;
387
+ })), outArg] as [boolean, float64]);
388
+ if (matchValue[0]) {
389
+ return matchValue[1];
390
+ }
391
+ else {
392
+ return undefined;
393
+ }
355
394
  }
356
- }, vitalPropertyDefs);
357
- return new VitalsValidationResult(results.every((r: VitalPropertyValidation): boolean => r.IsValid), results.some((r_1: VitalPropertyValidation): boolean => (r_1.ClinicalStatus === "critical")), results);
395
+ }, tryFind_1<Shared_PluginDataProperty>((p: Shared_PluginDataProperty): boolean => (p.Name === name), properties));
396
+ return validateVitalsData(new VitalsData(getPropertyValue("temperature"), getPropertyValue("systolic_bp"), getPropertyValue("diastolic_bp"), getPropertyValue("pulse"), getPropertyValue("respiration"), getPropertyValue("oxygen_saturation"), getPropertyValue("pain_scale")));
358
397
  }
359
398
 
360
399
  //# sourceMappingURL=VitalsLogic.ts.map