@hyperscale0/udl 1.0.0-rc.1 → 1.0.123

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 (234) hide show
  1. package/CHANGELOG.md +5 -211
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +14 -106
  5. package/dist/canonical.d.ts.map +1 -1
  6. package/dist/canonical.js +1 -29
  7. package/dist/canonical.js.map +1 -1
  8. package/dist/diagnostics.d.ts +13 -165
  9. package/dist/diagnostics.d.ts.map +1 -1
  10. package/dist/diagnostics.js +33 -157
  11. package/dist/diagnostics.js.map +1 -1
  12. package/dist/field-value.d.ts +5 -0
  13. package/dist/field-value.d.ts.map +1 -0
  14. package/dist/field-value.js +85 -0
  15. package/dist/field-value.js.map +1 -0
  16. package/dist/finance.d.ts +10 -53
  17. package/dist/finance.d.ts.map +1 -1
  18. package/dist/finance.js +252 -536
  19. package/dist/finance.js.map +1 -1
  20. package/dist/index.d.ts +9 -13
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +9 -9
  23. package/dist/index.js.map +1 -1
  24. package/dist/json.d.ts +2 -0
  25. package/dist/json.d.ts.map +1 -0
  26. package/dist/json.js +30 -0
  27. package/dist/json.js.map +1 -0
  28. package/dist/limits.d.ts +3 -28
  29. package/dist/limits.d.ts.map +1 -1
  30. package/dist/limits.js +5 -31
  31. package/dist/limits.js.map +1 -1
  32. package/dist/object-contract.d.ts +140 -0
  33. package/dist/object-contract.d.ts.map +1 -0
  34. package/dist/object-contract.js +314 -0
  35. package/dist/object-contract.js.map +1 -0
  36. package/dist/object-semantics-schema.d.ts +5710 -0
  37. package/dist/object-semantics-schema.d.ts.map +1 -0
  38. package/dist/object-semantics-schema.js +119 -0
  39. package/dist/object-semantics-schema.js.map +1 -0
  40. package/dist/object-semantics.d.ts +6 -0
  41. package/dist/object-semantics.d.ts.map +1 -0
  42. package/dist/object-semantics.js +279 -0
  43. package/dist/object-semantics.js.map +1 -0
  44. package/dist/object-structures.d.ts +4 -0
  45. package/dist/object-structures.d.ts.map +1 -0
  46. package/dist/object-structures.js +134 -0
  47. package/dist/object-structures.js.map +1 -0
  48. package/dist/reporting-validation.d.ts +8 -0
  49. package/dist/reporting-validation.d.ts.map +1 -0
  50. package/dist/reporting-validation.js +252 -0
  51. package/dist/reporting-validation.js.map +1 -0
  52. package/dist/reporting.d.ts +477 -0
  53. package/dist/reporting.d.ts.map +1 -0
  54. package/dist/reporting.js +169 -0
  55. package/dist/reporting.js.map +1 -0
  56. package/dist/schema.d.ts +5572 -2710
  57. package/dist/schema.d.ts.map +1 -1
  58. package/dist/schema.js +444 -1121
  59. package/dist/schema.js.map +1 -1
  60. package/dist/validation.d.ts +10 -73
  61. package/dist/validation.d.ts.map +1 -1
  62. package/dist/validation.js +1109 -2569
  63. package/dist/validation.js.map +1 -1
  64. package/docs/assets/brand/manifest.json +30 -0
  65. package/docs/assets/brand/udl-horizontal-white.svg +1 -0
  66. package/docs/assets/brand/udl-horizontal.svg +1 -0
  67. package/docs/assets/brand/udl-stacked-white.svg +1 -0
  68. package/docs/assets/brand/udl-stacked.svg +1 -0
  69. package/docs/assets/udl.svg +11 -0
  70. package/package.json +13 -22
  71. package/spec/README.md +300 -172
  72. package/spec/cars.udl.json +249 -0
  73. package/spec/udl.schema.json +3066 -2242
  74. package/src/canonical.ts +1 -35
  75. package/src/diagnostics.ts +76 -209
  76. package/src/field-value.ts +87 -0
  77. package/src/finance.ts +327 -832
  78. package/src/index.ts +18 -95
  79. package/src/json.ts +34 -0
  80. package/src/limits.ts +5 -31
  81. package/src/object-contract.ts +559 -0
  82. package/src/object-semantics-schema.ts +148 -0
  83. package/src/object-semantics.ts +378 -0
  84. package/src/object-structures.ts +255 -0
  85. package/src/reporting-validation.ts +383 -0
  86. package/src/reporting.ts +178 -0
  87. package/src/schema.ts +510 -1277
  88. package/src/validation.ts +1630 -4545
  89. package/LICENSE +0 -661
  90. package/LICENSING.md +0 -51
  91. package/TRADEMARKS.md +0 -35
  92. package/conformance/README.md +0 -82
  93. package/conformance/evolution/action-contract.expected.json +0 -10
  94. package/conformance/evolution/action-contract.live.udl +0 -44
  95. package/conformance/evolution/action-contract.next.udl +0 -45
  96. package/conformance/evolution/product-identity.expected.json +0 -10
  97. package/conformance/evolution/product-identity.live.udl +0 -55
  98. package/conformance/evolution/product-identity.next.udl +0 -55
  99. package/conformance/evolution/version-required.expected.json +0 -10
  100. package/conformance/evolution/version-required.live.udl +0 -55
  101. package/conformance/evolution/version-required.next.udl +0 -58
  102. package/conformance/invalid/action-without-transition.expected.json +0 -10
  103. package/conformance/invalid/action-without-transition.udl +0 -60
  104. package/conformance/invalid/agent-description-too-long.expected.json +0 -10
  105. package/conformance/invalid/agent-description-too-long.udl +0 -57
  106. package/conformance/invalid/blank-title.expected.json +0 -10
  107. package/conformance/invalid/blank-title.udl +0 -54
  108. package/conformance/invalid/composition-dial-duplicate-key.expected.json +0 -10
  109. package/conformance/invalid/composition-dial-duplicate-key.udl +0 -73
  110. package/conformance/invalid/depth-budget.expected.json +0 -10
  111. package/conformance/invalid/depth-budget.udl +0 -49
  112. package/conformance/invalid/duplicate-subject.expected.json +0 -10
  113. package/conformance/invalid/duplicate-subject.udl +0 -230
  114. package/conformance/invalid/forged-effects.expected.json +0 -10
  115. package/conformance/invalid/forged-effects.udl +0 -76
  116. package/conformance/invalid/format-version.expected.json +0 -10
  117. package/conformance/invalid/format-version.udl +0 -54
  118. package/conformance/invalid/instrument-id-not-snake-case.expected.json +0 -10
  119. package/conformance/invalid/instrument-id-not-snake-case.udl +0 -54
  120. package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +0 -10
  121. package/conformance/invalid/invalid-aggregate-gate-shape.udl +0 -1819
  122. package/conformance/invalid/invalid-check-duration.expected.json +0 -10
  123. package/conformance/invalid/invalid-check-duration.udl +0 -219
  124. package/conformance/invalid/invalid-dial-anchor.expected.json +0 -10
  125. package/conformance/invalid/invalid-dial-anchor.udl +0 -219
  126. package/conformance/invalid/invalid-exception-parent-ref.expected.json +0 -10
  127. package/conformance/invalid/invalid-exception-parent-ref.udl +0 -2487
  128. package/conformance/invalid/invalid-exposure-shape.expected.json +0 -10
  129. package/conformance/invalid/invalid-exposure-shape.udl +0 -1819
  130. package/conformance/invalid/invalid-remainder.expected.json +0 -10
  131. package/conformance/invalid/invalid-remainder.udl +0 -220
  132. package/conformance/invalid/invalid-schema-keyword.expected.json +0 -10
  133. package/conformance/invalid/invalid-schema-keyword.udl +0 -220
  134. package/conformance/invalid/invalid-utf8.expected.json +0 -10
  135. package/conformance/invalid/invalid-utf8.udl +0 -1
  136. package/conformance/invalid/malformed-json.expected.json +0 -10
  137. package/conformance/invalid/malformed-json.udl +0 -1
  138. package/conformance/invalid/missing-create-action.expected.json +0 -10
  139. package/conformance/invalid/missing-create-action.udl +0 -48
  140. package/conformance/invalid/missing-exception-amount-field.expected.json +0 -10
  141. package/conformance/invalid/missing-exception-amount-field.udl +0 -2487
  142. package/conformance/invalid/missing-exception-contract.expected.json +0 -14
  143. package/conformance/invalid/missing-exception-contract.udl +0 -2523
  144. package/conformance/invalid/missing-exception-reason-field.expected.json +0 -10
  145. package/conformance/invalid/missing-exception-reason-field.udl +0 -2487
  146. package/conformance/invalid/not-an-object.expected.json +0 -10
  147. package/conformance/invalid/not-an-object.udl +0 -1
  148. package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +0 -10
  149. package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +0 -259
  150. package/conformance/invalid/quote-freeze-set-incomplete.expected.json +0 -10
  151. package/conformance/invalid/quote-freeze-set-incomplete.udl +0 -261
  152. package/conformance/invalid/quote-named-reference-gate.expected.json +0 -10
  153. package/conformance/invalid/quote-named-reference-gate.udl +0 -50
  154. package/conformance/invalid/reconcile-named-reference-gate.expected.json +0 -10
  155. package/conformance/invalid/reconcile-named-reference-gate.udl +0 -50
  156. package/conformance/invalid/unknown-key.expected.json +0 -10
  157. package/conformance/invalid/unknown-key.udl +0 -55
  158. package/conformance/invalid/unknown-reference-gate-field.expected.json +0 -10
  159. package/conformance/invalid/unknown-reference-gate-field.udl +0 -1819
  160. package/conformance/invalid/unknown-required-field.expected.json +0 -10
  161. package/conformance/invalid/unknown-required-field.udl +0 -220
  162. package/conformance/invalid/unreachable-state.expected.json +0 -10
  163. package/conformance/invalid/unreachable-state.udl +0 -55
  164. package/conformance/invalid/wrong-exception-amount-field.expected.json +0 -10
  165. package/conformance/invalid/wrong-exception-amount-field.udl +0 -2487
  166. package/conformance/invalid/wrong-exception-reason-field.expected.json +0 -10
  167. package/conformance/invalid/wrong-exception-reason-field.udl +0 -2487
  168. package/conformance/valid/agent-description.expected.json +0 -6
  169. package/conformance/valid/agent-description.udl +0 -66
  170. package/conformance/valid/cards.expected.json +0 -6
  171. package/conformance/valid/cards.udl +0 -1579
  172. package/conformance/valid/commerce-escrow.expected.json +0 -6
  173. package/conformance/valid/commerce-escrow.udl +0 -1512
  174. package/conformance/valid/compiled-crowdfunding.expected.json +0 -6
  175. package/conformance/valid/compiled-crowdfunding.udl +0 -1843
  176. package/conformance/valid/compiled-watch-club.expected.json +0 -6
  177. package/conformance/valid/compiled-watch-club.udl +0 -2486
  178. package/conformance/valid/complete-contract.expected.json +0 -6
  179. package/conformance/valid/complete-contract.udl +0 -218
  180. package/conformance/valid/effect-signatures.expected.json +0 -6
  181. package/conformance/valid/effect-signatures.udl +0 -75
  182. package/conformance/valid/hand-edited.expected.json +0 -6
  183. package/conformance/valid/hand-edited.udl +0 -1
  184. package/conformance/valid/insured-car-marketplace.expected.json +0 -6
  185. package/conformance/valid/insured-car-marketplace.udl +0 -1050
  186. package/conformance/valid/insured-travel.expected.json +0 -6
  187. package/conformance/valid/insured-travel.udl +0 -3469
  188. package/conformance/valid/minimal.expected.json +0 -6
  189. package/conformance/valid/minimal.udl +0 -54
  190. package/conformance/valid/protection.expected.json +0 -6
  191. package/conformance/valid/protection.udl +0 -1551
  192. package/conformance/valid/string-escaping.expected.json +0 -6
  193. package/conformance/valid/string-escaping.udl +0 -54
  194. package/dist/check-profiles.d.ts +0 -57
  195. package/dist/check-profiles.d.ts.map +0 -1
  196. package/dist/check-profiles.js +0 -62
  197. package/dist/check-profiles.js.map +0 -1
  198. package/dist/cli.d.ts +0 -3
  199. package/dist/cli.d.ts.map +0 -1
  200. package/dist/cli.js +0 -184
  201. package/dist/cli.js.map +0 -1
  202. package/dist/effects.d.ts +0 -41
  203. package/dist/effects.d.ts.map +0 -1
  204. package/dist/effects.js +0 -110
  205. package/dist/effects.js.map +0 -1
  206. package/dist/evolution.d.ts +0 -120
  207. package/dist/evolution.d.ts.map +0 -1
  208. package/dist/evolution.js +0 -567
  209. package/dist/evolution.js.map +0 -1
  210. package/dist/parser.d.ts +0 -4
  211. package/dist/parser.d.ts.map +0 -1
  212. package/dist/parser.js +0 -44
  213. package/dist/parser.js.map +0 -1
  214. package/docs/README.md +0 -14
  215. package/docs/guide/01-a-document.md +0 -37
  216. package/docs/guide/02-money-steps.md +0 -23
  217. package/docs/guide/03-laws.md +0 -18
  218. package/docs/guide/04-fees-and-remainder.md +0 -15
  219. package/docs/guide/05-checks-updates-dials.md +0 -7
  220. package/docs/guide/06-effects.md +0 -11
  221. package/docs/guide/07-evolution.md +0 -11
  222. package/docs/guide/08-implementing.md +0 -13
  223. package/docs/llms-full.txt +0 -1241
  224. package/docs/llms.txt +0 -14
  225. package/docs/reference/canonical.md +0 -16
  226. package/docs/reference/clauses.md +0 -986
  227. package/docs/reference/cli.md +0 -22
  228. package/docs/reference/diagnostics.md +0 -32
  229. package/skills/udl/SKILL.md +0 -28
  230. package/src/check-profiles.ts +0 -80
  231. package/src/cli.ts +0 -196
  232. package/src/effects.ts +0 -163
  233. package/src/evolution.ts +0 -965
  234. package/src/parser.ts +0 -58
@@ -0,0 +1,477 @@
1
+ import * as z from "zod";
2
+ export declare const reportTypeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ kind: z.ZodLiteral<"money">;
4
+ currency: z.ZodString;
5
+ }, z.core.$strict>, z.ZodObject<{
6
+ kind: z.ZodEnum<{
7
+ boolean: "boolean";
8
+ date: "date";
9
+ integer: "integer";
10
+ text: "text";
11
+ }>;
12
+ }, z.core.$strict>], "kind">;
13
+ export type ReportType = z.infer<typeof reportTypeSchema>;
14
+ /** Ordered expressions form a finite typed graph. References only point backwards. */
15
+ export declare const reportExpressionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
16
+ id: z.ZodString;
17
+ op: z.ZodLiteral<"field">;
18
+ path: z.ZodString;
19
+ }, z.core.$strict>, z.ZodObject<{
20
+ id: z.ZodString;
21
+ op: z.ZodLiteral<"literal">;
22
+ type: z.ZodDiscriminatedUnion<[z.ZodObject<{
23
+ kind: z.ZodLiteral<"money">;
24
+ currency: z.ZodString;
25
+ }, z.core.$strict>, z.ZodObject<{
26
+ kind: z.ZodEnum<{
27
+ boolean: "boolean";
28
+ date: "date";
29
+ integer: "integer";
30
+ text: "text";
31
+ }>;
32
+ }, z.core.$strict>], "kind">;
33
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
34
+ }, z.core.$strict>, z.ZodObject<{
35
+ id: z.ZodString;
36
+ op: z.ZodLiteral<"parameter">;
37
+ name: z.ZodEnum<{
38
+ observationAt: "observationAt";
39
+ periodEnd: "periodEnd";
40
+ periodStart: "periodStart";
41
+ }>;
42
+ }, z.core.$strict>, z.ZodObject<{
43
+ id: z.ZodString;
44
+ op: z.ZodEnum<{
45
+ and: "and";
46
+ atMost: "atMost";
47
+ daysBetween: "daysBetween";
48
+ equal: "equal";
49
+ less: "less";
50
+ maximum: "maximum";
51
+ minimum: "minimum";
52
+ or: "or";
53
+ subtract: "subtract";
54
+ sum: "sum";
55
+ }>;
56
+ left: z.ZodString;
57
+ right: z.ZodString;
58
+ }, z.core.$strict>, z.ZodObject<{
59
+ id: z.ZodString;
60
+ op: z.ZodLiteral<"not">;
61
+ value: z.ZodString;
62
+ }, z.core.$strict>, z.ZodObject<{
63
+ id: z.ZodString;
64
+ op: z.ZodLiteral<"choose">;
65
+ condition: z.ZodString;
66
+ yes: z.ZodString;
67
+ no: z.ZodString;
68
+ }, z.core.$strict>, z.ZodObject<{
69
+ id: z.ZodString;
70
+ op: z.ZodLiteral<"bucket">;
71
+ value: z.ZodString;
72
+ unit: z.ZodEnum<{
73
+ month: "month";
74
+ quarter: "quarter";
75
+ }>;
76
+ }, z.core.$strict>, z.ZodObject<{
77
+ id: z.ZodString;
78
+ op: z.ZodLiteral<"ratio">;
79
+ numerator: z.ZodString;
80
+ denominator: z.ZodString;
81
+ scale: z.ZodNumber;
82
+ rounding: z.ZodEnum<{
83
+ floor: "floor";
84
+ halfUp: "halfUp";
85
+ }>;
86
+ zero: z.ZodEnum<{
87
+ null: "null";
88
+ refuse: "refuse";
89
+ }>;
90
+ }, z.core.$strict>], "op">;
91
+ export declare const reportDefinitionSchema: z.ZodObject<{
92
+ identity: z.ZodObject<{
93
+ id: z.ZodString;
94
+ version: z.ZodNumber;
95
+ description: z.ZodString;
96
+ }, z.core.$strict>;
97
+ scope: z.ZodObject<{
98
+ kind: z.ZodEnum<{
99
+ company: "company";
100
+ product: "product";
101
+ }>;
102
+ classification: z.ZodEnum<{
103
+ internal: "internal";
104
+ personal: "personal";
105
+ restricted: "restricted";
106
+ }>;
107
+ currency: z.ZodString;
108
+ }, z.core.$strict>;
109
+ datasets: z.ZodArray<z.ZodObject<{
110
+ id: z.ZodString;
111
+ source: z.ZodEnum<{
112
+ account: "account";
113
+ identity: "identity";
114
+ instrument: "instrument";
115
+ operation: "operation";
116
+ }>;
117
+ instruments: z.ZodArray<z.ZodString>;
118
+ rowKey: z.ZodString;
119
+ columns: z.ZodArray<z.ZodObject<{
120
+ name: z.ZodString;
121
+ field: z.ZodString;
122
+ type: z.ZodDiscriminatedUnion<[z.ZodObject<{
123
+ kind: z.ZodLiteral<"money">;
124
+ currency: z.ZodString;
125
+ }, z.core.$strict>, z.ZodObject<{
126
+ kind: z.ZodEnum<{
127
+ boolean: "boolean";
128
+ date: "date";
129
+ integer: "integer";
130
+ text: "text";
131
+ }>;
132
+ }, z.core.$strict>], "kind">;
133
+ required: z.ZodBoolean;
134
+ }, z.core.$strict>>;
135
+ expressions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
136
+ id: z.ZodString;
137
+ op: z.ZodLiteral<"field">;
138
+ path: z.ZodString;
139
+ }, z.core.$strict>, z.ZodObject<{
140
+ id: z.ZodString;
141
+ op: z.ZodLiteral<"literal">;
142
+ type: z.ZodDiscriminatedUnion<[z.ZodObject<{
143
+ kind: z.ZodLiteral<"money">;
144
+ currency: z.ZodString;
145
+ }, z.core.$strict>, z.ZodObject<{
146
+ kind: z.ZodEnum<{
147
+ boolean: "boolean";
148
+ date: "date";
149
+ integer: "integer";
150
+ text: "text";
151
+ }>;
152
+ }, z.core.$strict>], "kind">;
153
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
154
+ }, z.core.$strict>, z.ZodObject<{
155
+ id: z.ZodString;
156
+ op: z.ZodLiteral<"parameter">;
157
+ name: z.ZodEnum<{
158
+ observationAt: "observationAt";
159
+ periodEnd: "periodEnd";
160
+ periodStart: "periodStart";
161
+ }>;
162
+ }, z.core.$strict>, z.ZodObject<{
163
+ id: z.ZodString;
164
+ op: z.ZodEnum<{
165
+ and: "and";
166
+ atMost: "atMost";
167
+ daysBetween: "daysBetween";
168
+ equal: "equal";
169
+ less: "less";
170
+ maximum: "maximum";
171
+ minimum: "minimum";
172
+ or: "or";
173
+ subtract: "subtract";
174
+ sum: "sum";
175
+ }>;
176
+ left: z.ZodString;
177
+ right: z.ZodString;
178
+ }, z.core.$strict>, z.ZodObject<{
179
+ id: z.ZodString;
180
+ op: z.ZodLiteral<"not">;
181
+ value: z.ZodString;
182
+ }, z.core.$strict>, z.ZodObject<{
183
+ id: z.ZodString;
184
+ op: z.ZodLiteral<"choose">;
185
+ condition: z.ZodString;
186
+ yes: z.ZodString;
187
+ no: z.ZodString;
188
+ }, z.core.$strict>, z.ZodObject<{
189
+ id: z.ZodString;
190
+ op: z.ZodLiteral<"bucket">;
191
+ value: z.ZodString;
192
+ unit: z.ZodEnum<{
193
+ month: "month";
194
+ quarter: "quarter";
195
+ }>;
196
+ }, z.core.$strict>, z.ZodObject<{
197
+ id: z.ZodString;
198
+ op: z.ZodLiteral<"ratio">;
199
+ numerator: z.ZodString;
200
+ denominator: z.ZodString;
201
+ scale: z.ZodNumber;
202
+ rounding: z.ZodEnum<{
203
+ floor: "floor";
204
+ halfUp: "halfUp";
205
+ }>;
206
+ zero: z.ZodEnum<{
207
+ null: "null";
208
+ refuse: "refuse";
209
+ }>;
210
+ }, z.core.$strict>], "op">>;
211
+ selection: z.ZodOptional<z.ZodString>;
212
+ }, z.core.$strict>>;
213
+ time: z.ZodObject<{
214
+ timezone: z.ZodLiteral<"Asia/Riyadh">;
215
+ boundary: z.ZodLiteral<"startInclusiveEndExclusive">;
216
+ observation: z.ZodLiteral<"periodEnd">;
217
+ history: z.ZodLiteral<"retainedOnly">;
218
+ }, z.core.$strict>;
219
+ selection: z.ZodObject<{
220
+ dataset: z.ZodString;
221
+ predicate: z.ZodOptional<z.ZodString>;
222
+ }, z.core.$strict>;
223
+ calculation: z.ZodObject<{
224
+ joins: z.ZodArray<z.ZodObject<{
225
+ dataset: z.ZodString;
226
+ local: z.ZodString;
227
+ foreign: z.ZodString;
228
+ cardinality: z.ZodEnum<{
229
+ many: "many";
230
+ one: "one";
231
+ }>;
232
+ missing: z.ZodEnum<{
233
+ allow: "allow";
234
+ refuse: "refuse";
235
+ }>;
236
+ aggregates: z.ZodArray<z.ZodObject<{
237
+ name: z.ZodString;
238
+ op: z.ZodEnum<{
239
+ average: "average";
240
+ count: "count";
241
+ maximum: "maximum";
242
+ minimum: "minimum";
243
+ sum: "sum";
244
+ }>;
245
+ rounding: z.ZodOptional<z.ZodEnum<{
246
+ floor: "floor";
247
+ halfUp: "halfUp";
248
+ }>>;
249
+ value: z.ZodOptional<z.ZodString>;
250
+ }, z.core.$strict>>;
251
+ }, z.core.$strict>>;
252
+ expressions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
253
+ id: z.ZodString;
254
+ op: z.ZodLiteral<"field">;
255
+ path: z.ZodString;
256
+ }, z.core.$strict>, z.ZodObject<{
257
+ id: z.ZodString;
258
+ op: z.ZodLiteral<"literal">;
259
+ type: z.ZodDiscriminatedUnion<[z.ZodObject<{
260
+ kind: z.ZodLiteral<"money">;
261
+ currency: z.ZodString;
262
+ }, z.core.$strict>, z.ZodObject<{
263
+ kind: z.ZodEnum<{
264
+ boolean: "boolean";
265
+ date: "date";
266
+ integer: "integer";
267
+ text: "text";
268
+ }>;
269
+ }, z.core.$strict>], "kind">;
270
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
271
+ }, z.core.$strict>, z.ZodObject<{
272
+ id: z.ZodString;
273
+ op: z.ZodLiteral<"parameter">;
274
+ name: z.ZodEnum<{
275
+ observationAt: "observationAt";
276
+ periodEnd: "periodEnd";
277
+ periodStart: "periodStart";
278
+ }>;
279
+ }, z.core.$strict>, z.ZodObject<{
280
+ id: z.ZodString;
281
+ op: z.ZodEnum<{
282
+ and: "and";
283
+ atMost: "atMost";
284
+ daysBetween: "daysBetween";
285
+ equal: "equal";
286
+ less: "less";
287
+ maximum: "maximum";
288
+ minimum: "minimum";
289
+ or: "or";
290
+ subtract: "subtract";
291
+ sum: "sum";
292
+ }>;
293
+ left: z.ZodString;
294
+ right: z.ZodString;
295
+ }, z.core.$strict>, z.ZodObject<{
296
+ id: z.ZodString;
297
+ op: z.ZodLiteral<"not">;
298
+ value: z.ZodString;
299
+ }, z.core.$strict>, z.ZodObject<{
300
+ id: z.ZodString;
301
+ op: z.ZodLiteral<"choose">;
302
+ condition: z.ZodString;
303
+ yes: z.ZodString;
304
+ no: z.ZodString;
305
+ }, z.core.$strict>, z.ZodObject<{
306
+ id: z.ZodString;
307
+ op: z.ZodLiteral<"bucket">;
308
+ value: z.ZodString;
309
+ unit: z.ZodEnum<{
310
+ month: "month";
311
+ quarter: "quarter";
312
+ }>;
313
+ }, z.core.$strict>, z.ZodObject<{
314
+ id: z.ZodString;
315
+ op: z.ZodLiteral<"ratio">;
316
+ numerator: z.ZodString;
317
+ denominator: z.ZodString;
318
+ scale: z.ZodNumber;
319
+ rounding: z.ZodEnum<{
320
+ floor: "floor";
321
+ halfUp: "halfUp";
322
+ }>;
323
+ zero: z.ZodEnum<{
324
+ null: "null";
325
+ refuse: "refuse";
326
+ }>;
327
+ }, z.core.$strict>], "op">>;
328
+ groupBy: z.ZodArray<z.ZodString>;
329
+ aggregates: z.ZodArray<z.ZodObject<{
330
+ name: z.ZodString;
331
+ op: z.ZodEnum<{
332
+ average: "average";
333
+ count: "count";
334
+ maximum: "maximum";
335
+ minimum: "minimum";
336
+ sum: "sum";
337
+ }>;
338
+ rounding: z.ZodOptional<z.ZodEnum<{
339
+ floor: "floor";
340
+ halfUp: "halfUp";
341
+ }>>;
342
+ value: z.ZodOptional<z.ZodString>;
343
+ }, z.core.$strict>>;
344
+ resultExpressions: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
345
+ id: z.ZodString;
346
+ op: z.ZodLiteral<"field">;
347
+ path: z.ZodString;
348
+ }, z.core.$strict>, z.ZodObject<{
349
+ id: z.ZodString;
350
+ op: z.ZodLiteral<"literal">;
351
+ type: z.ZodDiscriminatedUnion<[z.ZodObject<{
352
+ kind: z.ZodLiteral<"money">;
353
+ currency: z.ZodString;
354
+ }, z.core.$strict>, z.ZodObject<{
355
+ kind: z.ZodEnum<{
356
+ boolean: "boolean";
357
+ date: "date";
358
+ integer: "integer";
359
+ text: "text";
360
+ }>;
361
+ }, z.core.$strict>], "kind">;
362
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>;
363
+ }, z.core.$strict>, z.ZodObject<{
364
+ id: z.ZodString;
365
+ op: z.ZodLiteral<"parameter">;
366
+ name: z.ZodEnum<{
367
+ observationAt: "observationAt";
368
+ periodEnd: "periodEnd";
369
+ periodStart: "periodStart";
370
+ }>;
371
+ }, z.core.$strict>, z.ZodObject<{
372
+ id: z.ZodString;
373
+ op: z.ZodEnum<{
374
+ and: "and";
375
+ atMost: "atMost";
376
+ daysBetween: "daysBetween";
377
+ equal: "equal";
378
+ less: "less";
379
+ maximum: "maximum";
380
+ minimum: "minimum";
381
+ or: "or";
382
+ subtract: "subtract";
383
+ sum: "sum";
384
+ }>;
385
+ left: z.ZodString;
386
+ right: z.ZodString;
387
+ }, z.core.$strict>, z.ZodObject<{
388
+ id: z.ZodString;
389
+ op: z.ZodLiteral<"not">;
390
+ value: z.ZodString;
391
+ }, z.core.$strict>, z.ZodObject<{
392
+ id: z.ZodString;
393
+ op: z.ZodLiteral<"choose">;
394
+ condition: z.ZodString;
395
+ yes: z.ZodString;
396
+ no: z.ZodString;
397
+ }, z.core.$strict>, z.ZodObject<{
398
+ id: z.ZodString;
399
+ op: z.ZodLiteral<"bucket">;
400
+ value: z.ZodString;
401
+ unit: z.ZodEnum<{
402
+ month: "month";
403
+ quarter: "quarter";
404
+ }>;
405
+ }, z.core.$strict>, z.ZodObject<{
406
+ id: z.ZodString;
407
+ op: z.ZodLiteral<"ratio">;
408
+ numerator: z.ZodString;
409
+ denominator: z.ZodString;
410
+ scale: z.ZodNumber;
411
+ rounding: z.ZodEnum<{
412
+ floor: "floor";
413
+ halfUp: "halfUp";
414
+ }>;
415
+ zero: z.ZodEnum<{
416
+ null: "null";
417
+ refuse: "refuse";
418
+ }>;
419
+ }, z.core.$strict>], "op">>;
420
+ }, z.core.$strict>;
421
+ validation: z.ZodObject<{
422
+ empty: z.ZodEnum<{
423
+ noEligibleFacilities: "noEligibleFacilities";
424
+ refuse: "refuse";
425
+ }>;
426
+ required: z.ZodArray<z.ZodString>;
427
+ rowReconcile: z.ZodArray<z.ZodObject<{
428
+ left: z.ZodString;
429
+ right: z.ZodString;
430
+ }, z.core.$strict>>;
431
+ reconcile: z.ZodArray<z.ZodObject<{
432
+ left: z.ZodString;
433
+ right: z.ZodString;
434
+ }, z.core.$strict>>;
435
+ unavailableFacts: z.ZodArray<z.ZodString>;
436
+ lockTimeoutMs: z.ZodNumber;
437
+ captureTimeoutMs: z.ZodNumber;
438
+ maxRows: z.ZodNumber;
439
+ maxJoinRows: z.ZodNumber;
440
+ maxBytes: z.ZodNumber;
441
+ }, z.core.$strict>;
442
+ output: z.ZodObject<{
443
+ profile: z.ZodLiteral<"internal.v1">;
444
+ formats: z.ZodArray<z.ZodEnum<{
445
+ csv: "csv";
446
+ json: "json";
447
+ }>>;
448
+ columns: z.ZodArray<z.ZodObject<{
449
+ name: z.ZodString;
450
+ label: z.ZodString;
451
+ type: z.ZodDiscriminatedUnion<[z.ZodObject<{
452
+ kind: z.ZodLiteral<"money">;
453
+ currency: z.ZodString;
454
+ }, z.core.$strict>, z.ZodObject<{
455
+ kind: z.ZodEnum<{
456
+ boolean: "boolean";
457
+ date: "date";
458
+ integer: "integer";
459
+ text: "text";
460
+ }>;
461
+ }, z.core.$strict>], "kind">;
462
+ }, z.core.$strict>>;
463
+ sort: z.ZodArray<z.ZodString>;
464
+ }, z.core.$strict>;
465
+ authority: z.ZodObject<{
466
+ request: z.ZodArray<z.ZodString>;
467
+ read: z.ZodArray<z.ZodString>;
468
+ release: z.ZodArray<z.ZodString>;
469
+ retention: z.ZodObject<{
470
+ policy: z.ZodString;
471
+ years: z.ZodNumber;
472
+ }, z.core.$strict>;
473
+ }, z.core.$strict>;
474
+ }, z.core.$strict>;
475
+ export type ReportDefinition = z.infer<typeof reportDefinitionSchema>;
476
+ export type ReportExpression = z.infer<typeof reportExpressionSchema>;
477
+ //# sourceMappingURL=reporting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporting.d.ts","sourceRoot":"","sources":["../src/reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAWzB,eAAO,MAAM,gBAAgB;;;;;;;;;;4BAM3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,sFAAsF;AACtF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAqDjC,CAAC;AAaH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwFjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,169 @@
1
+ import * as z from "zod";
2
+ const name = z
3
+ .string()
4
+ .regex(/^[a-z][a-zA-Z0-9_]*$/)
5
+ .max(80);
6
+ const path = z
7
+ .string()
8
+ .regex(/^[a-z][a-zA-Z0-9_]*(\.[a-z][a-zA-Z0-9_]*)*$/)
9
+ .max(240);
10
+ const integer = z.number().int().safe();
11
+ export const reportTypeSchema = z.discriminatedUnion("kind", [
12
+ z.strictObject({
13
+ kind: z.literal("money"),
14
+ currency: z.string().regex(/^[A-Z]{3}$/),
15
+ }),
16
+ z.strictObject({ kind: z.enum(["text", "integer", "boolean", "date"]) }),
17
+ ]);
18
+ const literal = z.union([z.string().max(2048), integer, z.boolean()]);
19
+ /** Ordered expressions form a finite typed graph. References only point backwards. */
20
+ export const reportExpressionSchema = z.discriminatedUnion("op", [
21
+ z.strictObject({ id: name, op: z.literal("field"), path }),
22
+ z.strictObject({
23
+ id: name,
24
+ op: z.literal("literal"),
25
+ type: reportTypeSchema,
26
+ value: literal,
27
+ }),
28
+ z.strictObject({
29
+ id: name,
30
+ op: z.literal("parameter"),
31
+ name: z.enum(["periodStart", "periodEnd", "observationAt"]),
32
+ }),
33
+ z.strictObject({
34
+ id: name,
35
+ op: z.enum([
36
+ "sum",
37
+ "subtract",
38
+ "minimum",
39
+ "maximum",
40
+ "equal",
41
+ "less",
42
+ "atMost",
43
+ "and",
44
+ "or",
45
+ "daysBetween",
46
+ ]),
47
+ left: name,
48
+ right: name,
49
+ }),
50
+ z.strictObject({ id: name, op: z.literal("not"), value: name }),
51
+ z.strictObject({
52
+ id: name,
53
+ op: z.literal("choose"),
54
+ condition: name,
55
+ yes: name,
56
+ no: name,
57
+ }),
58
+ z.strictObject({
59
+ id: name,
60
+ op: z.literal("bucket"),
61
+ value: name,
62
+ unit: z.enum(["month", "quarter"]),
63
+ }),
64
+ z.strictObject({
65
+ id: name,
66
+ op: z.literal("ratio"),
67
+ numerator: name,
68
+ denominator: name,
69
+ scale: integer.min(1).max(1000000),
70
+ rounding: z.enum(["floor", "halfUp"]),
71
+ zero: z.enum(["refuse", "null"]),
72
+ }),
73
+ ]);
74
+ const column = z.strictObject({
75
+ name,
76
+ field: path,
77
+ type: reportTypeSchema,
78
+ required: z.boolean(),
79
+ });
80
+ const aggregate = z.strictObject({
81
+ name,
82
+ op: z.enum(["sum", "average", "count", "minimum", "maximum"]),
83
+ rounding: z.enum(["floor", "halfUp"]).optional(),
84
+ value: name.optional(),
85
+ });
86
+ export const reportDefinitionSchema = z.strictObject({
87
+ identity: z.strictObject({
88
+ id: name,
89
+ version: integer.positive(),
90
+ description: z.string().min(1).max(2048),
91
+ }),
92
+ scope: z.strictObject({
93
+ kind: z.enum(["product", "company"]),
94
+ classification: z.enum(["internal", "personal", "restricted"]),
95
+ currency: z.string().regex(/^[A-Z]{3}$/),
96
+ }),
97
+ datasets: z
98
+ .array(z.strictObject({
99
+ id: name,
100
+ source: z.enum(["instrument", "account", "identity", "operation"]),
101
+ instruments: z
102
+ .array(name.meta({ "x-udl-reference": "instrument" }))
103
+ .max(32),
104
+ rowKey: name,
105
+ columns: z.array(column).min(1).max(64),
106
+ expressions: z.array(reportExpressionSchema).max(128),
107
+ selection: name.optional(),
108
+ }))
109
+ .min(1)
110
+ .max(16),
111
+ time: z.strictObject({
112
+ timezone: z.literal("Asia/Riyadh"),
113
+ boundary: z.literal("startInclusiveEndExclusive"),
114
+ observation: z.literal("periodEnd"),
115
+ history: z.literal("retainedOnly"),
116
+ }),
117
+ selection: z.strictObject({ dataset: name, predicate: name.optional() }),
118
+ calculation: z.strictObject({
119
+ joins: z
120
+ .array(z.strictObject({
121
+ dataset: name,
122
+ local: name,
123
+ foreign: name,
124
+ cardinality: z.enum(["one", "many"]),
125
+ missing: z.enum(["refuse", "allow"]),
126
+ aggregates: z.array(aggregate).max(32),
127
+ }))
128
+ .max(16),
129
+ expressions: z.array(reportExpressionSchema).max(128),
130
+ groupBy: z.array(name).max(8),
131
+ aggregates: z.array(aggregate).max(64),
132
+ resultExpressions: z.array(reportExpressionSchema).max(64),
133
+ }),
134
+ validation: z.strictObject({
135
+ empty: z.enum(["refuse", "noEligibleFacilities"]),
136
+ required: z.array(name).max(64),
137
+ rowReconcile: z.array(z.strictObject({ left: name, right: name })).max(16),
138
+ reconcile: z.array(z.strictObject({ left: name, right: name })).max(16),
139
+ unavailableFacts: z.array(z.string().min(1).max(240)).max(32),
140
+ lockTimeoutMs: integer.min(1).max(2000),
141
+ captureTimeoutMs: integer.min(1).max(10000),
142
+ maxRows: integer.min(1).max(100000),
143
+ maxJoinRows: integer.min(1).max(1000000),
144
+ maxBytes: integer.min(1024).max(16777216),
145
+ }),
146
+ output: z.strictObject({
147
+ profile: z.literal("internal.v1"),
148
+ formats: z
149
+ .array(z.enum(["json", "csv"]))
150
+ .min(1)
151
+ .max(2),
152
+ columns: z
153
+ .array(z.strictObject({
154
+ name,
155
+ label: z.string().min(1).max(120),
156
+ type: reportTypeSchema,
157
+ }))
158
+ .min(1)
159
+ .max(64),
160
+ sort: z.array(name).min(1).max(8),
161
+ }),
162
+ authority: z.strictObject({
163
+ request: z.array(name).min(1).max(64),
164
+ read: z.array(name).min(1).max(64),
165
+ release: z.array(name).max(64),
166
+ retention: z.strictObject({ policy: name, years: integer.min(1).max(100) }),
167
+ }),
168
+ });
169
+ //# sourceMappingURL=reporting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporting.js","sourceRoot":"","sources":["../src/reporting.ts"],"names":[],"mappings":"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"}