@ottochain/sdk 1.5.0 → 1.6.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 (80) hide show
  1. package/dist/cjs/apps/contracts/index.js +6 -10
  2. package/dist/cjs/apps/{governance/state-machines/governance-legislature.json → contracts/state-machines/index.js} +381 -330
  3. package/dist/cjs/apps/corporate/index.js +12 -24
  4. package/dist/cjs/apps/corporate/state-machines/index.js +10246 -0
  5. package/dist/cjs/apps/governance/index.js +11 -22
  6. package/dist/cjs/apps/governance/state-machines/index.js +4755 -0
  7. package/dist/cjs/apps/identity/index.js +3 -6
  8. package/dist/{esm/apps/identity/state-machines/agent-identity.json → cjs/apps/identity/state-machines/index.js} +9 -2
  9. package/dist/cjs/apps/markets/index.js +2 -5
  10. package/dist/{esm/apps/markets/state-machines/market-universal.json → cjs/apps/markets/state-machines/index.js} +9 -2
  11. package/dist/cjs/apps/oracles/index.js +2 -5
  12. package/dist/{esm/apps/oracles/state-machines/oracle.json → cjs/apps/oracles/state-machines/index.js} +9 -2
  13. package/dist/cjs/ottochain/index.js +4 -1
  14. package/dist/cjs/ottochain/normalize.js +17 -3
  15. package/dist/cjs/ottochain/types.js +12 -0
  16. package/dist/esm/apps/contracts/index.js +2 -3
  17. package/dist/esm/apps/{governance/state-machines/governance-legislature.json → contracts/state-machines/index.js} +378 -330
  18. package/dist/esm/apps/corporate/index.js +2 -11
  19. package/dist/esm/apps/corporate/state-machines/index.js +10243 -0
  20. package/dist/esm/apps/governance/index.js +2 -10
  21. package/dist/esm/apps/governance/state-machines/index.js +4752 -0
  22. package/dist/esm/apps/identity/index.js +2 -2
  23. package/dist/{cjs/apps/identity/state-machines/agent-identity.json → esm/apps/identity/state-machines/index.js} +6 -2
  24. package/dist/esm/apps/markets/index.js +1 -1
  25. package/dist/{cjs/apps/markets/state-machines/market-universal.json → esm/apps/markets/state-machines/index.js} +6 -2
  26. package/dist/esm/apps/oracles/index.js +1 -1
  27. package/dist/{cjs/apps/oracles/state-machines/oracle.json → esm/apps/oracles/state-machines/index.js} +6 -2
  28. package/dist/esm/ottochain/index.js +2 -0
  29. package/dist/esm/ottochain/normalize.js +17 -3
  30. package/dist/esm/ottochain/types.js +11 -1
  31. package/dist/types/apps/contracts/state-machines/index.d.ts +549 -0
  32. package/dist/types/apps/corporate/state-machines/index.d.ts +9121 -0
  33. package/dist/types/apps/governance/state-machines/index.d.ts +3551 -0
  34. package/dist/types/apps/identity/state-machines/index.d.ts +206 -0
  35. package/dist/types/apps/markets/state-machines/index.d.ts +448 -0
  36. package/dist/types/apps/oracles/state-machines/index.d.ts +312 -0
  37. package/dist/types/ottochain/index.d.ts +2 -1
  38. package/dist/types/ottochain/normalize.d.ts +14 -0
  39. package/dist/types/ottochain/types.d.ts +9 -0
  40. package/package.json +4 -3
  41. package/dist/cjs/apps/contracts/state-machines/contract.json +0 -352
  42. package/dist/cjs/apps/contracts/state-machines/escrow.json +0 -354
  43. package/dist/cjs/apps/corporate/state-machines/corporate-board.json +0 -1064
  44. package/dist/cjs/apps/corporate/state-machines/corporate-bylaws.json +0 -751
  45. package/dist/cjs/apps/corporate/state-machines/corporate-committee.json +0 -957
  46. package/dist/cjs/apps/corporate/state-machines/corporate-compliance.json +0 -1293
  47. package/dist/cjs/apps/corporate/state-machines/corporate-entity.json +0 -861
  48. package/dist/cjs/apps/corporate/state-machines/corporate-officers.json +0 -843
  49. package/dist/cjs/apps/corporate/state-machines/corporate-proxy.json +0 -783
  50. package/dist/cjs/apps/corporate/state-machines/corporate-resolution.json +0 -1174
  51. package/dist/cjs/apps/corporate/state-machines/corporate-securities.json +0 -1215
  52. package/dist/cjs/apps/corporate/state-machines/corporate-shareholders.json +0 -1298
  53. package/dist/cjs/apps/governance/state-machines/dao-multisig.json +0 -667
  54. package/dist/cjs/apps/governance/state-machines/dao-single.json +0 -230
  55. package/dist/cjs/apps/governance/state-machines/dao-threshold.json +0 -624
  56. package/dist/cjs/apps/governance/state-machines/dao-token.json +0 -638
  57. package/dist/cjs/apps/governance/state-machines/governance-constitution.json +0 -357
  58. package/dist/cjs/apps/governance/state-machines/governance-executive.json +0 -387
  59. package/dist/cjs/apps/governance/state-machines/governance-judiciary.json +0 -558
  60. package/dist/cjs/apps/governance/state-machines/governance-simple.json +0 -625
  61. package/dist/esm/apps/contracts/state-machines/contract.json +0 -352
  62. package/dist/esm/apps/contracts/state-machines/escrow.json +0 -354
  63. package/dist/esm/apps/corporate/state-machines/corporate-board.json +0 -1064
  64. package/dist/esm/apps/corporate/state-machines/corporate-bylaws.json +0 -751
  65. package/dist/esm/apps/corporate/state-machines/corporate-committee.json +0 -957
  66. package/dist/esm/apps/corporate/state-machines/corporate-compliance.json +0 -1293
  67. package/dist/esm/apps/corporate/state-machines/corporate-entity.json +0 -861
  68. package/dist/esm/apps/corporate/state-machines/corporate-officers.json +0 -843
  69. package/dist/esm/apps/corporate/state-machines/corporate-proxy.json +0 -783
  70. package/dist/esm/apps/corporate/state-machines/corporate-resolution.json +0 -1174
  71. package/dist/esm/apps/corporate/state-machines/corporate-securities.json +0 -1215
  72. package/dist/esm/apps/corporate/state-machines/corporate-shareholders.json +0 -1298
  73. package/dist/esm/apps/governance/state-machines/dao-multisig.json +0 -667
  74. package/dist/esm/apps/governance/state-machines/dao-single.json +0 -230
  75. package/dist/esm/apps/governance/state-machines/dao-threshold.json +0 -624
  76. package/dist/esm/apps/governance/state-machines/dao-token.json +0 -638
  77. package/dist/esm/apps/governance/state-machines/governance-constitution.json +0 -357
  78. package/dist/esm/apps/governance/state-machines/governance-executive.json +0 -387
  79. package/dist/esm/apps/governance/state-machines/governance-judiciary.json +0 -558
  80. package/dist/esm/apps/governance/state-machines/governance-simple.json +0 -625
@@ -1,957 +0,0 @@
1
- {
2
- "$schema": "https://ottochain.dev/schemas/state-machine-v1.json",
3
- "name": "corporate-committee",
4
- "version": "1.0.0",
5
- "category": "corporate-governance",
6
- "description": "Board committee state machine managing standing and special committees, their charters, membership, independence requirements, and formal actions.",
7
- "context": {
8
- "committeeId": {
9
- "type": "string",
10
- "description": "Unique identifier for this committee"
11
- },
12
- "entityId": {
13
- "type": "string",
14
- "description": "Reference to parent corporate-entity"
15
- },
16
- "boardId": {
17
- "type": "string",
18
- "description": "Reference to parent corporate-board"
19
- },
20
- "name": {
21
- "type": "string",
22
- "description": "Committee name"
23
- },
24
- "committeeType": {
25
- "type": "string",
26
- "enum": [
27
- "AUDIT",
28
- "COMPENSATION",
29
- "NOMINATING_GOVERNANCE",
30
- "EXECUTIVE",
31
- "RISK",
32
- "FINANCE",
33
- "SPECIAL",
34
- "OTHER"
35
- ],
36
- "description": "Type of committee"
37
- },
38
- "purpose": {
39
- "type": "string",
40
- "description": "Brief statement of committee purpose"
41
- },
42
- "isStanding": {
43
- "type": "boolean",
44
- "default": true,
45
- "description": "Standing vs special (temporary) committee"
46
- },
47
- "createdDate": {
48
- "type": "string",
49
- "format": "date"
50
- },
51
- "disbandDate": {
52
- "type": "string",
53
- "format": "date",
54
- "nullable": true
55
- },
56
- "charter": {
57
- "type": "object",
58
- "nullable": true,
59
- "properties": {
60
- "charterId": {
61
- "type": "string"
62
- },
63
- "version": {
64
- "type": "string"
65
- },
66
- "adoptedDate": {
67
- "type": "string",
68
- "format": "date"
69
- },
70
- "lastReviewedDate": {
71
- "type": "string",
72
- "format": "date"
73
- },
74
- "documentRef": {
75
- "type": "string"
76
- },
77
- "purposes": {
78
- "type": "array",
79
- "items": {
80
- "type": "string"
81
- }
82
- },
83
- "responsibilities": {
84
- "type": "array",
85
- "items": {
86
- "type": "string"
87
- }
88
- },
89
- "authorityLimits": {
90
- "type": "object"
91
- },
92
- "reportingRequirements": {
93
- "type": "string"
94
- }
95
- }
96
- },
97
- "membershipRequirements": {
98
- "type": "object",
99
- "properties": {
100
- "minimumMembers": {
101
- "type": "integer",
102
- "default": 3
103
- },
104
- "maximumMembers": {
105
- "type": "integer"
106
- },
107
- "independenceRequired": {
108
- "type": "boolean",
109
- "default": false
110
- },
111
- "financialExpertRequired": {
112
- "type": "boolean",
113
- "default": false,
114
- "description": "For audit committee"
115
- },
116
- "independenceStandard": {
117
- "type": "string",
118
- "enum": [
119
- "NYSE",
120
- "NASDAQ",
121
- "SEC",
122
- "CUSTOM"
123
- ],
124
- "nullable": true
125
- }
126
- }
127
- },
128
- "members": {
129
- "type": "array",
130
- "items": {
131
- "type": "object",
132
- "properties": {
133
- "memberId": {
134
- "type": "string"
135
- },
136
- "directorId": {
137
- "type": "string"
138
- },
139
- "name": {
140
- "type": "string"
141
- },
142
- "role": {
143
- "type": "string",
144
- "enum": [
145
- "CHAIR",
146
- "MEMBER"
147
- ]
148
- },
149
- "appointedDate": {
150
- "type": "string",
151
- "format": "date"
152
- },
153
- "appointmentResolutionRef": {
154
- "type": "string"
155
- },
156
- "removedDate": {
157
- "type": "string",
158
- "format": "date",
159
- "nullable": true
160
- },
161
- "isIndependent": {
162
- "type": "boolean"
163
- },
164
- "isFinancialExpert": {
165
- "type": "boolean",
166
- "default": false
167
- },
168
- "status": {
169
- "type": "string",
170
- "enum": [
171
- "ACTIVE",
172
- "REMOVED",
173
- "RESIGNED"
174
- ]
175
- }
176
- }
177
- }
178
- },
179
- "quorumRules": {
180
- "type": "object",
181
- "properties": {
182
- "type": {
183
- "type": "string",
184
- "enum": [
185
- "MAJORITY",
186
- "FIXED"
187
- ],
188
- "default": "MAJORITY"
189
- },
190
- "threshold": {
191
- "type": "number"
192
- },
193
- "minimumRequired": {
194
- "type": "integer"
195
- }
196
- }
197
- },
198
- "currentMeeting": {
199
- "type": "object",
200
- "nullable": true,
201
- "properties": {
202
- "meetingId": {
203
- "type": "string"
204
- },
205
- "scheduledDate": {
206
- "type": "string",
207
- "format": "date-time"
208
- },
209
- "agenda": {
210
- "type": "array",
211
- "items": {
212
- "type": "string"
213
- }
214
- },
215
- "attendees": {
216
- "type": "array",
217
- "items": {
218
- "type": "string"
219
- }
220
- },
221
- "quorumPresent": {
222
- "type": "boolean"
223
- },
224
- "openedAt": {
225
- "type": "string",
226
- "format": "date-time",
227
- "nullable": true
228
- },
229
- "closedAt": {
230
- "type": "string",
231
- "format": "date-time",
232
- "nullable": true
233
- }
234
- }
235
- },
236
- "meetingHistory": {
237
- "type": "array",
238
- "items": {
239
- "type": "object",
240
- "properties": {
241
- "meetingId": {
242
- "type": "string"
243
- },
244
- "date": {
245
- "type": "string",
246
- "format": "date"
247
- },
248
- "attendeeCount": {
249
- "type": "integer"
250
- },
251
- "minutesRef": {
252
- "type": "string"
253
- },
254
- "actionsApproved": {
255
- "type": "array",
256
- "items": {
257
- "type": "string"
258
- }
259
- }
260
- }
261
- }
262
- },
263
- "annualReviewDate": {
264
- "type": "string",
265
- "format": "date",
266
- "nullable": true
267
- },
268
- "status": {
269
- "type": "string",
270
- "enum": [
271
- "ACTIVE",
272
- "DISBANDED"
273
- ]
274
- },
275
- "createdAt": {
276
- "type": "string",
277
- "format": "date-time"
278
- },
279
- "updatedAt": {
280
- "type": "string",
281
- "format": "date-time"
282
- }
283
- },
284
- "states": {
285
- "FORMING": {
286
- "description": "Committee being formed; members appointed but charter not yet adopted",
287
- "metadata": null
288
- },
289
- "ACTIVE": {
290
- "description": "Committee is active with adopted charter and proper membership",
291
- "metadata": null
292
- },
293
- "IN_MEETING": {
294
- "description": "Committee meeting in session with quorum",
295
- "metadata": null
296
- },
297
- "NON_COMPLIANT": {
298
- "description": "Committee lacks required membership (insufficient members, independence, etc.)",
299
- "metadata": null
300
- },
301
- "DISBANDED": {
302
- "description": "Committee has been disbanded (terminal for special committees)",
303
- "metadata": null,
304
- "terminal": true
305
- }
306
- },
307
- "initialState": "FORMING",
308
- "transitions": {
309
- "create_committee": {
310
- "from": null,
311
- "to": "FORMING",
312
- "description": "Board creates a new committee",
313
- "event": {
314
- "name": "create_committee",
315
- "payload": {
316
- "committeeId": {
317
- "type": "string",
318
- "required": true
319
- },
320
- "entityId": {
321
- "type": "string",
322
- "required": true
323
- },
324
- "boardId": {
325
- "type": "string",
326
- "required": true
327
- },
328
- "name": {
329
- "type": "string",
330
- "required": true
331
- },
332
- "committeeType": {
333
- "type": "string",
334
- "required": true
335
- },
336
- "purpose": {
337
- "type": "string"
338
- },
339
- "isStanding": {
340
- "type": "boolean",
341
- "default": true
342
- },
343
- "membershipRequirements": {
344
- "type": "object"
345
- },
346
- "boardResolutionRef": {
347
- "type": "string",
348
- "required": true
349
- }
350
- }
351
- },
352
- "guards": [
353
- {
354
- "name": "boardApproved",
355
- "crossMachine": {
356
- "machine": "corporate-resolution",
357
- "instanceRef": "{{ event.boardResolutionRef }}",
358
- "requiredState": "EXECUTED"
359
- }
360
- }
361
- ],
362
- "effects": [
363
- {
364
- "type": "SET_CONTEXT",
365
- "path": "committeeId",
366
- "value": "{{ event.committeeId }}"
367
- },
368
- {
369
- "type": "SET_CONTEXT",
370
- "path": "entityId",
371
- "value": "{{ event.entityId }}"
372
- },
373
- {
374
- "type": "SET_CONTEXT",
375
- "path": "boardId",
376
- "value": "{{ event.boardId }}"
377
- },
378
- {
379
- "type": "SET_CONTEXT",
380
- "path": "name",
381
- "value": "{{ event.name }}"
382
- },
383
- {
384
- "type": "SET_CONTEXT",
385
- "path": "committeeType",
386
- "value": "{{ event.committeeType }}"
387
- },
388
- {
389
- "type": "SET_CONTEXT",
390
- "path": "purpose",
391
- "value": "{{ event.purpose }}"
392
- },
393
- {
394
- "type": "SET_CONTEXT",
395
- "path": "isStanding",
396
- "value": "{{ event.isStanding }}"
397
- },
398
- {
399
- "type": "SET_CONTEXT",
400
- "path": "membershipRequirements",
401
- "value": "{{ event.membershipRequirements }}"
402
- },
403
- {
404
- "type": "SET_CONTEXT",
405
- "path": "createdDate",
406
- "value": "{{ today() }}"
407
- },
408
- {
409
- "type": "SET_CONTEXT",
410
- "path": "status",
411
- "value": "ACTIVE"
412
- },
413
- {
414
- "type": "SET_CONTEXT",
415
- "path": "members",
416
- "value": []
417
- },
418
- {
419
- "type": "EMIT_EVENT",
420
- "eventType": "COMMITTEE_CREATED",
421
- "payload": {
422
- "committeeId": "{{ event.committeeId }}",
423
- "name": "{{ event.name }}",
424
- "type": "{{ event.committeeType }}"
425
- }
426
- }
427
- ]
428
- },
429
- "appoint_member": {
430
- "from": [
431
- "FORMING",
432
- "ACTIVE",
433
- "NON_COMPLIANT"
434
- ],
435
- "to": null,
436
- "description": "Appoint a director to the committee",
437
- "event": {
438
- "name": "appoint_member",
439
- "payload": {
440
- "memberId": {
441
- "type": "string",
442
- "required": true
443
- },
444
- "directorId": {
445
- "type": "string",
446
- "required": true
447
- },
448
- "name": {
449
- "type": "string",
450
- "required": true
451
- },
452
- "role": {
453
- "type": "string",
454
- "enum": [
455
- "CHAIR",
456
- "MEMBER"
457
- ],
458
- "default": "MEMBER"
459
- },
460
- "isIndependent": {
461
- "type": "boolean",
462
- "required": true
463
- },
464
- "isFinancialExpert": {
465
- "type": "boolean",
466
- "default": false
467
- },
468
- "boardResolutionRef": {
469
- "type": "string",
470
- "required": true
471
- }
472
- }
473
- },
474
- "guards": [
475
- {
476
- "name": "isActiveDirector",
477
- "description": "Must be an active director on the board",
478
- "crossMachine": {
479
- "machine": "corporate-board",
480
- "instanceRef": "{{ context.boardId }}",
481
- "query": "directors.some(d => d.directorId === event.directorId && d.status === 'ACTIVE')"
482
- }
483
- },
484
- {
485
- "name": "notAlreadyMember",
486
- "expression": "!context.members.some(m => m.directorId === event.directorId && m.status === 'ACTIVE')"
487
- },
488
- {
489
- "name": "meetsIndependenceIfRequired",
490
- "expression": "!context.membershipRequirements.independenceRequired || event.isIndependent"
491
- }
492
- ],
493
- "effects": [
494
- {
495
- "type": "CONDITIONAL",
496
- "condition": "event.role === 'CHAIR'",
497
- "then": {
498
- "type": "UPDATE_ARRAY_ALL",
499
- "path": "members",
500
- "filter": "m => m.status === 'ACTIVE' && m.role === 'CHAIR'",
501
- "updates": {
502
- "role": "MEMBER"
503
- }
504
- }
505
- },
506
- {
507
- "type": "APPEND_ARRAY",
508
- "path": "members",
509
- "value": {
510
- "memberId": "{{ event.memberId }}",
511
- "directorId": "{{ event.directorId }}",
512
- "name": "{{ event.name }}",
513
- "role": "{{ event.role }}",
514
- "appointedDate": "{{ today() }}",
515
- "appointmentResolutionRef": "{{ event.boardResolutionRef }}",
516
- "isIndependent": "{{ event.isIndependent }}",
517
- "isFinancialExpert": "{{ event.isFinancialExpert }}",
518
- "status": "ACTIVE"
519
- }
520
- },
521
- {
522
- "type": "EMIT_EVENT",
523
- "eventType": "COMMITTEE_MEMBER_APPOINTED",
524
- "payload": {
525
- "committeeId": "{{ context.committeeId }}",
526
- "directorId": "{{ event.directorId }}",
527
- "role": "{{ event.role }}"
528
- }
529
- }
530
- ]
531
- },
532
- "remove_member": {
533
- "from": [
534
- "ACTIVE",
535
- "NON_COMPLIANT",
536
- "IN_MEETING"
537
- ],
538
- "to": null,
539
- "description": "Remove a member from the committee",
540
- "event": {
541
- "name": "remove_member",
542
- "payload": {
543
- "memberId": {
544
- "type": "string",
545
- "required": true
546
- },
547
- "reason": {
548
- "type": "string"
549
- },
550
- "boardResolutionRef": {
551
- "type": "string",
552
- "required": true
553
- }
554
- }
555
- },
556
- "effects": [
557
- {
558
- "type": "UPDATE_ARRAY_ITEM",
559
- "path": "members",
560
- "matchKey": "memberId",
561
- "matchValue": "{{ event.memberId }}",
562
- "updates": {
563
- "status": "REMOVED",
564
- "removedDate": "{{ today() }}"
565
- }
566
- },
567
- {
568
- "type": "EMIT_EVENT",
569
- "eventType": "COMMITTEE_MEMBER_REMOVED",
570
- "payload": {
571
- "committeeId": "{{ context.committeeId }}",
572
- "memberId": "{{ event.memberId }}"
573
- }
574
- }
575
- ]
576
- },
577
- "adopt_charter": {
578
- "from": [
579
- "FORMING",
580
- "ACTIVE"
581
- ],
582
- "to": "ACTIVE",
583
- "description": "Board adopts or updates the committee charter",
584
- "event": {
585
- "name": "adopt_charter",
586
- "payload": {
587
- "charterId": {
588
- "type": "string",
589
- "required": true
590
- },
591
- "version": {
592
- "type": "string",
593
- "required": true
594
- },
595
- "documentRef": {
596
- "type": "string",
597
- "required": true
598
- },
599
- "purposes": {
600
- "type": "array",
601
- "items": {
602
- "type": "string"
603
- }
604
- },
605
- "responsibilities": {
606
- "type": "array",
607
- "items": {
608
- "type": "string"
609
- }
610
- },
611
- "authorityLimits": {
612
- "type": "object"
613
- },
614
- "reportingRequirements": {
615
- "type": "string"
616
- },
617
- "boardResolutionRef": {
618
- "type": "string",
619
- "required": true
620
- }
621
- }
622
- },
623
- "guards": [
624
- {
625
- "name": "hasMinimumMembers",
626
- "expression": "context.members.filter(m => m.status === 'ACTIVE').length >= context.membershipRequirements.minimumMembers"
627
- },
628
- {
629
- "name": "boardApproved",
630
- "crossMachine": {
631
- "machine": "corporate-resolution",
632
- "instanceRef": "{{ event.boardResolutionRef }}",
633
- "requiredState": "EXECUTED"
634
- }
635
- }
636
- ],
637
- "effects": [
638
- {
639
- "type": "SET_CONTEXT",
640
- "path": "charter",
641
- "value": {
642
- "charterId": "{{ event.charterId }}",
643
- "version": "{{ event.version }}",
644
- "adoptedDate": "{{ today() }}",
645
- "lastReviewedDate": "{{ today() }}",
646
- "documentRef": "{{ event.documentRef }}",
647
- "purposes": "{{ event.purposes }}",
648
- "responsibilities": "{{ event.responsibilities }}",
649
- "authorityLimits": "{{ event.authorityLimits }}",
650
- "reportingRequirements": "{{ event.reportingRequirements }}"
651
- }
652
- },
653
- {
654
- "type": "EMIT_EVENT",
655
- "eventType": "COMMITTEE_CHARTER_ADOPTED",
656
- "payload": {
657
- "committeeId": "{{ context.committeeId }}",
658
- "charterId": "{{ event.charterId }}",
659
- "version": "{{ event.version }}"
660
- }
661
- }
662
- ]
663
- },
664
- "call_meeting": {
665
- "from": "ACTIVE",
666
- "to": "ACTIVE",
667
- "description": "Schedule a committee meeting",
668
- "event": {
669
- "name": "call_meeting",
670
- "payload": {
671
- "meetingId": {
672
- "type": "string",
673
- "required": true
674
- },
675
- "scheduledDate": {
676
- "type": "string",
677
- "format": "date-time",
678
- "required": true
679
- },
680
- "agenda": {
681
- "type": "array",
682
- "items": {
683
- "type": "string"
684
- }
685
- }
686
- }
687
- },
688
- "guards": [
689
- {
690
- "name": "noConflictingMeeting",
691
- "expression": "context.currentMeeting == null || context.currentMeeting.closedAt != null"
692
- }
693
- ],
694
- "effects": [
695
- {
696
- "type": "SET_CONTEXT",
697
- "path": "currentMeeting",
698
- "value": {
699
- "meetingId": "{{ event.meetingId }}",
700
- "scheduledDate": "{{ event.scheduledDate }}",
701
- "agenda": "{{ event.agenda }}",
702
- "attendees": [],
703
- "quorumPresent": false
704
- }
705
- }
706
- ]
707
- },
708
- "open_meeting": {
709
- "from": "ACTIVE",
710
- "to": "IN_MEETING",
711
- "description": "Open committee meeting once quorum present",
712
- "event": {
713
- "name": "open_meeting",
714
- "payload": {
715
- "openedAt": {
716
- "type": "string",
717
- "format": "date-time",
718
- "required": true
719
- },
720
- "attendees": {
721
- "type": "array",
722
- "items": {
723
- "type": "string"
724
- },
725
- "required": true
726
- }
727
- }
728
- },
729
- "guards": [
730
- {
731
- "name": "hasPendingMeeting",
732
- "expression": "context.currentMeeting != null && context.currentMeeting.openedAt == null"
733
- },
734
- {
735
- "name": "quorumPresent",
736
- "expression": "event.attendees.length >= Math.ceil(context.members.filter(m => m.status === 'ACTIVE').length * 0.5)"
737
- }
738
- ],
739
- "effects": [
740
- {
741
- "type": "SET_CONTEXT",
742
- "path": "currentMeeting.openedAt",
743
- "value": "{{ event.openedAt }}"
744
- },
745
- {
746
- "type": "SET_CONTEXT",
747
- "path": "currentMeeting.attendees",
748
- "value": "{{ event.attendees }}"
749
- },
750
- {
751
- "type": "SET_CONTEXT",
752
- "path": "currentMeeting.quorumPresent",
753
- "value": true
754
- }
755
- ]
756
- },
757
- "adjourn_meeting": {
758
- "from": "IN_MEETING",
759
- "to": "ACTIVE",
760
- "description": "Adjourn the committee meeting",
761
- "event": {
762
- "name": "adjourn_meeting",
763
- "payload": {
764
- "closedAt": {
765
- "type": "string",
766
- "format": "date-time",
767
- "required": true
768
- },
769
- "minutesRef": {
770
- "type": "string"
771
- },
772
- "actionsApproved": {
773
- "type": "array",
774
- "items": {
775
- "type": "string"
776
- }
777
- }
778
- }
779
- },
780
- "effects": [
781
- {
782
- "type": "SET_CONTEXT",
783
- "path": "currentMeeting.closedAt",
784
- "value": "{{ event.closedAt }}"
785
- },
786
- {
787
- "type": "APPEND_ARRAY",
788
- "path": "meetingHistory",
789
- "value": {
790
- "meetingId": "{{ context.currentMeeting.meetingId }}",
791
- "date": "{{ context.currentMeeting.scheduledDate }}",
792
- "attendeeCount": "{{ context.currentMeeting.attendees.length }}",
793
- "minutesRef": "{{ event.minutesRef }}",
794
- "actionsApproved": "{{ event.actionsApproved }}"
795
- }
796
- },
797
- {
798
- "type": "SET_CONTEXT",
799
- "path": "currentMeeting",
800
- "value": null
801
- }
802
- ]
803
- },
804
- "flag_non_compliant": {
805
- "from": "ACTIVE",
806
- "to": "NON_COMPLIANT",
807
- "description": "Committee falls below membership or independence requirements",
808
- "event": {
809
- "name": "flag_non_compliant",
810
- "payload": {
811
- "reason": {
812
- "type": "string",
813
- "required": true
814
- },
815
- "flaggedDate": {
816
- "type": "string",
817
- "format": "date",
818
- "required": true
819
- }
820
- }
821
- },
822
- "effects": [
823
- {
824
- "type": "EMIT_EVENT",
825
- "eventType": "COMMITTEE_NON_COMPLIANT",
826
- "payload": {
827
- "committeeId": "{{ context.committeeId }}",
828
- "reason": "{{ event.reason }}"
829
- }
830
- }
831
- ]
832
- },
833
- "restore_compliance": {
834
- "from": "NON_COMPLIANT",
835
- "to": "ACTIVE",
836
- "description": "Committee restored to compliance after appointments",
837
- "event": {
838
- "name": "restore_compliance",
839
- "payload": {
840
- "restoredDate": {
841
- "type": "string",
842
- "format": "date",
843
- "required": true
844
- }
845
- }
846
- },
847
- "guards": [
848
- {
849
- "name": "meetsRequirements",
850
- "expression": "context.members.filter(m => m.status === 'ACTIVE').length >= context.membershipRequirements.minimumMembers"
851
- }
852
- ],
853
- "effects": [
854
- {
855
- "type": "EMIT_EVENT",
856
- "eventType": "COMMITTEE_COMPLIANCE_RESTORED",
857
- "payload": {
858
- "committeeId": "{{ context.committeeId }}"
859
- }
860
- }
861
- ]
862
- },
863
- "disband": {
864
- "from": [
865
- "ACTIVE",
866
- "NON_COMPLIANT",
867
- "FORMING"
868
- ],
869
- "to": "DISBANDED",
870
- "description": "Disband the committee",
871
- "event": {
872
- "name": "disband",
873
- "payload": {
874
- "disbandDate": {
875
- "type": "string",
876
- "format": "date",
877
- "required": true
878
- },
879
- "reason": {
880
- "type": "string"
881
- },
882
- "boardResolutionRef": {
883
- "type": "string",
884
- "required": true
885
- },
886
- "finalReportRef": {
887
- "type": "string"
888
- }
889
- }
890
- },
891
- "guards": [
892
- {
893
- "name": "boardApproved",
894
- "crossMachine": {
895
- "machine": "corporate-resolution",
896
- "instanceRef": "{{ event.boardResolutionRef }}",
897
- "requiredState": "EXECUTED"
898
- }
899
- }
900
- ],
901
- "effects": [
902
- {
903
- "type": "SET_CONTEXT",
904
- "path": "disbandDate",
905
- "value": "{{ event.disbandDate }}"
906
- },
907
- {
908
- "type": "SET_CONTEXT",
909
- "path": "status",
910
- "value": "DISBANDED"
911
- },
912
- {
913
- "type": "UPDATE_ARRAY_ALL",
914
- "path": "members",
915
- "filter": "m => m.status === 'ACTIVE'",
916
- "updates": {
917
- "status": "REMOVED",
918
- "removedDate": "{{ event.disbandDate }}"
919
- }
920
- },
921
- {
922
- "type": "EMIT_EVENT",
923
- "eventType": "COMMITTEE_DISBANDED",
924
- "payload": {
925
- "committeeId": "{{ context.committeeId }}",
926
- "reason": "{{ event.reason }}"
927
- }
928
- }
929
- ]
930
- }
931
- },
932
- "crossMachineRefs": {
933
- "board": {
934
- "machine": "corporate-board",
935
- "description": "Parent board",
936
- "foreignKey": "boardId"
937
- },
938
- "resolutions": {
939
- "machine": "corporate-resolution",
940
- "description": "Resolutions authorizing committee actions",
941
- "foreignKey": "committeeId"
942
- }
943
- },
944
- "metadata": {
945
- "author": "OttoChain",
946
- "license": "MIT",
947
- "tags": [
948
- "corporate",
949
- "governance",
950
- "committee",
951
- "board",
952
- "audit",
953
- "compensation"
954
- ],
955
- "documentation": "https://ottochain.dev/docs/corporate/committee"
956
- }
957
- }