@welshare/questionnaire 0.1.2 → 0.2.0

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 (96) hide show
  1. package/README.md +151 -0
  2. package/dist/esm/components/bmi-form.d.ts +68 -0
  3. package/dist/esm/components/bmi-form.d.ts.map +1 -0
  4. package/dist/esm/components/bmi-form.js +138 -0
  5. package/dist/esm/components/question-renderer.d.ts +6 -1
  6. package/dist/esm/components/question-renderer.d.ts.map +1 -1
  7. package/dist/esm/components/question-renderer.js +25 -14
  8. package/dist/esm/components/questions/decimal-question.d.ts +8 -1
  9. package/dist/esm/components/questions/decimal-question.d.ts.map +1 -1
  10. package/dist/esm/components/questions/decimal-question.js +19 -1
  11. package/dist/esm/components/questions/multiple-choice-question.d.ts.map +1 -1
  12. package/dist/esm/components/questions/multiple-choice-question.js +2 -2
  13. package/dist/esm/contexts/questionnaire-context.d.ts.map +1 -1
  14. package/dist/esm/contexts/questionnaire-context.js +3 -2
  15. package/dist/esm/index.d.ts +6 -2
  16. package/dist/esm/index.d.ts.map +1 -1
  17. package/dist/esm/index.js +5 -1
  18. package/dist/esm/lib/bmi-helpers.d.ts +50 -0
  19. package/dist/esm/lib/bmi-helpers.d.ts.map +1 -0
  20. package/dist/esm/lib/bmi-helpers.js +69 -0
  21. package/dist/esm/lib/constants.d.ts +94 -0
  22. package/dist/esm/lib/constants.d.ts.map +1 -0
  23. package/dist/esm/lib/constants.js +93 -0
  24. package/dist/esm/lib/questionnaire-utils.d.ts +21 -1
  25. package/dist/esm/lib/questionnaire-utils.d.ts.map +1 -1
  26. package/dist/esm/lib/questionnaire-utils.js +85 -4
  27. package/dist/esm/types/fhir.d.ts +1 -0
  28. package/dist/esm/types/fhir.d.ts.map +1 -1
  29. package/dist/esm/types/index.d.ts +25 -0
  30. package/dist/esm/types/index.d.ts.map +1 -1
  31. package/dist/styles.css +108 -0
  32. package/package.json +17 -6
  33. package/dist/node_modules/@welshare/questionnaire/.tshy/build.json +0 -8
  34. package/dist/node_modules/@welshare/questionnaire/.tshy/esm.json +0 -16
  35. package/dist/node_modules/@welshare/questionnaire/LICENSE +0 -7
  36. package/dist/node_modules/@welshare/questionnaire/README.md +0 -173
  37. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/debug-section.d.ts +0 -44
  38. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/debug-section.d.ts.map +0 -1
  39. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/debug-section.js +0 -28
  40. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/question-renderer.d.ts +0 -80
  41. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/question-renderer.d.ts.map +0 -1
  42. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/question-renderer.js +0 -183
  43. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/boolean-question.d.ts +0 -15
  44. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/boolean-question.d.ts.map +0 -1
  45. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/boolean-question.js +0 -19
  46. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/choice-question.d.ts +0 -19
  47. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/choice-question.d.ts.map +0 -1
  48. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/choice-question.js +0 -23
  49. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/decimal-question.d.ts +0 -12
  50. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/decimal-question.d.ts.map +0 -1
  51. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/decimal-question.js +0 -7
  52. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/integer-question.d.ts +0 -18
  53. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/integer-question.d.ts.map +0 -1
  54. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/integer-question.js +0 -24
  55. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/multiple-choice-question.d.ts +0 -20
  56. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/multiple-choice-question.d.ts.map +0 -1
  57. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/multiple-choice-question.js +0 -39
  58. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/string-question.d.ts +0 -12
  59. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/string-question.d.ts.map +0 -1
  60. package/dist/node_modules/@welshare/questionnaire/dist/esm/components/questions/string-question.js +0 -7
  61. package/dist/node_modules/@welshare/questionnaire/dist/esm/contexts/questionnaire-context.d.ts +0 -41
  62. package/dist/node_modules/@welshare/questionnaire/dist/esm/contexts/questionnaire-context.d.ts.map +0 -1
  63. package/dist/node_modules/@welshare/questionnaire/dist/esm/contexts/questionnaire-context.js +0 -350
  64. package/dist/node_modules/@welshare/questionnaire/dist/esm/index.d.ts +0 -7
  65. package/dist/node_modules/@welshare/questionnaire/dist/esm/index.d.ts.map +0 -1
  66. package/dist/node_modules/@welshare/questionnaire/dist/esm/index.js +0 -6
  67. package/dist/node_modules/@welshare/questionnaire/dist/esm/lib/questionnaire-utils.d.ts +0 -33
  68. package/dist/node_modules/@welshare/questionnaire/dist/esm/lib/questionnaire-utils.d.ts.map +0 -1
  69. package/dist/node_modules/@welshare/questionnaire/dist/esm/lib/questionnaire-utils.js +0 -99
  70. package/dist/node_modules/@welshare/questionnaire/dist/esm/package.json +0 -3
  71. package/dist/node_modules/@welshare/questionnaire/dist/esm/types/fhir.d.ts +0 -117
  72. package/dist/node_modules/@welshare/questionnaire/dist/esm/types/fhir.d.ts.map +0 -1
  73. package/dist/node_modules/@welshare/questionnaire/dist/esm/types/fhir.js +0 -3
  74. package/dist/node_modules/@welshare/questionnaire/dist/esm/types/index.d.ts +0 -51
  75. package/dist/node_modules/@welshare/questionnaire/dist/esm/types/index.d.ts.map +0 -1
  76. package/dist/node_modules/@welshare/questionnaire/dist/esm/types/index.js +0 -1
  77. package/dist/node_modules/@welshare/questionnaire/dist/styles.css +0 -467
  78. package/dist/node_modules/@welshare/questionnaire/dist/tokens.css +0 -130
  79. package/dist/node_modules/@welshare/questionnaire/package.json +0 -85
  80. package/dist/node_modules/@welshare/questionnaire/src/components/debug-section.tsx +0 -116
  81. package/dist/node_modules/@welshare/questionnaire/src/components/question-renderer.tsx +0 -391
  82. package/dist/node_modules/@welshare/questionnaire/src/components/questionnaire-styles.css +0 -467
  83. package/dist/node_modules/@welshare/questionnaire/src/components/questionnaire-tokens.css +0 -130
  84. package/dist/node_modules/@welshare/questionnaire/src/components/questions/boolean-question.tsx +0 -72
  85. package/dist/node_modules/@welshare/questionnaire/src/components/questions/choice-question.tsx +0 -68
  86. package/dist/node_modules/@welshare/questionnaire/src/components/questions/decimal-question.tsx +0 -32
  87. package/dist/node_modules/@welshare/questionnaire/src/components/questions/integer-question.tsx +0 -87
  88. package/dist/node_modules/@welshare/questionnaire/src/components/questions/multiple-choice-question.tsx +0 -119
  89. package/dist/node_modules/@welshare/questionnaire/src/components/questions/string-question.tsx +0 -31
  90. package/dist/node_modules/@welshare/questionnaire/src/contexts/questionnaire-context.tsx +0 -499
  91. package/dist/node_modules/@welshare/questionnaire/src/index.ts +0 -41
  92. package/dist/node_modules/@welshare/questionnaire/src/lib/__tests__/questionnaire-utils.test.ts +0 -578
  93. package/dist/node_modules/@welshare/questionnaire/src/lib/questionnaire-utils.ts +0 -122
  94. package/dist/node_modules/@welshare/questionnaire/src/types/fhir.ts +0 -126
  95. package/dist/node_modules/@welshare/questionnaire/src/types/index.ts +0 -44
  96. package/dist/node_modules/@welshare/questionnaire/tsconfig.json +0 -16
@@ -1,7 +1,11 @@
1
1
  export { QuestionRenderer } from "./components/question-renderer.js";
2
2
  export type { QuestionRendererProps } from "./components/question-renderer.js";
3
+ export { BmiForm } from "./components/bmi-form.js";
4
+ export type { BmiFormProps } from "./components/bmi-form.js";
3
5
  export { QuestionnaireProvider, useQuestionnaire, type QuestionnaireContextType, type QuestionnaireProviderProps, } from "./contexts/questionnaire-context.js";
4
6
  export type { Coding, Extension, Questionnaire, QuestionnaireItem, QuestionnaireItemAnswerOption, QuestionnaireResponse, QuestionnaireResponseAnswer, QuestionnaireResponseItem, } from "./types/fhir.js";
5
- export type { RadioInputProps, CheckboxInputProps, } from "./types/index.js";
6
- export { calculateProgress, findQuestionnaireItem, getAllQuestionsFromPage, getExclusiveOptionCode, getVisiblePages, hasAnswerValue, isQuestionHidden, } from "./lib/questionnaire-utils.js";
7
+ export type { RadioInputProps, CheckboxInputProps, InputHelperConfig, HelperTriggerProps, } from "./types/index.js";
8
+ export { calculateProgress, findQuestionnaireItem, getAllQuestionsFromPage, getExclusiveOptionCode, getInputHelper, getVisiblePages, hasAnswerValue, isQuestionHidden, } from "./lib/questionnaire-utils.js";
9
+ export { calculateBmi } from "./lib/bmi-helpers.js";
10
+ export { FHIR_EXTENSIONS, WELSHARE_EXTENSIONS, WELSHARE_CODE_SYSTEMS, FHIR_CODE_SYSTEMS, } from "./lib/constants.js";
7
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EACV,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EACV,MAAM,EACN,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,6BAA6B,EAC7B,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,eAAe,EACf,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EACV,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EACV,MAAM,EACN,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,6BAA6B,EAC7B,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,YAAY,EACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,6 +1,10 @@
1
1
  // Components
2
2
  export { QuestionRenderer } from "./components/question-renderer.js";
3
+ export { BmiForm } from "./components/bmi-form.js";
3
4
  // Contexts
4
5
  export { QuestionnaireProvider, useQuestionnaire, } from "./contexts/questionnaire-context.js";
5
6
  // Utils
6
- export { calculateProgress, findQuestionnaireItem, getAllQuestionsFromPage, getExclusiveOptionCode, getVisiblePages, hasAnswerValue, isQuestionHidden, } from "./lib/questionnaire-utils.js";
7
+ export { calculateProgress, findQuestionnaireItem, getAllQuestionsFromPage, getExclusiveOptionCode, getInputHelper, getVisiblePages, hasAnswerValue, isQuestionHidden, } from "./lib/questionnaire-utils.js";
8
+ export { calculateBmi } from "./lib/bmi-helpers.js";
9
+ // Constants
10
+ export { FHIR_EXTENSIONS, WELSHARE_EXTENSIONS, WELSHARE_CODE_SYSTEMS, FHIR_CODE_SYSTEMS, } from "./lib/constants.js";
@@ -0,0 +1,50 @@
1
+ /**
2
+ * BMI and unit conversion helpers
3
+ *
4
+ * All calculations follow clinical standards where metric (cm, kg) is the canonical unit system.
5
+ */
6
+ /**
7
+ * Conversion constants
8
+ */
9
+ export declare const CM_PER_INCH = 2.54;
10
+ export declare const INCHES_PER_FOOT = 12;
11
+ export declare const KG_PER_LB = 0.45359237;
12
+ /**
13
+ * Convert centimeters to inches
14
+ */
15
+ export declare function cmToInches(cm: number): number;
16
+ /**
17
+ * Convert inches to centimeters
18
+ */
19
+ export declare function inchesToCm(inches: number): number;
20
+ /**
21
+ * Convert feet and inches to centimeters
22
+ */
23
+ export declare function feetAndInchesToCm(feet: number, inches: number): number;
24
+ /**
25
+ * Convert centimeters to feet and inches
26
+ * @returns Object with feet (whole number) and inches (decimal)
27
+ */
28
+ export declare function cmToFeetAndInches(cm: number): {
29
+ feet: number;
30
+ inches: number;
31
+ };
32
+ /**
33
+ * Convert kilograms to pounds
34
+ */
35
+ export declare function kgToLbs(kg: number): number;
36
+ /**
37
+ * Convert pounds to kilograms
38
+ */
39
+ export declare function lbsToKg(lbs: number): number;
40
+ /**
41
+ * Calculate BMI from metric values
42
+ *
43
+ * BMI = weight (kg) / (height (m))²
44
+ *
45
+ * @param heightCm - Height in centimeters
46
+ * @param weightKg - Weight in kilograms
47
+ * @returns BMI rounded to 1 decimal place, or 0 if inputs are invalid
48
+ */
49
+ export declare function calculateBmi(heightCm: number, weightKg: number): number;
50
+ //# sourceMappingURL=bmi-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bmi-helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/bmi-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,OAAO,CAAC;AAChC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAK9E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOvE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * BMI and unit conversion helpers
3
+ *
4
+ * All calculations follow clinical standards where metric (cm, kg) is the canonical unit system.
5
+ */
6
+ /**
7
+ * Conversion constants
8
+ */
9
+ export const CM_PER_INCH = 2.54;
10
+ export const INCHES_PER_FOOT = 12;
11
+ export const KG_PER_LB = 0.45359237;
12
+ /**
13
+ * Convert centimeters to inches
14
+ */
15
+ export function cmToInches(cm) {
16
+ return cm / CM_PER_INCH;
17
+ }
18
+ /**
19
+ * Convert inches to centimeters
20
+ */
21
+ export function inchesToCm(inches) {
22
+ return inches * CM_PER_INCH;
23
+ }
24
+ /**
25
+ * Convert feet and inches to centimeters
26
+ */
27
+ export function feetAndInchesToCm(feet, inches) {
28
+ const totalInches = feet * INCHES_PER_FOOT + inches;
29
+ return inchesToCm(totalInches);
30
+ }
31
+ /**
32
+ * Convert centimeters to feet and inches
33
+ * @returns Object with feet (whole number) and inches (decimal)
34
+ */
35
+ export function cmToFeetAndInches(cm) {
36
+ const totalInches = cmToInches(cm);
37
+ const feet = Math.floor(totalInches / INCHES_PER_FOOT);
38
+ const inches = Math.round((totalInches % INCHES_PER_FOOT) * 10) / 10;
39
+ return { feet, inches };
40
+ }
41
+ /**
42
+ * Convert kilograms to pounds
43
+ */
44
+ export function kgToLbs(kg) {
45
+ return kg / KG_PER_LB;
46
+ }
47
+ /**
48
+ * Convert pounds to kilograms
49
+ */
50
+ export function lbsToKg(lbs) {
51
+ return lbs * KG_PER_LB;
52
+ }
53
+ /**
54
+ * Calculate BMI from metric values
55
+ *
56
+ * BMI = weight (kg) / (height (m))²
57
+ *
58
+ * @param heightCm - Height in centimeters
59
+ * @param weightKg - Weight in kilograms
60
+ * @returns BMI rounded to 1 decimal place, or 0 if inputs are invalid
61
+ */
62
+ export function calculateBmi(heightCm, weightKg) {
63
+ if (!heightCm || !weightKg || heightCm <= 0 || weightKg <= 0) {
64
+ return 0;
65
+ }
66
+ const heightInMeters = heightCm / 100;
67
+ const bmi = weightKg / (heightInMeters * heightInMeters);
68
+ return Math.round(bmi * 10) / 10;
69
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * FHIR Extension URLs
3
+ * Standard HL7 FHIR extension URLs used in questionnaires
4
+ */
5
+ export declare const FHIR_EXTENSIONS: {
6
+ /**
7
+ * Standard FHIR extension for marking questionnaire items as hidden
8
+ * Used for auto-populated fields that shouldn't be displayed to users
9
+ * @see http://hl7.org/fhir/StructureDefinition/questionnaire-hidden
10
+ */
11
+ readonly QUESTIONNAIRE_HIDDEN: "http://hl7.org/fhir/StructureDefinition/questionnaire-hidden";
12
+ };
13
+ /**
14
+ * Welshare Custom Extension URLs
15
+ * Custom FHIR extensions defined by Welshare for enhanced questionnaire functionality
16
+ * These extensions are hosted at codes.welshare.app/StructureDefinition
17
+ */
18
+ export declare const WELSHARE_EXTENSIONS: {
19
+ /**
20
+ * Extension for marking an answer option as mutually exclusive with other options
21
+ * When this option is selected, all other options are deselected
22
+ * Value: valueString containing the code of the exclusive option
23
+ * @example
24
+ * ```json
25
+ * {
26
+ * "url": "http://codes.welshare.app/StructureDefinition/questionnaire-exclusive-option",
27
+ * "valueString": "none-of-the-above"
28
+ * }
29
+ * ```
30
+ */
31
+ readonly EXCLUSIVE_OPTION: "http://codes.welshare.app/StructureDefinition/questionnaire-exclusive-option";
32
+ /**
33
+ * Extension for configuring input helper widgets on questions
34
+ * Provides additional UI controls to help users enter values
35
+ * Value: valueCodeableConcept with coding from WELSHARE_CODE_SYSTEMS.INPUT_HELPER_TYPE
36
+ * @example
37
+ * ```json
38
+ * {
39
+ * "url": "http://codes.welshare.app/StructureDefinition/questionnaire-inputHelper",
40
+ * "valueCodeableConcept": {
41
+ * "coding": [{
42
+ * "system": "http://codes.welshare.app/input-helper-type",
43
+ * "code": "bmi-calculator",
44
+ * "display": "BMI Calculator"
45
+ * }]
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+ readonly INPUT_HELPER: "http://codes.welshare.app/StructureDefinition/questionnaire-inputHelper";
51
+ /**
52
+ * Extension for configuring slider controls on numeric questions (integer/decimal)
53
+ * Allows defining min/max values, step size, and unit labels
54
+ * Value: complex extension with nested extensions for minValue, maxValue, step, unit
55
+ * @example
56
+ * ```json
57
+ * {
58
+ * "url": "http://codes.welshare.app/StructureDefinition/questionnaire-slider-control",
59
+ * "extension": [
60
+ * { "url": "minValue", "valueInteger": 0 },
61
+ * { "url": "maxValue", "valueInteger": 100 },
62
+ * { "url": "step", "valueInteger": 1 },
63
+ * { "url": "unit", "valueString": "%" }
64
+ * ]
65
+ * }
66
+ * ```
67
+ */
68
+ readonly SLIDER_CONTROL: "http://codes.welshare.app/StructureDefinition/questionnaire-slider-control";
69
+ };
70
+ /**
71
+ * Welshare Code Systems
72
+ * Custom code systems used within Welshare extensions
73
+ */
74
+ export declare const WELSHARE_CODE_SYSTEMS: {
75
+ /**
76
+ * Code system for input helper types
77
+ * Used within the INPUT_HELPER extension to specify the type of helper widget
78
+ * Common codes: "bmi-calculator", "date-picker", etc.
79
+ */
80
+ readonly INPUT_HELPER_TYPE: "http://codes.welshare.app/input-helper-type";
81
+ };
82
+ /**
83
+ * Standard FHIR Code Systems
84
+ * Common external code systems used in questionnaires
85
+ */
86
+ export declare const FHIR_CODE_SYSTEMS: {
87
+ /**
88
+ * Logical Observation Identifiers Names and Codes
89
+ * Standard code system for clinical observations and measurements
90
+ * @see https://loinc.org
91
+ */
92
+ readonly LOINC: "http://loinc.org";
93
+ };
94
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B;;;;OAIG;;CAEK,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;;;;;;;OAiBG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;CAEK,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAChC;;;;OAIG;;CAEK,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;;;OAIG;;CAEK,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * FHIR Extension URLs
3
+ * Standard HL7 FHIR extension URLs used in questionnaires
4
+ */
5
+ export const FHIR_EXTENSIONS = {
6
+ /**
7
+ * Standard FHIR extension for marking questionnaire items as hidden
8
+ * Used for auto-populated fields that shouldn't be displayed to users
9
+ * @see http://hl7.org/fhir/StructureDefinition/questionnaire-hidden
10
+ */
11
+ QUESTIONNAIRE_HIDDEN: "http://hl7.org/fhir/StructureDefinition/questionnaire-hidden",
12
+ };
13
+ /**
14
+ * Welshare Custom Extension URLs
15
+ * Custom FHIR extensions defined by Welshare for enhanced questionnaire functionality
16
+ * These extensions are hosted at codes.welshare.app/StructureDefinition
17
+ */
18
+ export const WELSHARE_EXTENSIONS = {
19
+ /**
20
+ * Extension for marking an answer option as mutually exclusive with other options
21
+ * When this option is selected, all other options are deselected
22
+ * Value: valueString containing the code of the exclusive option
23
+ * @example
24
+ * ```json
25
+ * {
26
+ * "url": "http://codes.welshare.app/StructureDefinition/questionnaire-exclusive-option",
27
+ * "valueString": "none-of-the-above"
28
+ * }
29
+ * ```
30
+ */
31
+ EXCLUSIVE_OPTION: "http://codes.welshare.app/StructureDefinition/questionnaire-exclusive-option",
32
+ /**
33
+ * Extension for configuring input helper widgets on questions
34
+ * Provides additional UI controls to help users enter values
35
+ * Value: valueCodeableConcept with coding from WELSHARE_CODE_SYSTEMS.INPUT_HELPER_TYPE
36
+ * @example
37
+ * ```json
38
+ * {
39
+ * "url": "http://codes.welshare.app/StructureDefinition/questionnaire-inputHelper",
40
+ * "valueCodeableConcept": {
41
+ * "coding": [{
42
+ * "system": "http://codes.welshare.app/input-helper-type",
43
+ * "code": "bmi-calculator",
44
+ * "display": "BMI Calculator"
45
+ * }]
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+ INPUT_HELPER: "http://codes.welshare.app/StructureDefinition/questionnaire-inputHelper",
51
+ /**
52
+ * Extension for configuring slider controls on numeric questions (integer/decimal)
53
+ * Allows defining min/max values, step size, and unit labels
54
+ * Value: complex extension with nested extensions for minValue, maxValue, step, unit
55
+ * @example
56
+ * ```json
57
+ * {
58
+ * "url": "http://codes.welshare.app/StructureDefinition/questionnaire-slider-control",
59
+ * "extension": [
60
+ * { "url": "minValue", "valueInteger": 0 },
61
+ * { "url": "maxValue", "valueInteger": 100 },
62
+ * { "url": "step", "valueInteger": 1 },
63
+ * { "url": "unit", "valueString": "%" }
64
+ * ]
65
+ * }
66
+ * ```
67
+ */
68
+ SLIDER_CONTROL: "http://codes.welshare.app/StructureDefinition/questionnaire-slider-control",
69
+ };
70
+ /**
71
+ * Welshare Code Systems
72
+ * Custom code systems used within Welshare extensions
73
+ */
74
+ export const WELSHARE_CODE_SYSTEMS = {
75
+ /**
76
+ * Code system for input helper types
77
+ * Used within the INPUT_HELPER extension to specify the type of helper widget
78
+ * Common codes: "bmi-calculator", "date-picker", etc.
79
+ */
80
+ INPUT_HELPER_TYPE: "http://codes.welshare.app/input-helper-type",
81
+ };
82
+ /**
83
+ * Standard FHIR Code Systems
84
+ * Common external code systems used in questionnaires
85
+ */
86
+ export const FHIR_CODE_SYSTEMS = {
87
+ /**
88
+ * Logical Observation Identifiers Names and Codes
89
+ * Standard code system for clinical observations and measurements
90
+ * @see https://loinc.org
91
+ */
92
+ LOINC: "http://loinc.org",
93
+ };
@@ -1,4 +1,4 @@
1
- import type { Questionnaire, QuestionnaireItem } from "../types/fhir.js";
1
+ import type { Questionnaire, QuestionnaireItem, QuestionnaireResponseAnswer } from "../types/fhir.js";
2
2
  /**
3
3
  * Get visible pages from a questionnaire (excludes hidden groups)
4
4
  */
@@ -30,4 +30,24 @@ export declare const isQuestionHidden: (item: QuestionnaireItem) => boolean;
30
30
  * Get the exclusive option code from a question item (if any)
31
31
  */
32
32
  export declare const getExclusiveOptionCode: (item: QuestionnaireItem) => string | undefined;
33
+ /**
34
+ * Input helper configuration extracted from extension
35
+ */
36
+ export interface InputHelperConfig {
37
+ type: string;
38
+ display?: string;
39
+ description?: string;
40
+ }
41
+ /**
42
+ * Extract input helper configuration from a question item
43
+ * Returns null if no helper extension is present
44
+ */
45
+ export declare const getInputHelper: (item: QuestionnaireItem) => InputHelperConfig | null;
46
+ /**
47
+ * Check if a question should be enabled based on its enableWhen conditions
48
+ * @param item The questionnaire item to check
49
+ * @param getAnswer Function to retrieve an answer by linkId
50
+ * @returns true if the question should be enabled, false otherwise
51
+ */
52
+ export declare const isQuestionEnabled: (item: QuestionnaireItem, getAnswer: (linkId: string) => QuestionnaireResponseAnswer | undefined) => boolean;
33
53
  //# sourceMappingURL=questionnaire-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"questionnaire-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/questionnaire-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,eAAe,aAAa,KAAG,iBAAiB,EAc/E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,kBAAkB,MAAM,EAAE,YAAY,MAAM,KAAG,MAGhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,iBAAiB,KAAG,iBAAiB,EAsBtF,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,EAAE,GAAG,SAAS,EACtC,MAAM,EAAE,MAAM,GACb,iBAAiB,GAAG,IAAI,CAe1B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,KAAG,OAe5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,iBAAiB,KAAG,OAM1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,iBAAiB,KAAG,MAAM,GAAG,SAKzE,CAAC"}
1
+ {"version":3,"file":"questionnaire-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/questionnaire-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC;AAG1B;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,eAAe,aAAa,KAC3B,iBAAiB,EAcnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,kBAAkB,MAAM,EACxB,YAAY,MAAM,KACjB,MAGF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,iBAAiB,KAC1B,iBAAiB,EAsBnB,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,EAAE,GAAG,SAAS,EACtC,MAAM,EAAE,MAAM,GACb,iBAAiB,GAAG,IAAI,CAe1B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,KAAG,OAe5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,iBAAiB,KAAG,OAQ1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,iBAAiB,KACtB,MAAM,GAAG,SAKX,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,iBAAiB,KACtB,iBAAiB,GAAG,IAatB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,iBAAiB,EACvB,WAAW,CAAC,MAAM,EAAE,MAAM,KAAK,2BAA2B,GAAG,SAAS,KACrE,OAkEF,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { FHIR_EXTENSIONS, WELSHARE_EXTENSIONS } from "./constants.js";
1
2
  /**
2
3
  * Get visible pages from a questionnaire (excludes hidden groups)
3
4
  */
@@ -6,7 +7,7 @@ export const getVisiblePages = (questionnaire) => {
6
7
  return [];
7
8
  return questionnaire.item.filter((item) => {
8
9
  // Check if hidden
9
- const isHidden = item.extension?.some((ext) => ext.url === "http://hl7.org/fhir/StructureDefinition/questionnaire-hidden" &&
10
+ const isHidden = item.extension?.some((ext) => ext.url === FHIR_EXTENSIONS.QUESTIONNAIRE_HIDDEN &&
10
11
  ext.valueBoolean === true);
11
12
  // Only include visible group items
12
13
  return item.type === "group" && !isHidden;
@@ -87,13 +88,93 @@ export const hasAnswerValue = (answer) => {
87
88
  * Check if a question item should be hidden based on extensions
88
89
  */
89
90
  export const isQuestionHidden = (item) => {
90
- return item.extension?.some((ext) => ext.url === "http://hl7.org/fhir/StructureDefinition/questionnaire-hidden" &&
91
- ext.valueBoolean === true) ?? false;
91
+ return (item.extension?.some((ext) => ext.url === FHIR_EXTENSIONS.QUESTIONNAIRE_HIDDEN &&
92
+ ext.valueBoolean === true) ?? false);
92
93
  };
93
94
  /**
94
95
  * Get the exclusive option code from a question item (if any)
95
96
  */
96
97
  export const getExclusiveOptionCode = (item) => {
97
- const exclusiveExt = item.extension?.find((ext) => ext.url === "http://codes.welshare.app/StructureDefinition/questionnaire-exclusive-option");
98
+ const exclusiveExt = item.extension?.find((ext) => ext.url === WELSHARE_EXTENSIONS.EXCLUSIVE_OPTION);
98
99
  return exclusiveExt?.valueString;
99
100
  };
101
+ /**
102
+ * Extract input helper configuration from a question item
103
+ * Returns null if no helper extension is present
104
+ */
105
+ export const getInputHelper = (item) => {
106
+ const ext = item.extension?.find((e) => e.url === WELSHARE_EXTENSIONS.INPUT_HELPER);
107
+ if (!ext?.valueCodeableConcept?.coding?.[0])
108
+ return null;
109
+ const coding = ext.valueCodeableConcept.coding[0];
110
+ return {
111
+ type: coding.code ?? "",
112
+ display: coding.display,
113
+ description: ext.valueCodeableConcept?.text,
114
+ };
115
+ };
116
+ /**
117
+ * Check if a question should be enabled based on its enableWhen conditions
118
+ * @param item The questionnaire item to check
119
+ * @param getAnswer Function to retrieve an answer by linkId
120
+ * @returns true if the question should be enabled, false otherwise
121
+ */
122
+ export const isQuestionEnabled = (item, getAnswer) => {
123
+ // If no enableWhen conditions, question is enabled
124
+ if (!item.enableWhen || item.enableWhen.length === 0) {
125
+ return true;
126
+ }
127
+ // enableBehavior defaults to 'all' if not specified
128
+ const enableBehavior = item.enableBehavior || "all";
129
+ const conditionResults = item.enableWhen.map((condition) => {
130
+ const referencedAnswer = getAnswer(condition.question);
131
+ // If no answer exists for the referenced question, condition fails
132
+ if (!referencedAnswer) {
133
+ return false;
134
+ }
135
+ // Handle different operators
136
+ switch (condition.operator) {
137
+ case "=":
138
+ case "equals":
139
+ // Check different answer types
140
+ if (condition.answerCoding && referencedAnswer.valueCoding) {
141
+ return (condition.answerCoding.system ===
142
+ referencedAnswer.valueCoding.system &&
143
+ condition.answerCoding.code === referencedAnswer.valueCoding.code);
144
+ }
145
+ if (condition.answerBoolean !== undefined) {
146
+ return condition.answerBoolean === referencedAnswer.valueBoolean;
147
+ }
148
+ if (condition.answerInteger !== undefined) {
149
+ return condition.answerInteger === referencedAnswer.valueInteger;
150
+ }
151
+ if (condition.answerDecimal !== undefined) {
152
+ return condition.answerDecimal === referencedAnswer.valueDecimal;
153
+ }
154
+ if (condition.answerString !== undefined) {
155
+ return condition.answerString === referencedAnswer.valueString;
156
+ }
157
+ if (condition.answerDate !== undefined) {
158
+ return condition.answerDate === referencedAnswer.valueDate;
159
+ }
160
+ if (condition.answerDateTime !== undefined) {
161
+ return condition.answerDateTime === referencedAnswer.valueDateTime;
162
+ }
163
+ if (condition.answerTime !== undefined) {
164
+ return condition.answerTime === referencedAnswer.valueTime;
165
+ }
166
+ return false;
167
+ default:
168
+ // Unsupported operator - treat as false for safety
169
+ return false;
170
+ }
171
+ });
172
+ // Apply enableBehavior logic
173
+ if (enableBehavior === "all") {
174
+ return conditionResults.every((result) => result === true);
175
+ }
176
+ else if (enableBehavior === "any") {
177
+ return conditionResults.some((result) => result === true);
178
+ }
179
+ return false;
180
+ };
@@ -20,6 +20,7 @@ export type Extension = {
20
20
  valueInteger?: number;
21
21
  valueCodeableConcept?: {
22
22
  coding?: Coding[];
23
+ text?: string;
23
24
  };
24
25
  valueExpression?: {
25
26
  language?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fhir.d.ts","sourceRoot":"","sources":["../../../src/types/fhir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fhir.d.ts","sourceRoot":"","sources":["../../../src/types/fhir.ts"],"names":[],"mappings":"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"}
@@ -48,4 +48,29 @@ export interface CheckboxInputProps {
48
48
  /** The index of this option in the list */
49
49
  index: number;
50
50
  }
51
+ /**
52
+ * Configuration for an input helper extracted from FHIR extension
53
+ */
54
+ export interface InputHelperConfig {
55
+ /** Helper type identifier (e.g., "bmi-calculator") */
56
+ type: string;
57
+ /** Display name for the helper */
58
+ display?: string;
59
+ /** Description/tooltip text */
60
+ description?: string;
61
+ }
62
+ /**
63
+ * Props passed to the renderHelperTrigger callback
64
+ * @template T - The type of value this helper works with (e.g., number, string, etc.)
65
+ */
66
+ export interface HelperTriggerProps<T = string | number> {
67
+ /** The helper configuration from the extension */
68
+ helper: InputHelperConfig;
69
+ /** The linkId of the question item */
70
+ linkId: string;
71
+ /** Current value of the field (if any) */
72
+ currentValue?: T;
73
+ /** Callback to update the field with the helper result */
74
+ onValueSelected: (value: T) => void;
75
+ }
51
76
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAGD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAGD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,WAAW,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM;IACrD,kDAAkD;IAClD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,0DAA0D;IAC1D,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CACrC"}