@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,1298 +0,0 @@
1
- {
2
- "$schema": "https://ottochain.dev/schemas/state-machine-v1.json",
3
- "name": "corporate-shareholders",
4
- "version": "1.0.0",
5
- "category": "corporate-governance",
6
- "description": "Shareholder meeting state machine managing annual/special meetings, record dates, proxy periods, voting, and certification of results. Supports multiple share classes and cumulative voting.",
7
- "context": {
8
- "meetingId": {
9
- "type": "string",
10
- "description": "Unique identifier for this shareholder meeting"
11
- },
12
- "entityId": {
13
- "type": "string",
14
- "description": "Reference to parent corporate-entity"
15
- },
16
- "meetingType": {
17
- "type": "string",
18
- "enum": [
19
- "ANNUAL",
20
- "SPECIAL"
21
- ],
22
- "description": "Annual meetings are required; special meetings called for specific purposes"
23
- },
24
- "fiscalYear": {
25
- "type": "integer",
26
- "description": "Fiscal year for annual meetings"
27
- },
28
- "scheduledDate": {
29
- "type": "string",
30
- "format": "date-time"
31
- },
32
- "location": {
33
- "type": "object",
34
- "properties": {
35
- "physical": {
36
- "type": "string",
37
- "nullable": true
38
- },
39
- "virtualUrl": {
40
- "type": "string",
41
- "nullable": true
42
- },
43
- "isHybrid": {
44
- "type": "boolean",
45
- "default": false
46
- }
47
- }
48
- },
49
- "calledBy": {
50
- "type": "object",
51
- "properties": {
52
- "type": {
53
- "type": "string",
54
- "enum": [
55
- "BOARD",
56
- "SHAREHOLDERS",
57
- "COURT"
58
- ]
59
- },
60
- "resolutionRef": {
61
- "type": "string",
62
- "nullable": true
63
- },
64
- "shareholderPetitionRef": {
65
- "type": "string",
66
- "nullable": true
67
- },
68
- "courtOrderRef": {
69
- "type": "string",
70
- "nullable": true
71
- }
72
- }
73
- },
74
- "noticeInfo": {
75
- "type": "object",
76
- "properties": {
77
- "noticeSentDate": {
78
- "type": "string",
79
- "format": "date"
80
- },
81
- "noticeMethod": {
82
- "type": "string",
83
- "enum": [
84
- "MAIL",
85
- "EMAIL",
86
- "ELECTRONIC_ACCESS"
87
- ]
88
- },
89
- "minimumNoticeDays": {
90
- "type": "integer",
91
- "default": 10
92
- },
93
- "maximumNoticeDays": {
94
- "type": "integer",
95
- "default": 60
96
- }
97
- }
98
- },
99
- "recordDate": {
100
- "type": "object",
101
- "nullable": true,
102
- "properties": {
103
- "date": {
104
- "type": "string",
105
- "format": "date"
106
- },
107
- "setByBoardOn": {
108
- "type": "string",
109
- "format": "date"
110
- },
111
- "resolutionRef": {
112
- "type": "string"
113
- }
114
- }
115
- },
116
- "eligibleVoters": {
117
- "type": "array",
118
- "description": "Shareholders as of record date with their share counts",
119
- "items": {
120
- "type": "object",
121
- "properties": {
122
- "shareholderId": {
123
- "type": "string"
124
- },
125
- "name": {
126
- "type": "string"
127
- },
128
- "shareholdings": {
129
- "type": "array",
130
- "items": {
131
- "type": "object",
132
- "properties": {
133
- "shareClass": {
134
- "type": "string"
135
- },
136
- "shares": {
137
- "type": "integer"
138
- },
139
- "votes": {
140
- "type": "integer",
141
- "description": "Votes this holding represents"
142
- }
143
- }
144
- }
145
- },
146
- "totalVotes": {
147
- "type": "integer"
148
- },
149
- "proxyGrantedTo": {
150
- "type": "string",
151
- "nullable": true,
152
- "description": "Proxy holder ID if proxied"
153
- },
154
- "hasVoted": {
155
- "type": "boolean",
156
- "default": false
157
- }
158
- }
159
- }
160
- },
161
- "quorumRequirements": {
162
- "type": "object",
163
- "properties": {
164
- "type": {
165
- "type": "string",
166
- "enum": [
167
- "SHARES_REPRESENTED",
168
- "SHARES_OUTSTANDING"
169
- ]
170
- },
171
- "threshold": {
172
- "type": "number",
173
- "default": 0.5,
174
- "description": "Fraction required for quorum"
175
- },
176
- "sharesRequired": {
177
- "type": "integer"
178
- },
179
- "sharesRepresented": {
180
- "type": "integer",
181
- "default": 0
182
- },
183
- "quorumMet": {
184
- "type": "boolean",
185
- "default": false
186
- }
187
- }
188
- },
189
- "agenda": {
190
- "type": "array",
191
- "items": {
192
- "type": "object",
193
- "properties": {
194
- "itemId": {
195
- "type": "string"
196
- },
197
- "itemNumber": {
198
- "type": "integer"
199
- },
200
- "title": {
201
- "type": "string"
202
- },
203
- "description": {
204
- "type": "string"
205
- },
206
- "type": {
207
- "type": "string",
208
- "enum": [
209
- "DIRECTOR_ELECTION",
210
- "AUDITOR_RATIFICATION",
211
- "SAY_ON_PAY",
212
- "CHARTER_AMENDMENT",
213
- "MERGER",
214
- "STOCK_PLAN",
215
- "SHAREHOLDER_PROPOSAL",
216
- "OTHER"
217
- ]
218
- },
219
- "voteRequired": {
220
- "type": "string",
221
- "enum": [
222
- "PLURALITY",
223
- "MAJORITY_CAST",
224
- "MAJORITY_OUTSTANDING",
225
- "SUPERMAJORITY",
226
- "UNANIMOUS"
227
- ],
228
- "description": "Vote threshold for approval"
229
- },
230
- "supermajorityThreshold": {
231
- "type": "number",
232
- "nullable": true
233
- },
234
- "eligibleClasses": {
235
- "type": "array",
236
- "items": {
237
- "type": "string"
238
- },
239
- "description": "Share classes that can vote on this item"
240
- },
241
- "allowCumulativeVoting": {
242
- "type": "boolean",
243
- "default": false,
244
- "description": "For director elections"
245
- },
246
- "status": {
247
- "type": "string",
248
- "enum": [
249
- "PENDING",
250
- "VOTING",
251
- "CLOSED",
252
- "APPROVED",
253
- "REJECTED"
254
- ]
255
- }
256
- }
257
- }
258
- },
259
- "proxyPeriod": {
260
- "type": "object",
261
- "nullable": true,
262
- "properties": {
263
- "startDate": {
264
- "type": "string",
265
- "format": "date"
266
- },
267
- "endDate": {
268
- "type": "string",
269
- "format": "date-time",
270
- "description": "Usually meeting start time"
271
- },
272
- "proxyMaterials": {
273
- "type": "object",
274
- "properties": {
275
- "proxyStatementRef": {
276
- "type": "string"
277
- },
278
- "formOfProxyRef": {
279
- "type": "string"
280
- },
281
- "annualReportRef": {
282
- "type": "string",
283
- "nullable": true
284
- }
285
- }
286
- }
287
- }
288
- },
289
- "votes": {
290
- "type": "array",
291
- "items": {
292
- "type": "object",
293
- "properties": {
294
- "voteId": {
295
- "type": "string"
296
- },
297
- "agendaItemId": {
298
- "type": "string"
299
- },
300
- "voterId": {
301
- "type": "string",
302
- "description": "Shareholder or proxy holder ID"
303
- },
304
- "shareholderId": {
305
- "type": "string",
306
- "description": "Beneficial owner"
307
- },
308
- "shareClass": {
309
- "type": "string"
310
- },
311
- "votesFor": {
312
- "type": "integer",
313
- "default": 0
314
- },
315
- "votesAgainst": {
316
- "type": "integer",
317
- "default": 0
318
- },
319
- "votesAbstain": {
320
- "type": "integer",
321
- "default": 0
322
- },
323
- "votesWithhold": {
324
- "type": "integer",
325
- "default": 0,
326
- "description": "For director elections"
327
- },
328
- "cumulativeVoteAllocation": {
329
- "type": "object",
330
- "additionalProperties": {
331
- "type": "integer"
332
- },
333
- "nullable": true,
334
- "description": "For cumulative voting: candidate ID -> votes allocated"
335
- },
336
- "viaProxy": {
337
- "type": "boolean",
338
- "default": false
339
- },
340
- "timestamp": {
341
- "type": "string",
342
- "format": "date-time"
343
- }
344
- }
345
- }
346
- },
347
- "voteTallies": {
348
- "type": "array",
349
- "items": {
350
- "type": "object",
351
- "properties": {
352
- "agendaItemId": {
353
- "type": "string"
354
- },
355
- "forVotes": {
356
- "type": "integer",
357
- "default": 0
358
- },
359
- "againstVotes": {
360
- "type": "integer",
361
- "default": 0
362
- },
363
- "abstainVotes": {
364
- "type": "integer",
365
- "default": 0
366
- },
367
- "withholdVotes": {
368
- "type": "integer",
369
- "default": 0
370
- },
371
- "brokerNonVotes": {
372
- "type": "integer",
373
- "default": 0
374
- },
375
- "candidateVotes": {
376
- "type": "object",
377
- "additionalProperties": {
378
- "type": "integer"
379
- },
380
- "nullable": true,
381
- "description": "For director elections: candidate ID -> total votes"
382
- },
383
- "result": {
384
- "type": "string",
385
- "enum": [
386
- "APPROVED",
387
- "REJECTED",
388
- "PENDING"
389
- ]
390
- },
391
- "certified": {
392
- "type": "boolean",
393
- "default": false
394
- }
395
- }
396
- }
397
- },
398
- "inspectorOfElections": {
399
- "type": "object",
400
- "nullable": true,
401
- "properties": {
402
- "name": {
403
- "type": "string"
404
- },
405
- "company": {
406
- "type": "string",
407
- "nullable": true
408
- },
409
- "appointedBy": {
410
- "type": "string"
411
- },
412
- "appointmentDate": {
413
- "type": "string",
414
- "format": "date"
415
- }
416
- }
417
- },
418
- "sessionInfo": {
419
- "type": "object",
420
- "nullable": true,
421
- "properties": {
422
- "openedAt": {
423
- "type": "string",
424
- "format": "date-time"
425
- },
426
- "chairPerson": {
427
- "type": "string"
428
- },
429
- "secretaryPresent": {
430
- "type": "string"
431
- },
432
- "pollsOpenedAt": {
433
- "type": "string",
434
- "format": "date-time",
435
- "nullable": true
436
- },
437
- "pollsClosedAt": {
438
- "type": "string",
439
- "format": "date-time",
440
- "nullable": true
441
- },
442
- "adjournedAt": {
443
- "type": "string",
444
- "format": "date-time",
445
- "nullable": true
446
- },
447
- "minutesRef": {
448
- "type": "string",
449
- "nullable": true
450
- }
451
- }
452
- },
453
- "certification": {
454
- "type": "object",
455
- "nullable": true,
456
- "properties": {
457
- "certifiedAt": {
458
- "type": "string",
459
- "format": "date-time"
460
- },
461
- "certifiedBy": {
462
- "type": "string"
463
- },
464
- "certificateRef": {
465
- "type": "string"
466
- }
467
- }
468
- },
469
- "createdAt": {
470
- "type": "string",
471
- "format": "date-time"
472
- },
473
- "updatedAt": {
474
- "type": "string",
475
- "format": "date-time"
476
- }
477
- },
478
- "states": {
479
- "SCHEDULED": {
480
- "description": "Meeting has been scheduled but record date not yet set",
481
- "metadata": null
482
- },
483
- "RECORD_DATE_SET": {
484
- "description": "Record date established; eligible shareholders determined",
485
- "metadata": null
486
- },
487
- "PROXY_PERIOD": {
488
- "description": "Proxy materials distributed; shareholders may submit proxies",
489
- "metadata": null
490
- },
491
- "IN_SESSION": {
492
- "description": "Meeting is convened and in progress",
493
- "metadata": null
494
- },
495
- "VOTING": {
496
- "description": "Polls are open for voting on agenda items",
497
- "metadata": null
498
- },
499
- "CLOSED": {
500
- "description": "Meeting concluded; results certified",
501
- "metadata": null,
502
- "terminal": true
503
- }
504
- },
505
- "initialState": "SCHEDULED",
506
- "transitions": {
507
- "schedule_annual": {
508
- "from": null,
509
- "to": "SCHEDULED",
510
- "description": "Schedule an annual shareholder meeting",
511
- "event": {
512
- "name": "schedule_annual",
513
- "payload": {
514
- "meetingId": {
515
- "type": "string",
516
- "required": true
517
- },
518
- "entityId": {
519
- "type": "string",
520
- "required": true
521
- },
522
- "fiscalYear": {
523
- "type": "integer",
524
- "required": true
525
- },
526
- "scheduledDate": {
527
- "type": "string",
528
- "format": "date-time",
529
- "required": true
530
- },
531
- "location": {
532
- "type": "object"
533
- },
534
- "boardResolutionRef": {
535
- "type": "string",
536
- "required": true
537
- }
538
- }
539
- },
540
- "guards": [
541
- {
542
- "name": "boardApproved",
543
- "crossMachine": {
544
- "machine": "corporate-resolution",
545
- "instanceRef": "{{ event.boardResolutionRef }}",
546
- "requiredState": "EXECUTED"
547
- }
548
- }
549
- ],
550
- "effects": [
551
- {
552
- "type": "SET_CONTEXT",
553
- "path": "meetingId",
554
- "value": "{{ event.meetingId }}"
555
- },
556
- {
557
- "type": "SET_CONTEXT",
558
- "path": "entityId",
559
- "value": "{{ event.entityId }}"
560
- },
561
- {
562
- "type": "SET_CONTEXT",
563
- "path": "meetingType",
564
- "value": "ANNUAL"
565
- },
566
- {
567
- "type": "SET_CONTEXT",
568
- "path": "fiscalYear",
569
- "value": "{{ event.fiscalYear }}"
570
- },
571
- {
572
- "type": "SET_CONTEXT",
573
- "path": "scheduledDate",
574
- "value": "{{ event.scheduledDate }}"
575
- },
576
- {
577
- "type": "SET_CONTEXT",
578
- "path": "location",
579
- "value": "{{ event.location }}"
580
- },
581
- {
582
- "type": "SET_CONTEXT",
583
- "path": "calledBy",
584
- "value": {
585
- "type": "BOARD",
586
- "resolutionRef": "{{ event.boardResolutionRef }}"
587
- }
588
- },
589
- {
590
- "type": "EMIT_EVENT",
591
- "eventType": "SHAREHOLDER_MEETING_SCHEDULED",
592
- "payload": {
593
- "meetingId": "{{ event.meetingId }}",
594
- "type": "ANNUAL",
595
- "scheduledDate": "{{ event.scheduledDate }}"
596
- }
597
- }
598
- ]
599
- },
600
- "schedule_special": {
601
- "from": null,
602
- "to": "SCHEDULED",
603
- "description": "Schedule a special shareholder meeting",
604
- "event": {
605
- "name": "schedule_special",
606
- "payload": {
607
- "meetingId": {
608
- "type": "string",
609
- "required": true
610
- },
611
- "entityId": {
612
- "type": "string",
613
- "required": true
614
- },
615
- "scheduledDate": {
616
- "type": "string",
617
- "format": "date-time",
618
- "required": true
619
- },
620
- "location": {
621
- "type": "object"
622
- },
623
- "purpose": {
624
- "type": "string",
625
- "required": true,
626
- "description": "Specific purpose for special meeting"
627
- },
628
- "calledByType": {
629
- "type": "string",
630
- "enum": [
631
- "BOARD",
632
- "SHAREHOLDERS",
633
- "COURT"
634
- ],
635
- "required": true
636
- },
637
- "resolutionRef": {
638
- "type": "string"
639
- },
640
- "petitionRef": {
641
- "type": "string"
642
- }
643
- }
644
- },
645
- "effects": [
646
- {
647
- "type": "SET_CONTEXT",
648
- "path": "meetingId",
649
- "value": "{{ event.meetingId }}"
650
- },
651
- {
652
- "type": "SET_CONTEXT",
653
- "path": "entityId",
654
- "value": "{{ event.entityId }}"
655
- },
656
- {
657
- "type": "SET_CONTEXT",
658
- "path": "meetingType",
659
- "value": "SPECIAL"
660
- },
661
- {
662
- "type": "SET_CONTEXT",
663
- "path": "scheduledDate",
664
- "value": "{{ event.scheduledDate }}"
665
- },
666
- {
667
- "type": "SET_CONTEXT",
668
- "path": "calledBy.type",
669
- "value": "{{ event.calledByType }}"
670
- },
671
- {
672
- "type": "EMIT_EVENT",
673
- "eventType": "SPECIAL_MEETING_SCHEDULED",
674
- "payload": {
675
- "meetingId": "{{ event.meetingId }}",
676
- "purpose": "{{ event.purpose }}"
677
- }
678
- }
679
- ]
680
- },
681
- "set_record_date": {
682
- "from": "SCHEDULED",
683
- "to": "RECORD_DATE_SET",
684
- "description": "Board sets the record date for determining eligible shareholders",
685
- "event": {
686
- "name": "set_record_date",
687
- "payload": {
688
- "recordDate": {
689
- "type": "string",
690
- "format": "date",
691
- "required": true
692
- },
693
- "resolutionRef": {
694
- "type": "string",
695
- "required": true
696
- }
697
- }
698
- },
699
- "guards": [
700
- {
701
- "name": "validRecordDateTiming",
702
- "description": "Record date must be 10-60 days before meeting (per most state laws)",
703
- "expression": "true"
704
- }
705
- ],
706
- "effects": [
707
- {
708
- "type": "SET_CONTEXT",
709
- "path": "recordDate",
710
- "value": {
711
- "date": "{{ event.recordDate }}",
712
- "setByBoardOn": "{{ today() }}",
713
- "resolutionRef": "{{ event.resolutionRef }}"
714
- }
715
- },
716
- {
717
- "type": "EMIT_EVENT",
718
- "eventType": "RECORD_DATE_SET",
719
- "payload": {
720
- "meetingId": "{{ context.meetingId }}",
721
- "recordDate": "{{ event.recordDate }}"
722
- }
723
- }
724
- ]
725
- },
726
- "register_eligible_shareholders": {
727
- "from": "RECORD_DATE_SET",
728
- "to": "RECORD_DATE_SET",
729
- "description": "Register shareholders of record as of record date",
730
- "event": {
731
- "name": "register_eligible_shareholders",
732
- "payload": {
733
- "shareholders": {
734
- "type": "array",
735
- "required": true,
736
- "items": {
737
- "type": "object",
738
- "properties": {
739
- "shareholderId": {
740
- "type": "string"
741
- },
742
- "name": {
743
- "type": "string"
744
- },
745
- "shareholdings": {
746
- "type": "array"
747
- }
748
- }
749
- }
750
- },
751
- "totalSharesOutstanding": {
752
- "type": "integer",
753
- "required": true
754
- }
755
- }
756
- },
757
- "effects": [
758
- {
759
- "type": "SET_CONTEXT",
760
- "path": "eligibleVoters",
761
- "value": "{{ event.shareholders }}"
762
- },
763
- {
764
- "type": "SET_CONTEXT",
765
- "path": "quorumRequirements.sharesRequired",
766
- "value": "{{ Math.ceil(event.totalSharesOutstanding * 0.5) }}"
767
- }
768
- ]
769
- },
770
- "open_proxy_period": {
771
- "from": "RECORD_DATE_SET",
772
- "to": "PROXY_PERIOD",
773
- "description": "Distribute proxy materials and open proxy solicitation period",
774
- "event": {
775
- "name": "open_proxy_period",
776
- "payload": {
777
- "startDate": {
778
- "type": "string",
779
- "format": "date",
780
- "required": true
781
- },
782
- "proxyStatementRef": {
783
- "type": "string",
784
- "required": true
785
- },
786
- "formOfProxyRef": {
787
- "type": "string",
788
- "required": true
789
- },
790
- "annualReportRef": {
791
- "type": "string"
792
- },
793
- "agenda": {
794
- "type": "array",
795
- "required": true
796
- }
797
- }
798
- },
799
- "effects": [
800
- {
801
- "type": "SET_CONTEXT",
802
- "path": "proxyPeriod",
803
- "value": {
804
- "startDate": "{{ event.startDate }}",
805
- "endDate": "{{ context.scheduledDate }}",
806
- "proxyMaterials": {
807
- "proxyStatementRef": "{{ event.proxyStatementRef }}",
808
- "formOfProxyRef": "{{ event.formOfProxyRef }}",
809
- "annualReportRef": "{{ event.annualReportRef }}"
810
- }
811
- }
812
- },
813
- {
814
- "type": "SET_CONTEXT",
815
- "path": "agenda",
816
- "value": "{{ event.agenda }}"
817
- },
818
- {
819
- "type": "SET_CONTEXT",
820
- "path": "noticeInfo.noticeSentDate",
821
- "value": "{{ event.startDate }}"
822
- },
823
- {
824
- "type": "EMIT_EVENT",
825
- "eventType": "PROXY_PERIOD_OPENED",
826
- "payload": {
827
- "meetingId": "{{ context.meetingId }}",
828
- "proxyStatementRef": "{{ event.proxyStatementRef }}"
829
- }
830
- }
831
- ]
832
- },
833
- "add_agenda_item": {
834
- "from": [
835
- "SCHEDULED",
836
- "RECORD_DATE_SET",
837
- "PROXY_PERIOD"
838
- ],
839
- "to": null,
840
- "description": "Add an item to the meeting agenda (e.g., shareholder proposal)",
841
- "event": {
842
- "name": "add_agenda_item",
843
- "payload": {
844
- "itemId": {
845
- "type": "string",
846
- "required": true
847
- },
848
- "title": {
849
- "type": "string",
850
- "required": true
851
- },
852
- "description": {
853
- "type": "string"
854
- },
855
- "type": {
856
- "type": "string",
857
- "required": true
858
- },
859
- "voteRequired": {
860
- "type": "string",
861
- "required": true
862
- },
863
- "eligibleClasses": {
864
- "type": "array",
865
- "items": {
866
- "type": "string"
867
- }
868
- },
869
- "allowCumulativeVoting": {
870
- "type": "boolean",
871
- "default": false
872
- }
873
- }
874
- },
875
- "effects": [
876
- {
877
- "type": "APPEND_ARRAY",
878
- "path": "agenda",
879
- "value": {
880
- "itemId": "{{ event.itemId }}",
881
- "itemNumber": "{{ context.agenda.length + 1 }}",
882
- "title": "{{ event.title }}",
883
- "description": "{{ event.description }}",
884
- "type": "{{ event.type }}",
885
- "voteRequired": "{{ event.voteRequired }}",
886
- "eligibleClasses": "{{ event.eligibleClasses }}",
887
- "allowCumulativeVoting": "{{ event.allowCumulativeVoting }}",
888
- "status": "PENDING"
889
- }
890
- }
891
- ]
892
- },
893
- "open_meeting": {
894
- "from": "PROXY_PERIOD",
895
- "to": "IN_SESSION",
896
- "description": "Convene the shareholder meeting",
897
- "event": {
898
- "name": "open_meeting",
899
- "payload": {
900
- "openedAt": {
901
- "type": "string",
902
- "format": "date-time",
903
- "required": true
904
- },
905
- "chairPerson": {
906
- "type": "string",
907
- "required": true
908
- },
909
- "secretaryPresent": {
910
- "type": "string",
911
- "required": true
912
- },
913
- "inspectorOfElections": {
914
- "type": "object"
915
- },
916
- "initialQuorumCount": {
917
- "type": "integer",
918
- "required": true
919
- }
920
- }
921
- },
922
- "guards": [
923
- {
924
- "name": "quorumPresentOrRepresented",
925
- "description": "Must have quorum to proceed",
926
- "expression": "event.initialQuorumCount >= context.quorumRequirements.sharesRequired"
927
- }
928
- ],
929
- "effects": [
930
- {
931
- "type": "SET_CONTEXT",
932
- "path": "sessionInfo",
933
- "value": {
934
- "openedAt": "{{ event.openedAt }}",
935
- "chairPerson": "{{ event.chairPerson }}",
936
- "secretaryPresent": "{{ event.secretaryPresent }}"
937
- }
938
- },
939
- {
940
- "type": "SET_CONTEXT",
941
- "path": "inspectorOfElections",
942
- "value": "{{ event.inspectorOfElections }}"
943
- },
944
- {
945
- "type": "SET_CONTEXT",
946
- "path": "quorumRequirements.sharesRepresented",
947
- "value": "{{ event.initialQuorumCount }}"
948
- },
949
- {
950
- "type": "SET_CONTEXT",
951
- "path": "quorumRequirements.quorumMet",
952
- "value": true
953
- },
954
- {
955
- "type": "EMIT_EVENT",
956
- "eventType": "SHAREHOLDER_MEETING_OPENED",
957
- "payload": {
958
- "meetingId": "{{ context.meetingId }}",
959
- "sharesRepresented": "{{ event.initialQuorumCount }}"
960
- }
961
- }
962
- ]
963
- },
964
- "open_polls": {
965
- "from": "IN_SESSION",
966
- "to": "VOTING",
967
- "description": "Open polls for voting on agenda items",
968
- "event": {
969
- "name": "open_polls",
970
- "payload": {
971
- "pollsOpenedAt": {
972
- "type": "string",
973
- "format": "date-time",
974
- "required": true
975
- }
976
- }
977
- },
978
- "effects": [
979
- {
980
- "type": "SET_CONTEXT",
981
- "path": "sessionInfo.pollsOpenedAt",
982
- "value": "{{ event.pollsOpenedAt }}"
983
- },
984
- {
985
- "type": "UPDATE_ARRAY_ALL",
986
- "path": "agenda",
987
- "updates": {
988
- "status": "VOTING"
989
- }
990
- }
991
- ]
992
- },
993
- "cast_vote": {
994
- "from": "VOTING",
995
- "to": "VOTING",
996
- "description": "Record a vote from a shareholder or proxy holder",
997
- "event": {
998
- "name": "cast_vote",
999
- "payload": {
1000
- "voteId": {
1001
- "type": "string",
1002
- "required": true
1003
- },
1004
- "agendaItemId": {
1005
- "type": "string",
1006
- "required": true
1007
- },
1008
- "voterId": {
1009
- "type": "string",
1010
- "required": true
1011
- },
1012
- "shareholderId": {
1013
- "type": "string",
1014
- "required": true
1015
- },
1016
- "shareClass": {
1017
- "type": "string",
1018
- "required": true
1019
- },
1020
- "votesFor": {
1021
- "type": "integer",
1022
- "default": 0
1023
- },
1024
- "votesAgainst": {
1025
- "type": "integer",
1026
- "default": 0
1027
- },
1028
- "votesAbstain": {
1029
- "type": "integer",
1030
- "default": 0
1031
- },
1032
- "votesWithhold": {
1033
- "type": "integer",
1034
- "default": 0
1035
- },
1036
- "cumulativeVoteAllocation": {
1037
- "type": "object",
1038
- "nullable": true
1039
- },
1040
- "viaProxy": {
1041
- "type": "boolean",
1042
- "default": false
1043
- }
1044
- }
1045
- },
1046
- "guards": [
1047
- {
1048
- "name": "isEligibleVoter",
1049
- "expression": "context.eligibleVoters.some(v => v.shareholderId === event.shareholderId)"
1050
- },
1051
- {
1052
- "name": "hasNotAlreadyVoted",
1053
- "description": "Shareholder cannot vote twice on same item",
1054
- "expression": "!context.votes.some(v => v.shareholderId === event.shareholderId && v.agendaItemId === event.agendaItemId)"
1055
- },
1056
- {
1057
- "name": "validProxyIfApplicable",
1058
- "description": "If voting via proxy, proxy must be valid",
1059
- "expression": "!event.viaProxy || true",
1060
- "crossMachine": {
1061
- "machine": "corporate-proxy",
1062
- "condition": "event.viaProxy",
1063
- "query": "findByGrantor(event.shareholderId)",
1064
- "requiredState": "ACTIVE"
1065
- }
1066
- }
1067
- ],
1068
- "effects": [
1069
- {
1070
- "type": "APPEND_ARRAY",
1071
- "path": "votes",
1072
- "value": {
1073
- "voteId": "{{ event.voteId }}",
1074
- "agendaItemId": "{{ event.agendaItemId }}",
1075
- "voterId": "{{ event.voterId }}",
1076
- "shareholderId": "{{ event.shareholderId }}",
1077
- "shareClass": "{{ event.shareClass }}",
1078
- "votesFor": "{{ event.votesFor }}",
1079
- "votesAgainst": "{{ event.votesAgainst }}",
1080
- "votesAbstain": "{{ event.votesAbstain }}",
1081
- "votesWithhold": "{{ event.votesWithhold }}",
1082
- "cumulativeVoteAllocation": "{{ event.cumulativeVoteAllocation }}",
1083
- "viaProxy": "{{ event.viaProxy }}",
1084
- "timestamp": "{{ now() }}"
1085
- }
1086
- },
1087
- {
1088
- "type": "UPDATE_ARRAY_ITEM",
1089
- "path": "eligibleVoters",
1090
- "matchKey": "shareholderId",
1091
- "matchValue": "{{ event.shareholderId }}",
1092
- "updates": {
1093
- "hasVoted": true
1094
- }
1095
- }
1096
- ]
1097
- },
1098
- "close_polls": {
1099
- "from": "VOTING",
1100
- "to": "IN_SESSION",
1101
- "description": "Close polls and begin vote tabulation",
1102
- "event": {
1103
- "name": "close_polls",
1104
- "payload": {
1105
- "pollsClosedAt": {
1106
- "type": "string",
1107
- "format": "date-time",
1108
- "required": true
1109
- }
1110
- }
1111
- },
1112
- "effects": [
1113
- {
1114
- "type": "SET_CONTEXT",
1115
- "path": "sessionInfo.pollsClosedAt",
1116
- "value": "{{ event.pollsClosedAt }}"
1117
- },
1118
- {
1119
- "type": "UPDATE_ARRAY_ALL",
1120
- "path": "agenda",
1121
- "updates": {
1122
- "status": "CLOSED"
1123
- }
1124
- },
1125
- {
1126
- "type": "COMPUTE_TALLIES",
1127
- "description": "Aggregate votes by agenda item",
1128
- "targetPath": "voteTallies"
1129
- }
1130
- ]
1131
- },
1132
- "certify_results": {
1133
- "from": "IN_SESSION",
1134
- "to": "CLOSED",
1135
- "description": "Inspector of elections certifies vote results",
1136
- "event": {
1137
- "name": "certify_results",
1138
- "payload": {
1139
- "certifiedAt": {
1140
- "type": "string",
1141
- "format": "date-time",
1142
- "required": true
1143
- },
1144
- "certifiedBy": {
1145
- "type": "string",
1146
- "required": true
1147
- },
1148
- "certificateRef": {
1149
- "type": "string",
1150
- "required": true
1151
- },
1152
- "results": {
1153
- "type": "array",
1154
- "items": {
1155
- "type": "object",
1156
- "properties": {
1157
- "agendaItemId": {
1158
- "type": "string"
1159
- },
1160
- "result": {
1161
- "type": "string",
1162
- "enum": [
1163
- "APPROVED",
1164
- "REJECTED"
1165
- ]
1166
- }
1167
- }
1168
- }
1169
- },
1170
- "minutesRef": {
1171
- "type": "string"
1172
- }
1173
- }
1174
- },
1175
- "effects": [
1176
- {
1177
- "type": "SET_CONTEXT",
1178
- "path": "certification",
1179
- "value": {
1180
- "certifiedAt": "{{ event.certifiedAt }}",
1181
- "certifiedBy": "{{ event.certifiedBy }}",
1182
- "certificateRef": "{{ event.certificateRef }}"
1183
- }
1184
- },
1185
- {
1186
- "type": "SET_CONTEXT",
1187
- "path": "sessionInfo.adjournedAt",
1188
- "value": "{{ event.certifiedAt }}"
1189
- },
1190
- {
1191
- "type": "SET_CONTEXT",
1192
- "path": "sessionInfo.minutesRef",
1193
- "value": "{{ event.minutesRef }}"
1194
- },
1195
- {
1196
- "type": "FOR_EACH",
1197
- "array": "{{ event.results }}",
1198
- "do": {
1199
- "type": "UPDATE_ARRAY_ITEM",
1200
- "path": "voteTallies",
1201
- "matchKey": "agendaItemId",
1202
- "matchValue": "{{ item.agendaItemId }}",
1203
- "updates": {
1204
- "result": "{{ item.result }}",
1205
- "certified": true
1206
- }
1207
- }
1208
- },
1209
- {
1210
- "type": "EMIT_EVENT",
1211
- "eventType": "MEETING_RESULTS_CERTIFIED",
1212
- "payload": {
1213
- "meetingId": "{{ context.meetingId }}",
1214
- "results": "{{ event.results }}"
1215
- }
1216
- }
1217
- ]
1218
- },
1219
- "adjourn_without_action": {
1220
- "from": [
1221
- "IN_SESSION",
1222
- "VOTING"
1223
- ],
1224
- "to": "CLOSED",
1225
- "description": "Adjourn meeting without completing agenda (e.g., quorum lost)",
1226
- "event": {
1227
- "name": "adjourn_without_action",
1228
- "payload": {
1229
- "adjournedAt": {
1230
- "type": "string",
1231
- "format": "date-time",
1232
- "required": true
1233
- },
1234
- "reason": {
1235
- "type": "string",
1236
- "required": true
1237
- },
1238
- "adjournedTo": {
1239
- "type": "string",
1240
- "format": "date-time",
1241
- "nullable": true
1242
- }
1243
- }
1244
- },
1245
- "effects": [
1246
- {
1247
- "type": "SET_CONTEXT",
1248
- "path": "sessionInfo.adjournedAt",
1249
- "value": "{{ event.adjournedAt }}"
1250
- },
1251
- {
1252
- "type": "EMIT_EVENT",
1253
- "eventType": "MEETING_ADJOURNED",
1254
- "payload": {
1255
- "meetingId": "{{ context.meetingId }}",
1256
- "reason": "{{ event.reason }}",
1257
- "adjournedTo": "{{ event.adjournedTo }}"
1258
- }
1259
- }
1260
- ]
1261
- }
1262
- },
1263
- "crossMachineRefs": {
1264
- "entity": {
1265
- "machine": "corporate-entity",
1266
- "description": "Parent corporate entity",
1267
- "foreignKey": "entityId"
1268
- },
1269
- "proxies": {
1270
- "machine": "corporate-proxy",
1271
- "description": "Proxy grants for this meeting",
1272
- "foreignKey": "meetingId"
1273
- },
1274
- "resolutions": {
1275
- "machine": "corporate-resolution",
1276
- "description": "Resolutions resulting from meeting votes",
1277
- "foreignKey": "meetingId"
1278
- },
1279
- "securities": {
1280
- "machine": "corporate-securities",
1281
- "description": "Share records for determining voting rights",
1282
- "foreignKey": "entityId"
1283
- }
1284
- },
1285
- "metadata": {
1286
- "author": "OttoChain",
1287
- "license": "MIT",
1288
- "tags": [
1289
- "corporate",
1290
- "governance",
1291
- "shareholders",
1292
- "voting",
1293
- "meetings",
1294
- "proxy"
1295
- ],
1296
- "documentation": "https://ottochain.dev/docs/corporate/shareholders"
1297
- }
1298
- }