@smile-digital-health/crl 0.7.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 (107) hide show
  1. package/README.md +502 -0
  2. package/dist/ast/builder.d.ts +45 -0
  3. package/dist/ast/builder.js +389 -0
  4. package/dist/ast/builder.js.map +1 -0
  5. package/dist/ast/types.d.ts +223 -0
  6. package/dist/ast/types.js +73 -0
  7. package/dist/ast/types.js.map +1 -0
  8. package/dist/ast/utils.d.ts +14 -0
  9. package/dist/ast/utils.js +65 -0
  10. package/dist/ast/utils.js.map +1 -0
  11. package/dist/cli/run-ast.d.ts +1 -0
  12. package/dist/cli/run-ast.js +24 -0
  13. package/dist/cli/run-ast.js.map +1 -0
  14. package/dist/cli/run-lexer.d.ts +1 -0
  15. package/dist/cli/run-lexer.js +41 -0
  16. package/dist/cli/run-lexer.js.map +1 -0
  17. package/dist/cli/run-parser.d.ts +1 -0
  18. package/dist/cli/run-parser.js +33 -0
  19. package/dist/cli/run-parser.js.map +1 -0
  20. package/dist/cli/run-transformer-fsh-to-crl.d.ts +1 -0
  21. package/dist/cli/run-transformer-fsh-to-crl.js +20 -0
  22. package/dist/cli/run-transformer-fsh-to-crl.js.map +1 -0
  23. package/dist/cli/run-validator.d.ts +1 -0
  24. package/dist/cli/run-validator.js +37 -0
  25. package/dist/cli/run-validator.js.map +1 -0
  26. package/dist/grammar/activityTypes.d.ts +2 -0
  27. package/dist/grammar/activityTypes.js +9 -0
  28. package/dist/grammar/activityTypes.js.map +1 -0
  29. package/dist/grammar/conceptTypes.d.ts +2 -0
  30. package/dist/grammar/conceptTypes.js +9 -0
  31. package/dist/grammar/conceptTypes.js.map +1 -0
  32. package/dist/grammar/conceptValueTypes.d.ts +2 -0
  33. package/dist/grammar/conceptValueTypes.js +9 -0
  34. package/dist/grammar/conceptValueTypes.js.map +1 -0
  35. package/dist/grammar/generated/antlr/CRLLexer.d.ts +84 -0
  36. package/dist/grammar/generated/antlr/CRLLexer.js +505 -0
  37. package/dist/grammar/generated/antlr/CRLLexer.js.map +1 -0
  38. package/dist/grammar/generated/antlr/CRLParser.d.ts +653 -0
  39. package/dist/grammar/generated/antlr/CRLParser.js +3466 -0
  40. package/dist/grammar/generated/antlr/CRLParser.js.map +1 -0
  41. package/dist/grammar/generated/antlr/CRLParserListener.d.ts +162 -0
  42. package/dist/grammar/generated/antlr/CRLParserListener.js +3 -0
  43. package/dist/grammar/generated/antlr/CRLParserListener.js.map +1 -0
  44. package/dist/grammar/generated/antlr/CRLParserVisitor.d.ts +109 -0
  45. package/dist/grammar/generated/antlr/CRLParserVisitor.js +3 -0
  46. package/dist/grammar/generated/antlr/CRLParserVisitor.js.map +1 -0
  47. package/dist/grammar/generated/types/activityTypes.json +16 -0
  48. package/dist/grammar/generated/types/conceptTypes.json +26 -0
  49. package/dist/grammar/generated/types/conceptValueTypes.json +14 -0
  50. package/dist/index.d.ts +18 -0
  51. package/dist/index.js +147 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/lexer/CRLLexerErrorListener.d.ts +16 -0
  54. package/dist/lexer/CRLLexerErrorListener.js +168 -0
  55. package/dist/lexer/CRLLexerErrorListener.js.map +1 -0
  56. package/dist/lexer/createLexer.d.ts +6 -0
  57. package/dist/lexer/createLexer.js +14 -0
  58. package/dist/lexer/createLexer.js.map +1 -0
  59. package/dist/lexer/index.d.ts +1 -0
  60. package/dist/lexer/index.js +6 -0
  61. package/dist/lexer/index.js.map +1 -0
  62. package/dist/parser/CustomParserErrorListener.d.ts +8 -0
  63. package/dist/parser/CustomParserErrorListener.js +37 -0
  64. package/dist/parser/CustomParserErrorListener.js.map +1 -0
  65. package/dist/parser/createParser.d.ts +7 -0
  66. package/dist/parser/createParser.js +17 -0
  67. package/dist/parser/createParser.js.map +1 -0
  68. package/dist/transformer/fsh-to-crl/mapping/activityDefinition.d.ts +41 -0
  69. package/dist/transformer/fsh-to-crl/mapping/activityDefinition.js +229 -0
  70. package/dist/transformer/fsh-to-crl/mapping/activityDefinition.js.map +1 -0
  71. package/dist/transformer/fsh-to-crl/mapping/concept.d.ts +1 -0
  72. package/dist/transformer/fsh-to-crl/mapping/concept.js +14 -0
  73. package/dist/transformer/fsh-to-crl/mapping/concept.js.map +1 -0
  74. package/dist/transformer/fsh-to-crl/mapping/planDefinition.d.ts +14 -0
  75. package/dist/transformer/fsh-to-crl/mapping/planDefinition.js +235 -0
  76. package/dist/transformer/fsh-to-crl/mapping/planDefinition.js.map +1 -0
  77. package/dist/transformer/fsh-to-crl/mapping/terminology.d.ts +1 -0
  78. package/dist/transformer/fsh-to-crl/mapping/terminology.js +10 -0
  79. package/dist/transformer/fsh-to-crl/mapping/terminology.js.map +1 -0
  80. package/dist/transformer/fsh-to-crl/transformer.d.ts +1 -0
  81. package/dist/transformer/fsh-to-crl/transformer.js +172 -0
  82. package/dist/transformer/fsh-to-crl/transformer.js.map +1 -0
  83. package/dist/transformer/fsh-to-crl/utils/activityDeduplication.d.ts +11 -0
  84. package/dist/transformer/fsh-to-crl/utils/activityDeduplication.js +23 -0
  85. package/dist/transformer/fsh-to-crl/utils/activityDeduplication.js.map +1 -0
  86. package/dist/transformer/fsh-to-crl/utils/fshPathFunctions.d.ts +12 -0
  87. package/dist/transformer/fsh-to-crl/utils/fshPathFunctions.js +73 -0
  88. package/dist/transformer/fsh-to-crl/utils/fshPathFunctions.js.map +1 -0
  89. package/dist/types/errors.d.ts +8 -0
  90. package/dist/types/errors.js +3 -0
  91. package/dist/types/errors.js.map +1 -0
  92. package/dist/validator/actionUniquenessValidator.d.ts +20 -0
  93. package/dist/validator/actionUniquenessValidator.js +280 -0
  94. package/dist/validator/actionUniquenessValidator.js.map +1 -0
  95. package/dist/validator/cycleDetector.d.ts +13 -0
  96. package/dist/validator/cycleDetector.js +79 -0
  97. package/dist/validator/cycleDetector.js.map +1 -0
  98. package/dist/validator/nameUniquenessValidator.d.ts +5 -0
  99. package/dist/validator/nameUniquenessValidator.js +87 -0
  100. package/dist/validator/nameUniquenessValidator.js.map +1 -0
  101. package/dist/validator/unusedDeclarationsValidator.d.ts +21 -0
  102. package/dist/validator/unusedDeclarationsValidator.js +190 -0
  103. package/dist/validator/unusedDeclarationsValidator.js.map +1 -0
  104. package/dist/validator/validator.d.ts +27 -0
  105. package/dist/validator/validator.js +30 -0
  106. package/dist/validator/validator.js.map +1 -0
  107. package/package.json +92 -0
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CRLAstBuilder = void 0;
4
+ const AbstractParseTreeVisitor_1 = require("antlr4ts/tree/AbstractParseTreeVisitor");
5
+ const CRLParser_1 = require("../grammar/generated/antlr/CRLParser");
6
+ const types_1 = require("./types");
7
+ function getLocation(ctx) {
8
+ const start = ctx.start;
9
+ const stop = ctx.stop ?? start;
10
+ return {
11
+ start: {
12
+ line: start.line,
13
+ column: start.charPositionInLine,
14
+ },
15
+ end: {
16
+ line: stop.line,
17
+ column: stop.charPositionInLine + (stop.text?.length ?? 0),
18
+ },
19
+ };
20
+ }
21
+ class CRLAstBuilder extends AbstractParseTreeVisitor_1.AbstractParseTreeVisitor {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.errors = [];
25
+ }
26
+ defaultResult() {
27
+ return null;
28
+ }
29
+ getErrors() {
30
+ return this.errors;
31
+ }
32
+ reportError(message, ctx, details) {
33
+ this.errors.push({
34
+ type: "Exception",
35
+ message,
36
+ line: ctx.start.line,
37
+ column: ctx.start.charPositionInLine,
38
+ details: {
39
+ location: getLocation(ctx),
40
+ ...details,
41
+ },
42
+ });
43
+ }
44
+ visitCrl(ctx) {
45
+ const statements = ctx.statement().map((s) => this.visit(s));
46
+ return { type: types_1.FileType.type, statements, location: getLocation(ctx) };
47
+ }
48
+ visitDecisionStatement(ctx) {
49
+ const name = ctx.decisionIdentifier().text.slice(1, -1);
50
+ const body = this.visit(ctx.decisionBody());
51
+ return { type: types_1.DecisionType.type, name, body, location: getLocation(ctx) };
52
+ }
53
+ visitDecisionBody(ctx) {
54
+ const statements = ctx.whenBlock().map((w) => this.visit(w));
55
+ return { type: types_1.DecisionBodyType.type, statements, location: getLocation(ctx) };
56
+ }
57
+ visitWhenWithBody(ctx) {
58
+ const conceptName = ctx.conceptReference().text.slice(1, -1);
59
+ const body = this.visit(ctx.blockBody());
60
+ return { type: types_1.WhenBlockType.type, conceptName, body, location: getLocation(ctx) };
61
+ }
62
+ visitWhenSingleAction(ctx) {
63
+ const conceptName = ctx.conceptReference().text.slice(1, -1);
64
+ const action = this.visit(ctx.singleActionStatement());
65
+ return { type: types_1.WhenBlockType.type, conceptName, body: action, location: getLocation(ctx) };
66
+ }
67
+ visitNestedWhenBlock(ctx) {
68
+ return this.visit(ctx.whenBlock());
69
+ }
70
+ visitBlockAction(ctx) {
71
+ const result = this.visit(ctx.actionStatement());
72
+ return result;
73
+ }
74
+ visitBlockBody(ctx) {
75
+ const qualifier = ctx.anyOrAllClause() ? ctx.anyOrAllClause().text.slice(0, -1) : undefined;
76
+ const statements = [];
77
+ for (const stmtCtx of ctx.blockStatement()) {
78
+ if (stmtCtx instanceof CRLParser_1.NestedWhenBlockContext) {
79
+ statements.push(this.visitNestedWhenBlock(stmtCtx));
80
+ }
81
+ else if (stmtCtx instanceof CRLParser_1.BlockActionContext) {
82
+ statements.push(this.visitBlockAction(stmtCtx));
83
+ }
84
+ }
85
+ return {
86
+ type: types_1.BlockBodyType.type,
87
+ qualifier,
88
+ statements,
89
+ location: getLocation(ctx),
90
+ };
91
+ }
92
+ visitSingleActionStatement(ctx) {
93
+ const action = this.visit(ctx.doStatement() ?? ctx.useStatement());
94
+ return { type: types_1.SingleActionType.type, action, location: getLocation(ctx) };
95
+ }
96
+ visitActionStatement(ctx) {
97
+ const doStmt = ctx.doStatement?.();
98
+ const useStmt = ctx.useStatement?.();
99
+ let action;
100
+ if (doStmt) {
101
+ action = this.visitDoStatement(doStmt);
102
+ }
103
+ else if (useStmt) {
104
+ action = this.visitUseStatement(useStmt);
105
+ }
106
+ else {
107
+ throw new Error("ActionStatement must have doStatement or useStatement");
108
+ }
109
+ return { type: "ActionStatement", action, location: getLocation(ctx) };
110
+ }
111
+ visitDoStatement(ctx) {
112
+ const activityName = ctx.activityReference().text.slice(1, -1);
113
+ const result = { type: types_1.DoActivityType.type, activityName, location: getLocation(ctx) };
114
+ return result;
115
+ }
116
+ visitUseStatement(ctx) {
117
+ const decisionName = ctx.decisionReference().text.slice(1, -1);
118
+ const result = { type: types_1.UseDecisionType.type, decisionName, location: getLocation(ctx) };
119
+ return result;
120
+ }
121
+ visitTerminologyStatement(ctx) {
122
+ const name = ctx.terminologyIdentifier().text.slice(1, -1);
123
+ let definition;
124
+ if (ctx.terminologyValueset()) {
125
+ definition = this.visit(ctx.terminologyValueset());
126
+ }
127
+ else if (ctx.terminologySystemCode()) {
128
+ definition = this.visit(ctx.terminologySystemCode());
129
+ }
130
+ else if (ctx.backtickString()) {
131
+ definition = {
132
+ type: "TerminologyFreeText",
133
+ value: ctx.backtickString().text.slice(1, -1),
134
+ location: getLocation(ctx),
135
+ };
136
+ }
137
+ return {
138
+ type: types_1.TerminologyType.type,
139
+ name,
140
+ definition: definition,
141
+ location: getLocation(ctx),
142
+ };
143
+ }
144
+ visitTerminologyValueset(ctx) {
145
+ const valuesetName = ctx.identifier().text.slice(1, -1);
146
+ return { type: types_1.TerminologyValuesetType.type, valuesetName, location: getLocation(ctx) };
147
+ }
148
+ visitTerminologySystemCode(ctx) {
149
+ let system = "";
150
+ let code = "";
151
+ if (ctx.backtickString && ctx.backtickString().length === 2) {
152
+ const systemNode = ctx.backtickString(0);
153
+ const codeNode = ctx.backtickString(1);
154
+ if (systemNode?.text)
155
+ system = systemNode.text.slice(1, -1);
156
+ if (codeNode?.text)
157
+ code = codeNode.text.slice(1, -1);
158
+ }
159
+ return { type: types_1.TerminologySystemCodeType.type, system, code, location: getLocation(ctx) };
160
+ }
161
+ parseWithClause(ctx) {
162
+ let terminologyReference;
163
+ let activityTypeValue;
164
+ if (ctx.WITH()) {
165
+ if (ctx.terminologyReference()) {
166
+ terminologyReference = ctx.terminologyReference().text.slice(1, -1);
167
+ }
168
+ else if (ctx.activityTypeValue()) {
169
+ const atv = ctx.activityTypeValue();
170
+ if (atv?.backtickString) {
171
+ const backtickCtx = atv.backtickString();
172
+ if (backtickCtx?.text !== undefined) {
173
+ activityTypeValue = backtickCtx.text.slice(1, -1);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ return { terminologyReference, activityTypeValue };
179
+ }
180
+ parseRationaleClause(ctx) {
181
+ if (ctx.rationale) {
182
+ const rationaleCtx = ctx.rationale();
183
+ if (rationaleCtx?.backtickString) {
184
+ const backtickCtx = rationaleCtx.backtickString();
185
+ if (backtickCtx?.text !== undefined) {
186
+ return backtickCtx.text.slice(1, -1);
187
+ }
188
+ }
189
+ }
190
+ return undefined;
191
+ }
192
+ visitActivityStatement(ctx) {
193
+ const name = ctx.activityIdentifier().text.slice(1, -1);
194
+ const perform = ctx.ACTIVITY_TYPE().text;
195
+ const { terminologyReference, activityTypeValue } = this.parseWithClause(ctx);
196
+ const rationale = this.parseRationaleClause(ctx);
197
+ return {
198
+ type: "Activity",
199
+ name,
200
+ perform,
201
+ terminologyReference,
202
+ activityTypeValue,
203
+ rationale,
204
+ location: getLocation(ctx),
205
+ };
206
+ }
207
+ parseConceptTypes(bodyCtx, ctx) {
208
+ const typeLine = bodyCtx.typeLine?.();
209
+ const valueTypeLine = bodyCtx.valueTypeLine?.();
210
+ if (!typeLine || !valueTypeLine) {
211
+ this.reportError("AstError", ctx, {
212
+ message: "ConceptStatement: missing type or valueType line",
213
+ });
214
+ return null;
215
+ }
216
+ let conceptTypeToken, valueTypeToken;
217
+ try {
218
+ conceptTypeToken = typeLine.CONCEPT_TYPE();
219
+ }
220
+ catch {
221
+ conceptTypeToken = undefined;
222
+ }
223
+ try {
224
+ valueTypeToken = valueTypeLine.CONCEPT_VALUE_TYPE();
225
+ }
226
+ catch {
227
+ valueTypeToken = undefined;
228
+ }
229
+ if (!conceptTypeToken || !valueTypeToken) {
230
+ this.reportError("AstError", ctx, {
231
+ message: "ConceptStatement: missing CONCEPT_TYPE or CONCEPT_VALUE_TYPE token",
232
+ });
233
+ return null;
234
+ }
235
+ return {
236
+ conceptType: conceptTypeToken.text,
237
+ valueType: valueTypeToken.text,
238
+ };
239
+ }
240
+ parseEvidence(bodyCtx) {
241
+ if (bodyCtx.evidenceLine?.()) {
242
+ const evidenceCtx = bodyCtx.evidenceLine?.();
243
+ if (evidenceCtx?.backtickString) {
244
+ const backtickCtx = evidenceCtx.backtickString();
245
+ if (backtickCtx?.text !== undefined) {
246
+ return backtickCtx.text.slice(1, -1);
247
+ }
248
+ else if (backtickCtx?.BACKTICK_STRING) {
249
+ const token = backtickCtx.BACKTICK_STRING();
250
+ if (token?.text !== undefined) {
251
+ return token.text.slice(1, -1);
252
+ }
253
+ }
254
+ }
255
+ }
256
+ return undefined;
257
+ }
258
+ parseConceptDefinition(bodyCtx, ctx) {
259
+ if (bodyCtx.codedFromLine?.()) {
260
+ const codedFrom = bodyCtx.codedFromLine();
261
+ const termRef = codedFrom?.terminologyReference?.()?.text?.slice(1, -1);
262
+ if (!termRef) {
263
+ this.reportError("AstError", ctx, {
264
+ message: "ConceptStatement: missing terminologyReference in codedFromLine",
265
+ });
266
+ return null;
267
+ }
268
+ return {
269
+ type: types_1.CodedFromDefinitionType.type,
270
+ terminologyName: termRef,
271
+ location: getLocation(bodyCtx.codedFromLine()),
272
+ };
273
+ }
274
+ else if (bodyCtx.inferredFromLine?.()) {
275
+ const infCtx = bodyCtx.inferredFromLine();
276
+ if (!infCtx) {
277
+ this.reportError("AstError", ctx, {
278
+ message: "ConceptStatement: inferredFromLine() unexpectedly returned undefined",
279
+ });
280
+ return null;
281
+ }
282
+ return this.visit(infCtx);
283
+ }
284
+ else {
285
+ this.reportError("AstError", ctx, {
286
+ message: "ConceptStatement must have either codedFromLine or inferredFromLine",
287
+ });
288
+ return null;
289
+ }
290
+ }
291
+ visitConceptStatement(ctx) {
292
+ const name = ctx.conceptIdentifier?.()?.text?.slice(1, -1);
293
+ const bodyCtx = ctx.conceptBody?.();
294
+ if (!name || !bodyCtx) {
295
+ this.reportError("AstError", ctx, {
296
+ message: "ConceptStatement: missing conceptIdentifier or conceptBody",
297
+ });
298
+ return null;
299
+ }
300
+ const types = this.parseConceptTypes(bodyCtx, ctx);
301
+ if (!types) {
302
+ return null;
303
+ }
304
+ const { conceptType, valueType } = types;
305
+ const evidence = this.parseEvidence(bodyCtx);
306
+ const definition = this.parseConceptDefinition(bodyCtx, ctx);
307
+ if (!definition) {
308
+ return null;
309
+ }
310
+ return {
311
+ type: "Concept",
312
+ name,
313
+ conceptType,
314
+ valueType,
315
+ evidence,
316
+ definition,
317
+ location: getLocation(ctx),
318
+ };
319
+ }
320
+ visitInferredFromLine(ctx) {
321
+ const defCtx = ctx.inferredBody();
322
+ const body = this.visit(defCtx);
323
+ return { type: types_1.InferredFromDefinitionType.type, body, location: getLocation(ctx) };
324
+ }
325
+ visitDefinitionConcept(ctx) {
326
+ const refCtx = ctx.inferredFromConceptReference();
327
+ let pat = undefined;
328
+ if (refCtx.patternStatement) {
329
+ const patternCtx = refCtx.patternStatement();
330
+ if (patternCtx?.patternName?.().backtickString) {
331
+ const backtickCtx = patternCtx.patternName().backtickString();
332
+ if (backtickCtx?.text !== undefined) {
333
+ pat = backtickCtx.text.slice(1, -1);
334
+ }
335
+ }
336
+ }
337
+ const concept = refCtx.conceptReference().text.slice(1, -1);
338
+ return {
339
+ type: types_1.InferredFromConceptType.type,
340
+ pattern: pat,
341
+ concept,
342
+ location: getLocation(ctx),
343
+ };
344
+ }
345
+ visitDefinitionLogic(ctx) {
346
+ const descCtx = ctx.inferredFromDescriptiveLogic();
347
+ const exprCtx = descCtx.inferredFromExpression();
348
+ return this.visit(exprCtx);
349
+ }
350
+ visitInferredFromExpression(ctx) {
351
+ return this.visit(ctx.informalOr());
352
+ }
353
+ visitInformalOr(ctx) {
354
+ const terms = ctx.informalAnd().map((a) => this.visit(a));
355
+ if (ctx.OR().length) {
356
+ return { type: types_1.InformalOrType.type, terms, location: getLocation(ctx) };
357
+ }
358
+ return terms[0];
359
+ }
360
+ visitInformalAnd(ctx) {
361
+ const terms = ctx
362
+ .informalNot()
363
+ .map((n) => this.visit(n));
364
+ if (ctx.AND().length) {
365
+ return { type: types_1.InformalAndType.type, terms, location: getLocation(ctx) };
366
+ }
367
+ return terms[0];
368
+ }
369
+ visitInformalNot(ctx) {
370
+ if (ctx.NOT()) {
371
+ return {
372
+ type: types_1.NotExpressionType.type,
373
+ expression: this.visit(ctx.informalNot()),
374
+ location: getLocation(ctx),
375
+ };
376
+ }
377
+ return this.visit(ctx.atom());
378
+ }
379
+ visitConceptAtom(ctx) {
380
+ const name = ctx.conceptReference().text.slice(1, -1);
381
+ return { type: types_1.ConceptReferenceType.type, name, location: getLocation(ctx) };
382
+ }
383
+ visitGroupExpression(ctx) {
384
+ const expr = this.visit(ctx.inferredFromExpression());
385
+ return { type: types_1.GroupExpressionType.type, expression: expr, location: getLocation(ctx) };
386
+ }
387
+ }
388
+ exports.CRLAstBuilder = CRLAstBuilder;
389
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/ast/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import type { ActivityType } from "../grammar/activityTypes";
2
+ import type { ConceptType } from "../grammar/conceptTypes";
3
+ import type { ConceptValueType } from "../grammar/conceptValueTypes";
4
+ export interface ASTNode {
5
+ type: string;
6
+ location: {
7
+ start: {
8
+ line: number;
9
+ column: number;
10
+ };
11
+ end: {
12
+ line: number;
13
+ column: number;
14
+ };
15
+ };
16
+ }
17
+ export interface CRL extends ASTNode {
18
+ type: "CRL";
19
+ statements: Statement[];
20
+ location: Location;
21
+ }
22
+ export declare const FileType: {
23
+ type: "CRL";
24
+ };
25
+ export type Statement = Decision | Concept | Activity | Terminology;
26
+ export interface Decision extends ASTNode {
27
+ type: "Decision";
28
+ name: string;
29
+ body: DecisionBody;
30
+ location: Location;
31
+ }
32
+ export declare const DecisionType: {
33
+ type: "Decision";
34
+ };
35
+ export interface DecisionBody extends ASTNode {
36
+ type: "DecisionBody";
37
+ statements: WhenBlock[];
38
+ location: Location;
39
+ }
40
+ export declare const DecisionBodyType: {
41
+ type: "DecisionBody";
42
+ };
43
+ export interface WhenBlock extends ASTNode {
44
+ type: "WhenBlock";
45
+ conceptName: string;
46
+ body: BlockBody | SingleAction;
47
+ location: Location;
48
+ }
49
+ export declare const WhenBlockType: {
50
+ type: "WhenBlock";
51
+ };
52
+ export type WhenBlockBody = BlockBody | SingleAction;
53
+ export interface BlockBody extends ASTNode {
54
+ type: "BlockBody";
55
+ qualifier?: string;
56
+ statements: (WhenBlock | ActionStatement)[];
57
+ location: Location;
58
+ }
59
+ export declare const BlockBodyType: {
60
+ type: "BlockBody";
61
+ };
62
+ export interface SingleAction extends ASTNode {
63
+ type: "SingleAction";
64
+ action: Action;
65
+ location: Location;
66
+ }
67
+ export declare const SingleActionType: {
68
+ type: "SingleAction";
69
+ };
70
+ export interface ActionStatement extends ASTNode {
71
+ type: "ActionStatement";
72
+ action: Action;
73
+ location: Location;
74
+ }
75
+ export declare const ActionStatementType: {
76
+ type: "ActionStatement";
77
+ };
78
+ export interface DoActivity extends ASTNode {
79
+ type: "DoActivity";
80
+ activityName: string;
81
+ location: Location;
82
+ }
83
+ export declare const DoActivityType: {
84
+ type: "DoActivity";
85
+ };
86
+ export interface UseDecision extends ASTNode {
87
+ type: "UseDecision";
88
+ decisionName: string;
89
+ location: Location;
90
+ }
91
+ export declare const UseDecisionType: {
92
+ type: "UseDecision";
93
+ };
94
+ export interface Terminology extends ASTNode {
95
+ type: "Terminology";
96
+ name: string;
97
+ definition: TerminologyDefinition;
98
+ location: Location;
99
+ }
100
+ export declare const TerminologyType: {
101
+ type: "Terminology";
102
+ };
103
+ export type TerminologyDefinition = TerminologyValueset | TerminologyFreeText | TerminologySystemCode;
104
+ export interface TerminologyValueset extends ASTNode {
105
+ type: "TerminologyValueset";
106
+ valuesetName: string;
107
+ location: Location;
108
+ }
109
+ export declare const TerminologyValuesetType: {
110
+ type: "TerminologyValueset";
111
+ };
112
+ export interface TerminologyFreeText extends ASTNode {
113
+ type: "TerminologyFreeText";
114
+ value: string;
115
+ location: Location;
116
+ }
117
+ export declare const TerminologyFreeTextType: {
118
+ type: "TerminologyFreeText";
119
+ };
120
+ export interface TerminologySystemCode extends ASTNode {
121
+ type: "TerminologySystemCode";
122
+ system: string;
123
+ code: string;
124
+ location: Location;
125
+ }
126
+ export declare const TerminologySystemCodeType: {
127
+ type: "TerminologySystemCode";
128
+ };
129
+ export interface Activity extends ASTNode {
130
+ type: "Activity";
131
+ name: string;
132
+ perform: ActivityType;
133
+ terminologyReference?: string;
134
+ activityTypeValue?: string;
135
+ rationale?: string;
136
+ location: Location;
137
+ }
138
+ export interface Concept extends ASTNode {
139
+ type: "Concept";
140
+ name: string;
141
+ conceptType: ConceptType;
142
+ valueType: ConceptValueType;
143
+ definition: ConceptDefinition;
144
+ evidence?: string;
145
+ location: Location;
146
+ }
147
+ export type ConceptDefinition = CodedFromDefinition | InferredFromDefinition;
148
+ export interface CodedFromDefinition extends ASTNode {
149
+ type: "CodedFromDefinition";
150
+ terminologyName: string;
151
+ location: Location;
152
+ }
153
+ export declare const CodedFromDefinitionType: {
154
+ type: "CodedFromDefinition";
155
+ };
156
+ export interface ConceptReference extends ASTNode {
157
+ type: "ConceptReference";
158
+ name: string;
159
+ }
160
+ export declare const ConceptReferenceType: {
161
+ type: "ConceptReference";
162
+ };
163
+ export interface InformalAnd extends ASTNode {
164
+ type: "AndExpression";
165
+ terms: InferredFromExpression[];
166
+ }
167
+ export declare const InformalAndType: {
168
+ type: "AndExpression";
169
+ };
170
+ export interface InformalOr extends ASTNode {
171
+ type: "OrExpression";
172
+ terms: InferredFromExpression[];
173
+ }
174
+ export declare const InformalOrType: {
175
+ type: "OrExpression";
176
+ };
177
+ export interface NotExpression extends ASTNode {
178
+ type: "NotExpression";
179
+ expression: InferredFromExpression;
180
+ }
181
+ export declare const NotExpressionType: {
182
+ type: "NotExpression";
183
+ };
184
+ export type InferredFromExpression = ConceptReference | InformalAnd | InformalOr | GroupExpression | NotExpression;
185
+ export interface GroupExpression extends ASTNode {
186
+ type: "GroupExpression";
187
+ expression: InferredFromExpression;
188
+ }
189
+ export declare const GroupExpressionType: {
190
+ type: "GroupExpression";
191
+ };
192
+ export interface InferredFromConcept extends ASTNode {
193
+ type: "InferredFromDefinitionConcept";
194
+ concept: string;
195
+ pattern?: string;
196
+ }
197
+ export declare const InferredFromConceptType: {
198
+ type: "InferredFromDefinitionConcept";
199
+ };
200
+ export interface InferredFromDefinition extends ASTNode {
201
+ type: "InferredFromDefinition";
202
+ body: InferredFromConcept | InferredFromExpression;
203
+ }
204
+ export declare const InferredFromDefinitionType: {
205
+ type: "InferredFromDefinition";
206
+ };
207
+ export interface Location {
208
+ start: {
209
+ line: number;
210
+ column: number;
211
+ };
212
+ end: {
213
+ line: number;
214
+ column: number;
215
+ };
216
+ }
217
+ export type Action = DoActivity | UseDecision;
218
+ export type { ActivityType } from "../grammar/activityTypes";
219
+ export type { ConceptType } from "../grammar/conceptTypes";
220
+ export type { ConceptValueType } from "../grammar/conceptValueTypes";
221
+ export { activityTypes } from "../grammar/activityTypes";
222
+ export { conceptTypes } from "../grammar/conceptTypes";
223
+ export { conceptValueTypes } from "../grammar/conceptValueTypes";