@f1studio/form-spec 5.0.0-alpha.111 → 5.0.0-alpha.112

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.
Files changed (189) hide show
  1. package/FormSpec.FS/BitmaskHelpers.d.ts +23 -0
  2. package/FormSpec.FS/BitmaskHelpers.d.ts.map +1 -0
  3. package/FormSpec.FS/BlueprintValidation.d.ts +16 -0
  4. package/FormSpec.FS/BlueprintValidation.d.ts.map +1 -0
  5. package/FormSpec.FS/FormSpec.d.ts +19 -5
  6. package/FormSpec.FS/FormSpec.d.ts.map +1 -1
  7. package/FormSpec.FS/FormSpecHelpers.d.ts +4 -0
  8. package/FormSpec.FS/FormSpecHelpers.d.ts.map +1 -1
  9. package/FormSpec.FS/FormSpecValues.d.ts +5 -0
  10. package/FormSpec.FS/FormSpecValues.d.ts.map +1 -1
  11. package/FormSpec.FS/Helpers.d.ts.map +1 -1
  12. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRAdapter.d.ts +13 -0
  13. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRAdapter.d.ts.map +1 -0
  14. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRElementTypeMap.d.ts +22 -0
  15. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRElementTypeMap.d.ts.map +1 -0
  16. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFieldTypeMapper.d.ts +22 -0
  17. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFieldTypeMapper.d.ts.map +1 -0
  18. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFormSpecValidator.d.ts +130 -0
  19. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFormSpecValidator.d.ts.map +1 -0
  20. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSectioning.d.ts +37 -0
  21. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSectioning.d.ts.map +1 -0
  22. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSemanticReportBuilder.d.ts +231 -0
  23. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSemanticReportBuilder.d.ts.map +1 -0
  24. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRStepsBuilder.d.ts +10 -0
  25. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRStepsBuilder.d.ts.map +1 -0
  26. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTemplateToFormSpec.d.ts +55 -0
  27. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTemplateToFormSpec.d.ts.map +1 -0
  28. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTriggerConverter.d.ts +69 -0
  29. package/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTriggerConverter.d.ts.map +1 -0
  30. package/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMREncoder.d.ts +21 -0
  31. package/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMREncoder.d.ts.map +1 -0
  32. package/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMRSourceMap.d.ts +133 -0
  33. package/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMRSourceMap.d.ts.map +1 -0
  34. package/FormSpec.FS/Integrations/Adapters/CorEMR/FormSpecToCoreMRInsert.d.ts +52 -0
  35. package/FormSpec.FS/Integrations/Adapters/CorEMR/FormSpecToCoreMRInsert.d.ts.map +1 -0
  36. package/FormSpec.FS/Integrations/Adapters/FormSystemAdapter.d.ts +46 -0
  37. package/FormSpec.FS/Integrations/Adapters/FormSystemAdapter.d.ts.map +1 -0
  38. package/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormAdapter.d.ts +4 -0
  39. package/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormAdapter.d.ts.map +1 -0
  40. package/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormTypes.d.ts +36 -0
  41. package/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormTypes.d.ts.map +1 -0
  42. package/FormSpec.FS/Integrations/CorEMR/CorEmrTemplates.d.ts +95 -0
  43. package/FormSpec.FS/Integrations/CorEMR/CorEmrTemplates.d.ts.map +1 -0
  44. package/FormSpec.FS/Integrations/CorEMR/CoreMRTypes.d.ts +449 -0
  45. package/FormSpec.FS/Integrations/CorEMR/CoreMRTypes.d.ts.map +1 -0
  46. package/FormSpec.FS/Interop/FormSpec.Api.Helpers.d.ts.map +1 -1
  47. package/FormSpec.FS/Interop/FormSpec.Api.Option.d.ts +3 -1
  48. package/FormSpec.FS/Interop/FormSpec.Api.Option.d.ts.map +1 -1
  49. package/FormSpec.FS/Provenance.d.ts +10 -0
  50. package/FormSpec.FS/Provenance.d.ts.map +1 -0
  51. package/FormSpec.FS/Renderers/FormSpecMarkdownRenderer.d.ts.map +1 -1
  52. package/FormSpec.TS/FormSpec.FS/BitmaskHelpers.js +56 -0
  53. package/FormSpec.TS/FormSpec.FS/BitmaskHelpers.js.map +1 -0
  54. package/FormSpec.TS/FormSpec.FS/BitmaskHelpers.ts.map +1 -0
  55. package/FormSpec.TS/FormSpec.FS/BlueprintValidation.js +116 -0
  56. package/FormSpec.TS/FormSpec.FS/BlueprintValidation.js.map +1 -0
  57. package/FormSpec.TS/FormSpec.FS/BlueprintValidation.ts.map +1 -0
  58. package/FormSpec.TS/FormSpec.FS/Designer.js +2 -2
  59. package/FormSpec.TS/FormSpec.FS/Designer.js.map +1 -1
  60. package/FormSpec.TS/FormSpec.FS/Designer.ts.map +1 -1
  61. package/FormSpec.TS/FormSpec.FS/FormSpec.js +72 -3
  62. package/FormSpec.TS/FormSpec.FS/FormSpec.js.map +1 -1
  63. package/FormSpec.TS/FormSpec.FS/FormSpec.ts.map +1 -1
  64. package/FormSpec.TS/FormSpec.FS/FormSpecHelpers.js +201 -3
  65. package/FormSpec.TS/FormSpec.FS/FormSpecHelpers.js.map +1 -1
  66. package/FormSpec.TS/FormSpec.FS/FormSpecHelpers.ts.map +1 -1
  67. package/FormSpec.TS/FormSpec.FS/FormSpecValues.js +38 -3
  68. package/FormSpec.TS/FormSpec.FS/FormSpecValues.js.map +1 -1
  69. package/FormSpec.TS/FormSpec.FS/FormSpecValues.ts.map +1 -1
  70. package/FormSpec.TS/FormSpec.FS/Helpers.js +44 -27
  71. package/FormSpec.TS/FormSpec.FS/Helpers.js.map +1 -1
  72. package/FormSpec.TS/FormSpec.FS/Helpers.ts.map +1 -1
  73. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRAdapter.js +45 -0
  74. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRAdapter.js.map +1 -0
  75. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRAdapter.ts.map +1 -0
  76. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRElementTypeMap.js +145 -0
  77. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRElementTypeMap.js.map +1 -0
  78. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRElementTypeMap.ts.map +1 -0
  79. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFieldTypeMapper.js +139 -0
  80. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFieldTypeMapper.js.map +1 -0
  81. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFieldTypeMapper.ts.map +1 -0
  82. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFormSpecValidator.js +801 -0
  83. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFormSpecValidator.js.map +1 -0
  84. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFormSpecValidator.ts.map +1 -0
  85. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSectioning.js +121 -0
  86. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSectioning.js.map +1 -0
  87. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSectioning.ts.map +1 -0
  88. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSemanticReportBuilder.js +1380 -0
  89. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSemanticReportBuilder.js.map +1 -0
  90. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSemanticReportBuilder.ts.map +1 -0
  91. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRStepsBuilder.js +29 -0
  92. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRStepsBuilder.js.map +1 -0
  93. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRStepsBuilder.ts.map +1 -0
  94. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTemplateToFormSpec.js +172 -0
  95. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTemplateToFormSpec.js.map +1 -0
  96. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTemplateToFormSpec.ts.map +1 -0
  97. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTriggerConverter.js +406 -0
  98. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTriggerConverter.js.map +1 -0
  99. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTriggerConverter.ts.map +1 -0
  100. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMREncoder.js +317 -0
  101. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMREncoder.js.map +1 -0
  102. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMREncoder.ts.map +1 -0
  103. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMRSourceMap.js +622 -0
  104. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMRSourceMap.js.map +1 -0
  105. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMRSourceMap.ts.map +1 -0
  106. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/FormSpecToCoreMRInsert.js +448 -0
  107. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/FormSpecToCoreMRInsert.js.map +1 -0
  108. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/CorEMR/FormSpecToCoreMRInsert.ts.map +1 -0
  109. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/FormSystemAdapter.js +198 -0
  110. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/FormSystemAdapter.js.map +1 -0
  111. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/FormSystemAdapter.ts.map +1 -0
  112. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormAdapter.js +57 -0
  113. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormAdapter.js.map +1 -0
  114. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormAdapter.ts.map +1 -0
  115. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormTypes.js +144 -0
  116. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormTypes.js.map +1 -0
  117. package/FormSpec.TS/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormTypes.ts.map +1 -0
  118. package/FormSpec.TS/FormSpec.FS/Integrations/CorEMR/CorEmrTemplates.js +258 -0
  119. package/FormSpec.TS/FormSpec.FS/Integrations/CorEMR/CorEmrTemplates.js.map +1 -0
  120. package/FormSpec.TS/FormSpec.FS/Integrations/CorEMR/CorEmrTemplates.ts.map +1 -0
  121. package/FormSpec.TS/FormSpec.FS/Integrations/CorEMR/CoreMRTypes.js +1768 -0
  122. package/FormSpec.TS/FormSpec.FS/Integrations/CorEMR/CoreMRTypes.js.map +1 -0
  123. package/FormSpec.TS/FormSpec.FS/Integrations/CorEMR/CoreMRTypes.ts.map +1 -0
  124. package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Helpers.js +22 -18
  125. package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Helpers.js.map +1 -1
  126. package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Helpers.ts.map +1 -1
  127. package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.js +18 -6
  128. package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.js.map +1 -1
  129. package/FormSpec.TS/FormSpec.FS/Interop/FormSpec.Api.Option.ts.map +1 -1
  130. package/FormSpec.TS/FormSpec.FS/PathwayExecutor.js +1 -1
  131. package/FormSpec.TS/FormSpec.FS/Provenance.js +41 -0
  132. package/FormSpec.TS/FormSpec.FS/Provenance.js.map +1 -0
  133. package/FormSpec.TS/FormSpec.FS/Provenance.ts.map +1 -0
  134. package/FormSpec.TS/FormSpec.FS/Renderers/FormSpecMarkdownRenderer.js +36 -13
  135. package/FormSpec.TS/FormSpec.FS/Renderers/FormSpecMarkdownRenderer.js.map +1 -1
  136. package/FormSpec.TS/FormSpec.FS/Renderers/FormSpecMarkdownRenderer.ts.map +1 -1
  137. package/FormSpec.TS/FormSpec.FS/Renderers/PathwayRenderers.js +1 -1
  138. package/FormSpec.TS/PathwayExecutor.withPlugins.js +0 -5
  139. package/FormSpec.TS/PathwayExecutor.withPlugins.js.map +1 -1
  140. package/FormSpec.TS/PluginRegistration.js +2 -0
  141. package/FormSpec.TS/PluginRegistration.js.map +1 -1
  142. package/FormSpec.TS/PluginRegistration.ts.map +1 -1
  143. package/FormSpec.TS/fable_modules/project_cracked.json +1 -1
  144. package/FormSpec.TS/plugins/demographics/src/DemographicsField.js +918 -0
  145. package/FormSpec.TS/plugins/demographics/src/DemographicsField.js.map +1 -0
  146. package/FormSpec.TS/plugins/demographics/src/DemographicsField.ts.map +1 -0
  147. package/FormSpec.TS/plugins/likert/src/LikertField.js +1 -1
  148. package/PathwayExecutor.withPlugins.d.ts +0 -5
  149. package/PathwayExecutor.withPlugins.d.ts.map +1 -1
  150. package/README.md +7 -7
  151. package/fable_modules/Thoth.Json.10.4.1/Extra.fs.d.ts +3 -0
  152. package/fable_modules/Thoth.Json.10.4.1/Extra.fs.d.ts.map +1 -0
  153. package/package.json +4 -4
  154. package/plugins/demographics/src/DemographicsField.d.ts +104 -0
  155. package/plugins/demographics/src/DemographicsField.d.ts.map +1 -0
  156. package/src/FormSpec.FS/BitmaskHelpers.ts +52 -0
  157. package/src/FormSpec.FS/BlueprintValidation.ts +108 -0
  158. package/src/FormSpec.FS/Designer.ts +2 -2
  159. package/src/FormSpec.FS/FormSpec.ts +39 -8
  160. package/src/FormSpec.FS/FormSpecHelpers.ts +190 -12
  161. package/src/FormSpec.FS/FormSpecValues.ts +42 -3
  162. package/src/FormSpec.FS/Helpers.ts +44 -27
  163. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRAdapter.ts +37 -0
  164. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRElementTypeMap.ts +103 -0
  165. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFieldTypeMapper.ts +129 -0
  166. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRFormSpecValidator.ts +490 -0
  167. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSectioning.ts +87 -0
  168. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRSemanticReportBuilder.ts +1046 -0
  169. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRStepsBuilder.ts +26 -0
  170. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTemplateToFormSpec.ts +161 -0
  171. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CorEMRTriggerConverter.ts +386 -0
  172. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMREncoder.ts +320 -0
  173. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/CoreMRSourceMap.ts +371 -0
  174. package/src/FormSpec.FS/Integrations/Adapters/CorEMR/FormSpecToCoreMRInsert.ts +372 -0
  175. package/src/FormSpec.FS/Integrations/Adapters/FormSystemAdapter.ts +92 -0
  176. package/src/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormAdapter.ts +51 -0
  177. package/src/FormSpec.FS/Integrations/Adapters/ReactHookForm/ReactHookFormTypes.ts +71 -0
  178. package/src/FormSpec.FS/Integrations/CorEMR/CorEmrTemplates.ts +15 -0
  179. package/src/FormSpec.FS/Integrations/CorEMR/CoreMRTypes.ts +825 -0
  180. package/src/FormSpec.FS/Interop/FormSpec.Api.Helpers.ts +19 -15
  181. package/src/FormSpec.FS/Interop/FormSpec.Api.Option.ts +13 -7
  182. package/src/FormSpec.FS/PathwayExecutor.ts +1 -1
  183. package/src/FormSpec.FS/Provenance.ts +19 -0
  184. package/src/FormSpec.FS/Renderers/FormSpecMarkdownRenderer.ts +32 -12
  185. package/src/FormSpec.FS/Renderers/PathwayRenderers.ts +1 -1
  186. package/src/PathwayExecutor.withPlugins.ts +0 -5
  187. package/src/PluginRegistration.ts +2 -0
  188. package/src/plugins/demographics/src/DemographicsField.ts +502 -0
  189. package/src/plugins/likert/src/LikertField.ts +1 -1
@@ -175,6 +175,8 @@ export function Helpers_FieldTypeUtils_getFieldTypeName(fieldType: any): string
175
175
  if (fieldType instanceof Spec_FieldType) {
176
176
  const ft = fieldType as Spec_FieldType_$union;
177
177
  switch (ft.tag) {
178
+ case /* Text */ 0:
179
+ return "Text";
178
180
  case /* TextArea */ 1:
179
181
  return "TextArea";
180
182
  case /* Email */ 2:
@@ -217,10 +219,10 @@ export function Helpers_FieldTypeUtils_getFieldTypeName(fieldType: any): string
217
219
  return "Signature";
218
220
  case /* Message */ 21:
219
221
  return "Message";
220
- case /* PluginField */ 22:
222
+ case /* PluginField */ 23:
221
223
  return `PluginField(${ft.fields[0].PluginId})`;
222
224
  default:
223
- return "Text";
225
+ throw new Error("Match failure: F1.Studio.Spec.FieldType");
224
226
  }
225
227
  }
226
228
  else {
@@ -341,8 +343,8 @@ export function Helpers_FieldTypeUtils_fieldTypesMatchByCaseName(fieldType1: any
341
343
  }
342
344
  break;
343
345
  }
344
- case /* PluginField */ 22: {
345
- if (ft2!.tag === /* PluginField */ 22) {
346
+ case /* PluginField */ 23: {
347
+ if (ft2!.tag === /* PluginField */ 23) {
346
348
  if (ft1!.fields[0].PluginId === ft2!.fields[0].PluginId) {
347
349
  matchResult_1 = 10;
348
350
  cfg1_1 = ft1!.fields[0];
@@ -411,7 +413,7 @@ export function Helpers_FormSpecMutators_updateFormFieldInFormSpecStep<UserField
411
413
  else {
412
414
  return s;
413
415
  }
414
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
416
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
415
417
  }
416
418
 
417
419
  /**
@@ -425,7 +427,7 @@ export function Helpers_FormSpecMutators_updateFormStepInFormSpec<UserField>(for
425
427
  else {
426
428
  return s;
427
429
  }
428
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
430
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
429
431
  }
430
432
 
431
433
  /**
@@ -440,7 +442,7 @@ export function Helpers_FormSpecMutators_addFormFieldToStep<UserField>(formStep:
440
442
  else {
441
443
  return s;
442
444
  }
443
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
445
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
444
446
  }
445
447
 
446
448
  /**
@@ -449,19 +451,19 @@ export function Helpers_FormSpecMutators_addFormFieldToStep<UserField>(formStep:
449
451
  export function Helpers_FormSpecMutators_removeFormFieldFromFormSpec<UserField>(formStepOrder: int32, formField: Spec_FormField$1<UserField>, formSpec: Spec_FormSpec$1<UserField>): Spec_FormSpec$1<UserField> {
450
452
  return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, map_1<Spec_FormStep$1<UserField>, Spec_FormStep$1<UserField>>((s: Spec_FormStep$1<UserField>): Spec_FormStep$1<UserField> => {
451
453
  if (s.StepOrder === formStepOrder) {
452
- return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((i: int32, f_1: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(i + 1, f_1.FieldKey, f_1.Label, f_1.Notes, f_1.DependsOn, f_1.IsOptional, f_1.IsDeprecated, f_1.FieldType, f_1.Value)), filter<Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): boolean => (f.FieldOrder !== formField.FieldOrder), s.Fields)));
454
+ return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((i: int32, f_1: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(i + 1, f_1.FieldKey, f_1.Label, f_1.Notes, f_1.DependsOn, f_1.IsOptional, f_1.IsDeprecated, f_1.NeedsDocumentation, f_1.Documentation, f_1.FieldType, f_1.Value)), filter<Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): boolean => (f.FieldOrder !== formField.FieldOrder), s.Fields)));
453
455
  }
454
456
  else {
455
457
  return s;
456
458
  }
457
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
459
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
458
460
  }
459
461
 
460
462
  /**
461
463
  * Inserts a form field at a specific position within a step.
462
464
  */
463
465
  export function Helpers_FormSpecMutators_insertFormFieldToStepAt<UserField>(formStep: Spec_FormStep$1<UserField>, newPositionFieldOrder: int32, fieldKey: Shared_FieldKey): FSharpList<Spec_FormField$1<UserField>> {
464
- return mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index_1: int32, f_1: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index_1 + 1, f_1.FieldKey, f_1.Label, f_1.Notes, f_1.DependsOn, f_1.IsOptional, f_1.IsDeprecated, f_1.FieldType, f_1.Value)), insertAt<Spec_FormField$1<UserField>>(newPositionFieldOrder - 1, find<Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): boolean => equals(f.FieldKey, fieldKey), formStep.Fields), formStep.Fields));
466
+ return mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index_1: int32, f_1: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index_1 + 1, f_1.FieldKey, f_1.Label, f_1.Notes, f_1.DependsOn, f_1.IsOptional, f_1.IsDeprecated, f_1.NeedsDocumentation, f_1.Documentation, f_1.FieldType, f_1.Value)), insertAt<Spec_FormField$1<UserField>>(newPositionFieldOrder - 1, find<Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): boolean => equals(f.FieldKey, fieldKey), formStep.Fields), formStep.Fields));
465
467
  }
466
468
 
467
469
  /**
@@ -470,12 +472,12 @@ export function Helpers_FormSpecMutators_insertFormFieldToStepAt<UserField>(form
470
472
  export function Helpers_FormSpecMutators_moveFormFieldUpInFormSpec<UserField>(formStepOrder: int32, formField: Spec_FormField$1<UserField>, formSpec: Spec_FormSpec$1<UserField>): Spec_FormSpec$1<UserField> {
471
473
  return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, map_1<Spec_FormStep$1<UserField>, Spec_FormStep$1<UserField>>((s: Spec_FormStep$1<UserField>): Spec_FormStep$1<UserField> => {
472
474
  if (s.StepOrder === formStepOrder) {
473
- return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index: int32, f_2: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index + 1, f_2.FieldKey, f_2.Label, f_2.Notes, f_2.DependsOn, f_2.IsOptional, f_2.IsDeprecated, f_2.FieldType, f_2.Value)), sortBy<Spec_FormField$1<UserField>, int32>((f_1: Spec_FormField$1<UserField>): int32 => f_1.FieldOrder, map_1<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => {
475
+ return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index: int32, f_2: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index + 1, f_2.FieldKey, f_2.Label, f_2.Notes, f_2.DependsOn, f_2.IsOptional, f_2.IsDeprecated, f_2.NeedsDocumentation, f_2.Documentation, f_2.FieldType, f_2.Value)), sortBy<Spec_FormField$1<UserField>, int32>((f_1: Spec_FormField$1<UserField>): int32 => f_1.FieldOrder, map_1<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => {
474
476
  if (f.FieldOrder === formField.FieldOrder) {
475
- return new Spec_FormField$1(formField.FieldOrder - 1, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.FieldType, f.Value);
477
+ return new Spec_FormField$1(formField.FieldOrder - 1, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.NeedsDocumentation, f.Documentation, f.FieldType, f.Value);
476
478
  }
477
479
  else if (f.FieldOrder === (formField.FieldOrder - 1)) {
478
- return new Spec_FormField$1(formField.FieldOrder, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.FieldType, f.Value);
480
+ return new Spec_FormField$1(formField.FieldOrder, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.NeedsDocumentation, f.Documentation, f.FieldType, f.Value);
479
481
  }
480
482
  else {
481
483
  return f;
@@ -487,7 +489,7 @@ export function Helpers_FormSpecMutators_moveFormFieldUpInFormSpec<UserField>(fo
487
489
  else {
488
490
  return s;
489
491
  }
490
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
492
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
491
493
  }
492
494
 
493
495
  /**
@@ -496,12 +498,12 @@ export function Helpers_FormSpecMutators_moveFormFieldUpInFormSpec<UserField>(fo
496
498
  export function Helpers_FormSpecMutators_moveFormFieldDownInFormSpec<UserField>(formStepOrder: int32, formField: Spec_FormField$1<UserField>, formSpec: Spec_FormSpec$1<UserField>): Spec_FormSpec$1<UserField> {
497
499
  return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, map_1<Spec_FormStep$1<UserField>, Spec_FormStep$1<UserField>>((s: Spec_FormStep$1<UserField>): Spec_FormStep$1<UserField> => {
498
500
  if (s.StepOrder === formStepOrder) {
499
- return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index: int32, f_2: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index + 1, f_2.FieldKey, f_2.Label, f_2.Notes, f_2.DependsOn, f_2.IsOptional, f_2.IsDeprecated, f_2.FieldType, f_2.Value)), sortBy<Spec_FormField$1<UserField>, int32>((f_1: Spec_FormField$1<UserField>): int32 => f_1.FieldOrder, map_1<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => {
501
+ return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index: int32, f_2: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index + 1, f_2.FieldKey, f_2.Label, f_2.Notes, f_2.DependsOn, f_2.IsOptional, f_2.IsDeprecated, f_2.NeedsDocumentation, f_2.Documentation, f_2.FieldType, f_2.Value)), sortBy<Spec_FormField$1<UserField>, int32>((f_1: Spec_FormField$1<UserField>): int32 => f_1.FieldOrder, map_1<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => {
500
502
  if (f.FieldOrder === formField.FieldOrder) {
501
- return new Spec_FormField$1(formField.FieldOrder + 1, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.FieldType, f.Value);
503
+ return new Spec_FormField$1(formField.FieldOrder + 1, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.NeedsDocumentation, f.Documentation, f.FieldType, f.Value);
502
504
  }
503
505
  else if (f.FieldOrder === (formField.FieldOrder + 1)) {
504
- return new Spec_FormField$1(formField.FieldOrder, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.FieldType, f.Value);
506
+ return new Spec_FormField$1(formField.FieldOrder, f.FieldKey, f.Label, f.Notes, f.DependsOn, f.IsOptional, f.IsDeprecated, f.NeedsDocumentation, f.Documentation, f.FieldType, f.Value);
505
507
  }
506
508
  else {
507
509
  return f;
@@ -513,7 +515,7 @@ export function Helpers_FormSpecMutators_moveFormFieldDownInFormSpec<UserField>(
513
515
  else {
514
516
  return s;
515
517
  }
516
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
518
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
517
519
  }
518
520
 
519
521
  /**
@@ -525,7 +527,7 @@ export function Helpers_FormSpecMutators_moveFieldByKeyToPositionInFormStepSpec<
525
527
  const formStep_1: Spec_FormStep$1<UserField> = value_1(formStep);
526
528
  return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, map_1<Spec_FormStep$1<UserField>, Spec_FormStep$1<UserField>>((s: Spec_FormStep$1<UserField>): Spec_FormStep$1<UserField> => {
527
529
  if (s.StepOrder === formStep_1.StepOrder) {
528
- return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index_1: int32, f_1: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index_1 + 1, f_1.FieldKey, f_1.Label, f_1.Notes, f_1.DependsOn, f_1.IsOptional, f_1.IsDeprecated, f_1.FieldType, f_1.Value)), List_distinct<Spec_FormField$1<UserField>>(insertAt<Spec_FormField$1<UserField>>(newPositionFieldOrder - 1, find<Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): boolean => equals(f.FieldKey, fieldKey), s.Fields), s.Fields), {
530
+ return new Spec_FormStep$1(s.StepOrder, s.StepLabel, mapIndexed<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((index_1: int32, f_1: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1(index_1 + 1, f_1.FieldKey, f_1.Label, f_1.Notes, f_1.DependsOn, f_1.IsOptional, f_1.IsDeprecated, f_1.NeedsDocumentation, f_1.Documentation, f_1.FieldType, f_1.Value)), List_distinct<Spec_FormField$1<UserField>>(insertAt<Spec_FormField$1<UserField>>(newPositionFieldOrder - 1, find<Spec_FormField$1<UserField>>((f: Spec_FormField$1<UserField>): boolean => equals(f.FieldKey, fieldKey), s.Fields), s.Fields), {
529
531
  Equals: equals,
530
532
  GetHashCode: safeHash,
531
533
  })));
@@ -533,7 +535,7 @@ export function Helpers_FormSpecMutators_moveFieldByKeyToPositionInFormStepSpec<
533
535
  else {
534
536
  return s;
535
537
  }
536
- }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
538
+ }, formSpec.Steps), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
537
539
  }
538
540
  else {
539
541
  return formSpec;
@@ -556,7 +558,7 @@ export function Helpers_FormSpecMutators_moveFormStepUpInFormSpec<UserField>(for
556
558
  }
557
559
  }, formSpec.Steps), {
558
560
  Compare: comparePrimitives,
559
- })), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
561
+ })), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
560
562
  }
561
563
 
562
564
  /**
@@ -575,14 +577,14 @@ export function Helpers_FormSpecMutators_moveFormStepDownInFormSpec<UserField>(f
575
577
  }
576
578
  }, formSpec.Steps), {
577
579
  Compare: comparePrimitives,
578
- })), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
580
+ })), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
579
581
  }
580
582
 
581
583
  /**
582
584
  * Removes a form step from a FormSpec.
583
585
  */
584
586
  export function Helpers_FormSpecMutators_removeFormStepFromFormSpec<UserField>(formStepOrder: int32, formSpec: Spec_FormSpec$1<UserField>): Spec_FormSpec$1<UserField> {
585
- return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, mapIndexed<Spec_FormStep$1<UserField>, Spec_FormStep$1<UserField>>((i: int32, s_1: Spec_FormStep$1<UserField>): Spec_FormStep$1<UserField> => (new Spec_FormStep$1(i + 1, s_1.StepLabel, s_1.Fields)), filter<Spec_FormStep$1<UserField>>((s: Spec_FormStep$1<UserField>): boolean => (s.StepOrder !== formStepOrder), formSpec.Steps)), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
587
+ return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, mapIndexed<Spec_FormStep$1<UserField>, Spec_FormStep$1<UserField>>((i: int32, s_1: Spec_FormStep$1<UserField>): Spec_FormStep$1<UserField> => (new Spec_FormStep$1(i + 1, s_1.StepLabel, s_1.Fields)), filter<Spec_FormStep$1<UserField>>((s: Spec_FormStep$1<UserField>): boolean => (s.StepOrder !== formStepOrder), formSpec.Steps)), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
586
588
  }
587
589
 
588
590
  /**
@@ -597,7 +599,7 @@ export function Helpers_FormSpecTransformers_flattenSpecSteps<UserField>(formSpe
597
599
  if (!isEmpty(steps)) {
598
600
  const step: Spec_FormStep$1<UserField> = head(steps);
599
601
  steps_mut = tail(steps);
600
- acc_mut = append(acc, map_1<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((field: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1((step.StepOrder * 1000) + field.FieldOrder, field.FieldKey, field.Label, field.Notes, field.DependsOn, field.IsOptional, field.IsDeprecated, field.FieldType, field.Value)), step.Fields));
602
+ acc_mut = append(acc, map_1<Spec_FormField$1<UserField>, Spec_FormField$1<UserField>>((field: Spec_FormField$1<UserField>): Spec_FormField$1<UserField> => (new Spec_FormField$1((step.StepOrder * 1000) + field.FieldOrder, field.FieldKey, field.Label, field.Notes, field.DependsOn, field.IsOptional, field.IsDeprecated, field.NeedsDocumentation, field.Documentation, field.FieldType, field.Value)), step.Fields));
601
603
  continue flatten;
602
604
  }
603
605
  else {
@@ -606,7 +608,7 @@ export function Helpers_FormSpecTransformers_flattenSpecSteps<UserField>(formSpe
606
608
  break;
607
609
  }
608
610
  };
609
- return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, singleton(new Spec_FormStep$1(1, "Complete Form", flatten(formSpec.Steps, empty<Spec_FormField$1<UserField>>()))), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta);
611
+ return new Spec_FormSpec$1(formSpec.Id, formSpec.Code, formSpec.Title, formSpec.Abstract, formSpec.Version, formSpec.FormSpecVersion, singleton(new Spec_FormStep$1(1, "Complete Form", flatten(formSpec.Steps, empty<Spec_FormField$1<UserField>>()))), formSpec.CategoryTags, formSpec.Score, formSpec.AssociatedCodes, formSpec.RequiresReview, formSpec.RequiresReviewAndApproval, formSpec.ClinicalPathway, formSpec.Lifecycle, formSpec.FilledMeta, formSpec.CustomData, formSpec.Provenance);
610
612
  }
611
613
 
612
614
  /**
@@ -630,7 +632,22 @@ export function Helpers_specFieldOptionsToValueOptions(options: FSharpList<Share
630
632
  export function Helpers_optionsFromSpecField(field: Spec_FormField$1<Spec_FieldType_$union>): FSharpList<Shared_FieldOption> {
631
633
  const matchValue: Spec_FieldType_$union = field.FieldType;
632
634
  switch (matchValue.tag) {
633
- case /* PluginField */ 22:
635
+ case /* Checkbox */ 11:
636
+ case /* Email */ 2:
637
+ case /* Password */ 3:
638
+ case /* Search */ 4:
639
+ case /* Color */ 5:
640
+ case /* Number */ 6:
641
+ case /* Tel */ 7:
642
+ case /* Text */ 0:
643
+ case /* TextArea */ 1:
644
+ case /* Date */ 8:
645
+ case /* DateTimeLocal */ 9:
646
+ case /* Time */ 10:
647
+ case /* Message */ 21:
648
+ case /* Signature */ 20:
649
+ return empty<Shared_FieldOption>();
650
+ case /* PluginField */ 23:
634
651
  return empty<Shared_FieldOption>();
635
652
  case /* CheckboxList */ 16:
636
653
  return matchValue.fields[0].Options;
@@ -649,7 +666,7 @@ export function Helpers_optionsFromSpecField(field: Spec_FormField$1<Spec_FieldT
649
666
  case /* Matrix */ 19:
650
667
  return matchValue.fields[0].Options;
651
668
  default:
652
- return empty<Shared_FieldOption>();
669
+ throw new Error("Match failure: F1.Studio.Spec.FieldType");
653
670
  }
654
671
  }
655
672
 
@@ -0,0 +1,37 @@
1
+ import { isNullOrWhiteSpace, printf, toText } from "@fable-org/fable-library-js/String.js";
2
+ import { exists, length, isEmpty, FSharpList, cons, singleton, empty } from "@fable-org/fable-library-js/List.js";
3
+ import { FSharpResult$2_$union, FSharpResult$2_Ok, FSharpResult$2_Error } from "@fable-org/fable-library-js/Result.js";
4
+ import { Spec_FieldType_$union, Spec_FormSpec$1 } from "../../../FormSpec.js";
5
+ import { ListMetadata, convertWithMapAndProvenance } from "./CoreMRSourceMap.js";
6
+ import { CoreMRChoice, CoreMRItem, CoreMRFormData } from "../../CorEMR/CoreMRTypes.js";
7
+ import { buildReport } from "./CorEMRSemanticReportBuilder.js";
8
+ import { defaultArg } from "@fable-org/fable-library-js/Option.js";
9
+ import { nonHeadingItems } from "./CorEMRSectioning.js";
10
+ import { int32ToString } from "@fable-org/fable-library-js/Util.js";
11
+ import { FormSystemAdapter$1, FormSystemFeatures, FormMetadata } from "../FormSystemAdapter.js";
12
+
13
+ /**
14
+ * Convert with list metadata (IsScored, EncounterTypes) from FormListItem.
15
+ * Use when importing from fetch-coremr-forms where FormListItem is available.
16
+ */
17
+ export function convertWithListMetadata(formData: CoreMRFormData, listMetadata: ListMetadata): FSharpResult$2_$union<Spec_FormSpec$1<Spec_FieldType_$union>, FSharpList<string>> {
18
+ let arg: string;
19
+ try {
20
+ return FSharpResult$2_Ok<Spec_FormSpec$1<Spec_FieldType_$union>, FSharpList<string>>(convertWithMapAndProvenance(formData, listMetadata));
21
+ }
22
+ catch (ex: any) {
23
+ return FSharpResult$2_Error<Spec_FormSpec$1<Spec_FieldType_$union>, FSharpList<string>>(cons((arg = ex.message, toText(printf("CorEMR conversion failed: %s"))(arg)), (ex.stack == null) ? empty<string>() : singleton(" Stack: " + ex.stack)));
24
+ }
25
+ }
26
+
27
+ export const adapter: FormSystemAdapter$1<CoreMRFormData> = new FormSystemAdapter$1("coremr", (template: CoreMRFormData): FSharpResult$2_$union<Spec_FormSpec$1<Spec_FieldType_$union>, FSharpList<string>> => {
28
+ let arg: string;
29
+ try {
30
+ return FSharpResult$2_Ok<Spec_FormSpec$1<Spec_FieldType_$union>, FSharpList<string>>(convertWithMapAndProvenance(template, undefined));
31
+ }
32
+ catch (ex: any) {
33
+ return FSharpResult$2_Error<Spec_FormSpec$1<Spec_FieldType_$union>, FSharpList<string>>(cons((arg = ex.message, toText(printf("CorEMR conversion failed: %s"))(arg)), (ex.stack == null) ? empty<string>() : singleton(" Stack: " + ex.stack)));
34
+ }
35
+ }, buildReport, (template_2: CoreMRFormData): FSharpResult$2_$union<void, FSharpList<string>> => (isEmpty(template_2.Items) ? FSharpResult$2_Error<void, FSharpList<string>>(singleton("Template has no items")) : (isNullOrWhiteSpace(template_2.Metadata.FormName) ? FSharpResult$2_Error<void, FSharpList<string>>(singleton("Template has no name")) : FSharpResult$2_Ok<void, FSharpList<string>>(undefined))), (template_3: CoreMRFormData): FormMetadata => (new FormMetadata(template_3.Metadata.FormName, defaultArg(template_3.Metadata.Description, ""), length<CoreMRItem>(nonHeadingItems(template_3.Items)), exists<CoreMRChoice>((c: CoreMRChoice): boolean => (c.Score > 0), template_3.Choices), !isEmpty(template_3.Triggers), int32ToString(template_3.Metadata.VersionNumber))), new FormSystemFeatures(true, true, true, true, true));
36
+
37
+ //# sourceMappingURL=CorEMRAdapter.ts.map
@@ -0,0 +1,103 @@
1
+ import { Record } from "@fable-org/fable-library-js/Types.js";
2
+ import { IComparable, IEquatable } from "@fable-org/fable-library-js/Util.js";
3
+ import { record_type, bool_type, string_type, TypeInfo } from "@fable-org/fable-library-js/Reflection.js";
4
+ import { int32 } from "@fable-org/fable-library-js/Int32.js";
5
+
6
+ export class ElementTypeInfo extends Record implements IEquatable<ElementTypeInfo>, IComparable<ElementTypeInfo> {
7
+ readonly Code: string;
8
+ readonly ValueEncoding: string;
9
+ readonly TextFieldRole: string;
10
+ readonly IsPlusNotes: boolean;
11
+ readonly IsScaffold: boolean;
12
+ readonly IsSkip: boolean;
13
+ readonly IsNeedsDocumentation: boolean;
14
+ constructor(Code: string, ValueEncoding: string, TextFieldRole: string, IsPlusNotes: boolean, IsScaffold: boolean, IsSkip: boolean, IsNeedsDocumentation: boolean) {
15
+ super();
16
+ this.Code = Code;
17
+ this.ValueEncoding = ValueEncoding;
18
+ this.TextFieldRole = TextFieldRole;
19
+ this.IsPlusNotes = IsPlusNotes;
20
+ this.IsScaffold = IsScaffold;
21
+ this.IsSkip = IsSkip;
22
+ this.IsNeedsDocumentation = IsNeedsDocumentation;
23
+ }
24
+ }
25
+
26
+ export function ElementTypeInfo_$reflection(): TypeInfo {
27
+ return record_type("FormSpec.Integrations.CorEMR.CorEMRElementTypeMap.ElementTypeInfo", [], ElementTypeInfo, () => [["Code", string_type], ["ValueEncoding", string_type], ["TextFieldRole", string_type], ["IsPlusNotes", bool_type], ["IsScaffold", bool_type], ["IsSkip", bool_type], ["IsNeedsDocumentation", bool_type]]);
28
+ }
29
+
30
+ export function getElementTypeInfo(itemTypeId: int32): ElementTypeInfo {
31
+ switch (itemTypeId) {
32
+ case 1:
33
+ return new ElementTypeInfo("text", "zero", "content", false, false, false, false);
34
+ case 2:
35
+ return new ElementTypeInfo("text_multiline", "zero", "content", false, false, false, false);
36
+ case 20:
37
+ return new ElementTypeInfo("dropdown", "choice_score", "ignored", false, false, false, false);
38
+ case 21:
39
+ return new ElementTypeInfo("dropdown_notes", "choice_score", "optional_notes", true, false, false, true);
40
+ case 25:
41
+ return new ElementTypeInfo("dropdown_notes_ui", "choice_score", "ignored", false, false, false, true);
42
+ case 26:
43
+ return new ElementTypeInfo("chips_notes", "choice_score", "optional_notes", true, false, false, true);
44
+ case 30:
45
+ return new ElementTypeInfo("yes_no_text", "1_yes_2_no", "optional_notes", false, false, false, true);
46
+ case 31:
47
+ return new ElementTypeInfo("yes_no_notes", "1_yes_2_no", "optional_notes", true, false, false, true);
48
+ case 32:
49
+ return new ElementTypeInfo("exam_3choice", "choice_score", "ignored", false, false, false, false);
50
+ case 40:
51
+ return new ElementTypeInfo("checkbox", "choice_score", "ignored", false, false, false, false);
52
+ case 41:
53
+ return new ElementTypeInfo("checkbox_notes", "choice_score", "optional_notes", true, false, false, true);
54
+ case 50:
55
+ return new ElementTypeInfo("date", "zero", "iso_date", false, false, false, false);
56
+ case 51:
57
+ return new ElementTypeInfo("signature_date", "zero", "content", false, false, false, false);
58
+ case 60:
59
+ return new ElementTypeInfo("datetime", "zero", "iso_date", false, false, false, false);
60
+ case 61:
61
+ return new ElementTypeInfo("signature", "skip", "skip", false, false, true, false);
62
+ case 110:
63
+ return new ElementTypeInfo("heading", "scaffold", "ignored", false, true, false, false);
64
+ case 120:
65
+ return new ElementTypeInfo("instructions", "scaffold", "ignored", false, true, false, false);
66
+ case 121:
67
+ return new ElementTypeInfo("group_row", "scaffold", "ignored", false, true, false, false);
68
+ case 130:
69
+ return new ElementTypeInfo("vitals_widget", "scaffold", "ignored", false, true, false, false);
70
+ case 131:
71
+ return new ElementTypeInfo("linked_data", "scaffold", "ignored", false, true, false, false);
72
+ case 132:
73
+ return new ElementTypeInfo("linked_data_rare", "scaffold", "ignored", false, true, false, false);
74
+ case 133:
75
+ return new ElementTypeInfo("sub_header", "scaffold", "ignored", false, true, false, false);
76
+ case 134:
77
+ return new ElementTypeInfo("score_display", "scaffold", "ignored", false, true, false, false);
78
+ case 135:
79
+ return new ElementTypeInfo("score_explanation", "scaffold", "ignored", false, true, false, false);
80
+ case 138:
81
+ return new ElementTypeInfo("unknown_138", "scaffold", "ignored", false, true, false, false);
82
+ case 140:
83
+ return new ElementTypeInfo("allergy_autofill", "scaffold", "ignored", false, true, false, false);
84
+ case 143:
85
+ return new ElementTypeInfo("chips_ros", "choice_score", "ignored", false, false, false, false);
86
+ default:
87
+ return new ElementTypeInfo(`unknown_${itemTypeId}`, "unknown", "unknown", false, false, true, false);
88
+ }
89
+ }
90
+
91
+ export function elementTypeCode(itemTypeId: int32): string {
92
+ return getElementTypeInfo(itemTypeId).Code;
93
+ }
94
+
95
+ /**
96
+ * HasText = "content" | "optional_notes", HasDate = "iso_date"
97
+ */
98
+ export function hasTextHasDate(itemTypeId: int32): [boolean, boolean] {
99
+ const info: ElementTypeInfo = getElementTypeInfo(itemTypeId);
100
+ return [(info.TextFieldRole === "content") ? true : (info.TextFieldRole === "optional_notes"), info.TextFieldRole === "iso_date"] as [boolean, boolean];
101
+ }
102
+
103
+ //# sourceMappingURL=CorEMRElementTypeMap.ts.map
@@ -0,0 +1,129 @@
1
+ import { isNullOrWhiteSpace } from "@fable-org/fable-library-js/String.js";
2
+ import { Helpers_generateDeterministicGuidRaw, Helpers_canonicalizeFieldKey } from "../../../Helpers.js";
3
+ import { defaultArg, Option, value as value_1 } from "@fable-org/fable-library-js/Option.js";
4
+ import { int32 } from "@fable-org/fable-library-js/Int32.js";
5
+ import { CoreMRChoice, CoreMRItem } from "../../CorEMR/CoreMRTypes.js";
6
+ import { Spec_FormField$1, Spec_FieldType_$union, Spec_FieldType_UnsupportedField, Spec_UnsupportedFieldInfo, Spec_FieldType_PluginField, Spec_PluginFieldConfig, Spec_FieldType_Message, Spec_MessageInfo, Spec_MessageType_Info, Spec_FieldType_DateTimeLocal, Spec_FieldType_Signature, Spec_SignatureInfo, Spec_FieldType_Date, Spec_FieldType_Radio, Spec_FieldType_CheckboxList, Spec_MultiChoiceInfo, Spec_FieldType_Dropdown, Spec_SingleChoiceInfo, Spec_FieldType_TextArea, Spec_FieldType_Text, Spec_TextInfo, Shared_FieldOption, Shared_FieldOptionKey, Shared_FieldKey } from "../../../FormSpec.js";
7
+ import { sort, isEmpty, ofArray, FSharpList, sortBy, map } from "@fable-org/fable-library-js/List.js";
8
+ import { comparePrimitives } from "@fable-org/fable-library-js/Util.js";
9
+ import { getElementTypeInfo } from "./CorEMRElementTypeMap.js";
10
+ import { normalizeChoiceScores } from "../../../BitmaskHelpers.js";
11
+
12
+ function buildNamespacedFieldSeed(formCode: string, stepOrder: int32, item: CoreMRItem): string {
13
+ let matchValue: Option<string>;
14
+ return `formspec.${isNullOrWhiteSpace(formCode) ? "unknown" : Helpers_canonicalizeFieldKey(formCode)}:step${stepOrder}.${isNullOrWhiteSpace(item.Label) ? ((matchValue = item.Uuid, (matchValue == null) ? (`item_id_${item.ItemId}`) : (`item_uuid_${value_1(matchValue)}`))) : Helpers_canonicalizeFieldKey(item.Label)}`;
15
+ }
16
+
17
+ export function generateNamespacedFieldKey(formCode: string, stepOrder: int32, item: CoreMRItem): Shared_FieldKey {
18
+ return new Shared_FieldKey(Helpers_generateDeterministicGuidRaw(buildNamespacedFieldSeed(formCode, stepOrder, item)));
19
+ }
20
+
21
+ /**
22
+ * Map CoreMR choices to FormSpec FieldOptions.
23
+ * Choices come from the item_choices table (LEFT JOIN in the generator query).
24
+ * Score is NOT propagated to FormSpec — it's only used by the answer pipeline.
25
+ */
26
+ export function mapChoices(choices: FSharpList<CoreMRChoice>): FSharpList<Shared_FieldOption> {
27
+ return map<CoreMRChoice, Shared_FieldOption>((c_1: CoreMRChoice): Shared_FieldOption => (new Shared_FieldOption(c_1.Text, Helpers_canonicalizeFieldKey(c_1.Text), new Shared_FieldOptionKey(Helpers_generateDeterministicGuidRaw(`coremr:choice:${c_1.ChoiceId}:${c_1.Text}`)), undefined)), sortBy<CoreMRChoice, int32>((c: CoreMRChoice): int32 => c.Sequence, choices, {
28
+ Compare: comparePrimitives,
29
+ }));
30
+ }
31
+
32
+ function buildImplicitYesNoOptions(item: CoreMRItem): FSharpList<Shared_FieldOption> {
33
+ return ofArray([new Shared_FieldOption("Yes", "yes", new Shared_FieldOptionKey(Helpers_generateDeterministicGuidRaw(`coremr:implicit:${item.ItemId}:yes`)), undefined), new Shared_FieldOption("No", "no", new Shared_FieldOptionKey(Helpers_generateDeterministicGuidRaw(`coremr:implicit:${item.ItemId}:no`)), undefined)]);
34
+ }
35
+
36
+ /**
37
+ * Determine if item is a "Plus Notes" type that should enable the Notes field.
38
+ */
39
+ export function isPlusNotesType(item: CoreMRItem): boolean {
40
+ return getElementTypeInfo(item.ItemTypeId).IsPlusNotes;
41
+ }
42
+
43
+ /**
44
+ * Types 21, 25, 26, 30, 31, 41 — "with Notes" types that need Documentation field.
45
+ */
46
+ export function isNeedsDocumentationType(item: CoreMRItem): boolean {
47
+ return getElementTypeInfo(item.ItemTypeId).IsNeedsDocumentation;
48
+ }
49
+
50
+ export function mapFieldType(item: CoreMRItem, choices: FSharpList<CoreMRChoice>): Spec_FieldType_$union {
51
+ const mappedChoices: FSharpList<Shared_FieldOption> = mapChoices(choices);
52
+ const hasChoices: boolean = !isEmpty(mappedChoices);
53
+ const matchValue: int32 = item.ItemTypeId | 0;
54
+ switch (matchValue) {
55
+ case 1:
56
+ return Spec_FieldType_Text(new Spec_TextInfo(undefined));
57
+ case 2:
58
+ return Spec_FieldType_TextArea(new Spec_TextInfo(undefined));
59
+ case 20:
60
+ return Spec_FieldType_Dropdown(new Spec_SingleChoiceInfo(mappedChoices));
61
+ case 21:
62
+ return Spec_FieldType_Dropdown(new Spec_SingleChoiceInfo(mappedChoices));
63
+ case 25:
64
+ return Spec_FieldType_Dropdown(new Spec_SingleChoiceInfo(mappedChoices));
65
+ case 26:
66
+ return Spec_FieldType_CheckboxList(new Spec_MultiChoiceInfo(mappedChoices));
67
+ case 30:
68
+ return Spec_FieldType_Radio(new Spec_SingleChoiceInfo(hasChoices ? mappedChoices : buildImplicitYesNoOptions(item)));
69
+ case 31:
70
+ return Spec_FieldType_Radio(new Spec_SingleChoiceInfo(hasChoices ? mappedChoices : buildImplicitYesNoOptions(item)));
71
+ case 32:
72
+ return Spec_FieldType_Dropdown(new Spec_SingleChoiceInfo(mappedChoices));
73
+ case 40:
74
+ if (normalizeChoiceScores(sort<int32>(map<CoreMRChoice, int32>((c: CoreMRChoice): int32 => c.Score, choices), {
75
+ Compare: comparePrimitives,
76
+ }))[1]) {
77
+ return Spec_FieldType_CheckboxList(new Spec_MultiChoiceInfo(mappedChoices));
78
+ }
79
+ else {
80
+ return Spec_FieldType_Radio(new Spec_SingleChoiceInfo(mappedChoices));
81
+ }
82
+ case 41:
83
+ if (normalizeChoiceScores(sort<int32>(map<CoreMRChoice, int32>((c_1: CoreMRChoice): int32 => c_1.Score, choices), {
84
+ Compare: comparePrimitives,
85
+ }))[1]) {
86
+ return Spec_FieldType_CheckboxList(new Spec_MultiChoiceInfo(mappedChoices));
87
+ }
88
+ else {
89
+ return Spec_FieldType_Radio(new Spec_SingleChoiceInfo(mappedChoices));
90
+ }
91
+ case 50:
92
+ return Spec_FieldType_Date(new Spec_TextInfo(undefined));
93
+ case 51:
94
+ return Spec_FieldType_Signature(new Spec_SignatureInfo(undefined));
95
+ case 60:
96
+ return Spec_FieldType_DateTimeLocal(new Spec_TextInfo(undefined));
97
+ case 61:
98
+ return Spec_FieldType_Signature(new Spec_SignatureInfo(undefined));
99
+ case 110:
100
+ throw new Error("Type 110 (Heading) should be filtered out before mapping to FieldType");
101
+ case 120:
102
+ return Spec_FieldType_Message(new Spec_MessageInfo("", Spec_MessageType_Info(), item.Label, undefined));
103
+ case 121:
104
+ return Spec_FieldType_Message(new Spec_MessageInfo("", Spec_MessageType_Info(), item.Label, undefined));
105
+ case 130:
106
+ return Spec_FieldType_PluginField(new Spec_PluginFieldConfig("Fable.Form.Simple.Bulma.Fields.VitalsField", undefined, undefined));
107
+ case 131:
108
+ case 132:
109
+ return Spec_FieldType_Message(new Spec_MessageInfo("", Spec_MessageType_Info(), item.Label, undefined));
110
+ case 133:
111
+ case 134:
112
+ case 135:
113
+ case 140:
114
+ return Spec_FieldType_Message(new Spec_MessageInfo("", Spec_MessageType_Info(), item.Label, undefined));
115
+ case 143:
116
+ return Spec_FieldType_CheckboxList(new Spec_MultiChoiceInfo(mappedChoices));
117
+ default:
118
+ return Spec_FieldType_UnsupportedField(new Spec_UnsupportedFieldInfo(item.ItemId, defaultArg(item.Code, ""), matchValue));
119
+ }
120
+ }
121
+
122
+ export function mapToFormField(formCode: string, stepOrder: int32, item: CoreMRItem, choices: FSharpList<CoreMRChoice>): Spec_FormField$1<Spec_FieldType_$union> {
123
+ const fieldType: Spec_FieldType_$union = mapFieldType(item, choices);
124
+ const mainLabel: string = item.Label.trim();
125
+ const notesField: Option<string> = isPlusNotesType(item) ? "" : undefined;
126
+ return new Spec_FormField$1(item.Sequence, generateNamespacedFieldKey(formCode, stepOrder, item), mainLabel, notesField, undefined, !item.IsRequired, false, isNeedsDocumentationType(item), undefined, fieldType, undefined);
127
+ }
128
+
129
+ //# sourceMappingURL=CorEMRFieldTypeMapper.ts.map