edoxen 0.7.2 → 0.8.1

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +26 -1
  3. data/.rubocop_todo.yml +1 -1
  4. data/CHANGELOG.md +133 -0
  5. data/README.adoc +414 -182
  6. data/edoxen.gemspec +10 -10
  7. data/lib/edoxen/action.rb +5 -4
  8. data/lib/edoxen/agenda.rb +4 -7
  9. data/lib/edoxen/agenda_item.rb +12 -5
  10. data/lib/edoxen/approval.rb +2 -2
  11. data/lib/edoxen/attendance.rb +16 -10
  12. data/lib/edoxen/body_vocabulary_entry.rb +24 -0
  13. data/lib/edoxen/body_vocabulary_host.rb +40 -0
  14. data/lib/edoxen/cli.rb +175 -115
  15. data/lib/edoxen/consideration.rb +6 -4
  16. data/lib/edoxen/contact.rb +35 -0
  17. data/lib/edoxen/contact_collection.rb +26 -0
  18. data/lib/edoxen/contact_identifier.rb +13 -0
  19. data/lib/edoxen/contact_method.rb +16 -0
  20. data/lib/edoxen/date_time_range.rb +16 -0
  21. data/lib/edoxen/deadline.rb +1 -1
  22. data/lib/edoxen/decision.rb +57 -0
  23. data/lib/edoxen/decision_collection.rb +10 -0
  24. data/lib/edoxen/decision_date.rb +9 -0
  25. data/lib/edoxen/decision_metadata.rb +27 -0
  26. data/lib/edoxen/decision_relation.rb +11 -0
  27. data/lib/edoxen/declaration.rb +25 -0
  28. data/lib/edoxen/entity_ref.rb +74 -0
  29. data/lib/edoxen/enums.rb +123 -9
  30. data/lib/edoxen/error.rb +1 -1
  31. data/lib/edoxen/extension_attribute.rb +78 -0
  32. data/lib/edoxen/host_ref.rb +1 -1
  33. data/lib/edoxen/link_checker.rb +143 -34
  34. data/lib/edoxen/localized_name.rb +16 -0
  35. data/lib/edoxen/localized_string.rb +22 -0
  36. data/lib/edoxen/meeting.rb +34 -42
  37. data/lib/edoxen/meeting_collection.rb +1 -2
  38. data/lib/edoxen/meeting_collection_metadata.rb +4 -2
  39. data/lib/edoxen/meeting_component.rb +37 -0
  40. data/lib/edoxen/meeting_extension.rb +25 -0
  41. data/lib/edoxen/meeting_identifier.rb +1 -1
  42. data/lib/edoxen/meeting_series.rb +26 -0
  43. data/lib/edoxen/minutes.rb +3 -4
  44. data/lib/edoxen/minutes_section.rb +12 -13
  45. data/lib/edoxen/motion.rb +51 -0
  46. data/lib/edoxen/name.rb +29 -0
  47. data/lib/edoxen/officer.rb +19 -0
  48. data/lib/edoxen/officers_host.rb +19 -0
  49. data/lib/edoxen/person.rb +5 -9
  50. data/lib/edoxen/physical_venue.rb +15 -0
  51. data/lib/edoxen/recurrence.rb +27 -0
  52. data/lib/edoxen/recurrence_by_day.rb +10 -0
  53. data/lib/edoxen/reference.rb +1 -1
  54. data/lib/edoxen/reference_data.rb +34 -44
  55. data/lib/edoxen/schema_validator.rb +3 -4
  56. data/lib/edoxen/source_url.rb +4 -4
  57. data/lib/edoxen/statement.rb +21 -0
  58. data/lib/edoxen/structured_identifier.rb +2 -2
  59. data/lib/edoxen/topic.rb +39 -0
  60. data/lib/edoxen/topic_asset.rb +14 -0
  61. data/lib/edoxen/topic_document.rb +16 -0
  62. data/lib/edoxen/venue.rb +79 -0
  63. data/lib/edoxen/venue_collection.rb +18 -0
  64. data/lib/edoxen/venue_validator.rb +74 -0
  65. data/lib/edoxen/version.rb +1 -1
  66. data/lib/edoxen/virtual_venue.rb +15 -0
  67. data/lib/edoxen/vote_record.rb +17 -13
  68. data/lib/edoxen/voting.rb +45 -0
  69. data/lib/edoxen/voting_counts.rb +23 -0
  70. data/lib/edoxen.rb +47 -15
  71. data/schema/edoxen.yaml +1376 -246
  72. data/schema/meeting.yaml +1207 -272
  73. data/sig/edoxen.rbs +581 -1
  74. metadata +62 -22
  75. data/lib/edoxen/_metadata.rb.deprecated +0 -57
  76. data/lib/edoxen/localization.rb +0 -18
  77. data/lib/edoxen/location.rb +0 -15
  78. data/lib/edoxen/meeting_localization.rb +0 -15
  79. data/lib/edoxen/resolution.rb +0 -43
  80. data/lib/edoxen/resolution_collection.rb +0 -10
  81. data/lib/edoxen/resolution_date.rb +0 -11
  82. data/lib/edoxen/resolution_metadata.rb +0 -30
  83. data/lib/edoxen/resolution_relation.rb +0 -11
  84. data/lib/edoxen/resolution_set.rb +0 -17
  85. data/lib/edoxen/schedule_item.rb +0 -27
  86. data/lib/edoxen/schedule_item_localization.rb +0 -21
data/schema/edoxen.yaml CHANGED
@@ -1,237 +1,260 @@
1
1
  ---
2
- $schema: "http://json-schema.org/draft-07/schema#"
3
- $id: "https://github.com/edoxen/edoxen/schema/edoxen.yaml"
4
- title: "Edoxen Resolution Collection Schema"
2
+ "$schema": http://json-schema.org/draft-07/schema#
3
+ "$id": https://github.com/edoxen/edoxen-model/schema/decision-collection.yaml
4
+ title: Edoxen Decision Collection Schema
5
5
  description: |
6
- Schema for validating Edoxen ResolutionCollection YAML files.
6
+ Schema for validating Edoxen decision-side YAML files.
7
+
8
+ Accepts three top-level document kinds via `oneOf`:
9
+
10
+ * `DecisionCollection` — the formal outcomes adopted by a Meeting.
11
+ * `ContactCollection` — a scoped-URN registry of Contacts.
12
+ * `VenueCollection` — a scoped-URN registry of Venues.
7
13
 
8
14
  Mirrors the canonical LutaML information model in
9
15
  https://github.com/edoxen/edoxen-model/tree/main/models .
10
16
 
11
- The enum constants declared under `$defs` (ActionType,
12
- ConsiderationType, ApprovalType, ApprovalDegree, ResolutionType,
13
- ResolutionDateType, ResolutionRelationType, UrlKind) are the
14
- authoritative wire values. `spec/edoxen/schema_enum_sync_spec.rb`
15
- asserts each one is character-for-character identical to the
16
- corresponding `Edoxen::Enums::*` frozen array.
17
+ The enum constants declared under `$defs` are the authoritative wire
18
+ values. `spec/edoxen/schema_enum_sync_spec.rb` asserts each one is
19
+ character-for-character identical to the corresponding `Edoxen::Enums::*`
20
+ frozen array.
17
21
 
18
22
  Trade-off: json_schemer's `valid_values` is not populated when an
19
23
  `enum` is reached via `$ref`, so the validator's enum-violation
20
24
  message degrades to "value ... is not one of: (see schema)". This
21
25
  is documented in `Edoxen::SchemaValidator#format_message`.
22
26
  type: object
23
- additionalProperties: false
24
-
25
- properties:
26
- metadata:
27
- $ref: "#/$defs/ResolutionMetadata"
28
- resolutions:
29
- type: array
30
- items:
31
- $ref: "#/$defs/Resolution"
32
-
33
- required:
34
- - resolutions
35
-
36
- $defs:
37
-
38
- # ====================================================================
39
- # Identifiers and references.
40
- # ====================================================================
41
-
27
+ oneOf:
28
+ - "$ref": "#/$defs/DecisionCollection"
29
+ - "$ref": "#/$defs/ContactCollection"
30
+ - "$ref": "#/$defs/VenueCollection"
31
+ "$defs":
32
+ DecisionCollection:
33
+ type: object
34
+ description: |
35
+ Top-level container for a published decision collection: metadata
36
+ plus the list of decisions.
37
+ additionalProperties: false
38
+ properties:
39
+ metadata:
40
+ "$ref": "#/$defs/DecisionMetadata"
41
+ decisions:
42
+ type: array
43
+ items:
44
+ "$ref": "#/$defs/Decision"
45
+ required:
46
+ - decisions
42
47
  StructuredIdentifier:
43
48
  type: object
44
- description: "A resolution identifier (prefix + number). A Resolution may carry 1..* of these."
49
+ description: An identifier (prefix + number). A Decision carries 1..* of these.
45
50
  additionalProperties: false
46
- required: [prefix, number]
51
+ required:
52
+ - prefix
53
+ - number
47
54
  properties:
48
55
  prefix:
49
56
  type: string
50
- description: "Authority prefix, e.g. 'ISO', 'OIML', 'CIML'."
51
57
  number:
52
58
  type: string
53
- description: "Resolution number issued under that prefix."
54
-
59
+ EntityRef:
60
+ type: object
61
+ description: |
62
+ Typed cross-reference between entities (1.0, TODO.refactor/1.0-design).
63
+ Exactly one of `urn`, `identifier`, or `local_ref` should be set;
64
+ the gem's `EntityRef#valid?` enforces this in Ruby.
65
+ additionalProperties: false
66
+ properties:
67
+ urn:
68
+ type: string
69
+ identifier:
70
+ "$ref": "#/$defs/StructuredIdentifier"
71
+ local_ref:
72
+ type: string
73
+ kind:
74
+ type: string
75
+ role:
76
+ type: string
77
+ note:
78
+ type: string
55
79
  MeetingIdentifier:
56
80
  type: object
57
- description: "Identifies the meeting a Resolution belongs to."
81
+ description: Identifies the meeting a Decision belongs to.
58
82
  additionalProperties: false
59
83
  properties:
60
84
  venue:
61
85
  type: string
62
- description: "Meeting venue name (free text)."
63
86
  date:
64
87
  type: string
65
88
  format: date
66
- description: "Meeting date."
67
-
68
89
  Url:
69
90
  type: object
70
- description: "URL with a kind (access / report) and an optional format hint."
91
+ description: URL with a kind (access / report) and an optional format hint.
71
92
  additionalProperties: false
72
- required: [kind, ref]
93
+ required:
94
+ - kind
95
+ - ref
73
96
  properties:
74
97
  kind:
75
- $ref: "#/$defs/UrlKind"
98
+ "$ref": "#/$defs/UrlKind"
76
99
  ref:
77
100
  type: string
78
101
  format:
79
102
  type: string
80
-
81
- ResolutionRelation:
103
+ DecisionRelation:
82
104
  type: object
83
- description: "Directed relation between two resolutions identified by their StructuredIdentifier."
105
+ description: Directed relation between two decisions identified by their StructuredIdentifier.
84
106
  additionalProperties: false
85
- required: [source, destination, type]
107
+ required:
108
+ - source
109
+ - destination
110
+ - type
86
111
  properties:
87
112
  source:
88
- $ref: "#/$defs/StructuredIdentifier"
113
+ "$ref": "#/$defs/StructuredIdentifier"
89
114
  destination:
90
- $ref: "#/$defs/StructuredIdentifier"
115
+ "$ref": "#/$defs/StructuredIdentifier"
91
116
  type:
92
- $ref: "#/$defs/ResolutionRelationType"
93
-
94
- # ====================================================================
95
- # Date carriers.
96
- # ====================================================================
97
-
98
- ResolutionDate:
117
+ "$ref": "#/$defs/DecisionRelationType"
118
+ DecisionDate:
99
119
  type: object
100
- description: "Date with semantic kind (adoption / drafted / discussed)."
120
+ description: Date with semantic kind (adoption / drafted / discussed).
101
121
  additionalProperties: false
102
- required: [date, type]
122
+ required:
123
+ - date
124
+ - type
103
125
  properties:
104
126
  date:
105
127
  type: string
106
128
  format: date
107
- description: "The date itself."
108
129
  type:
109
- $ref: "#/$defs/ResolutionDateType"
110
-
111
- # ====================================================================
112
- # Per-localization sub-structures. Each is owned by exactly one
113
- # Language; the language_code discriminator lives on Localization.
114
- # ====================================================================
115
-
130
+ "$ref": "#/$defs/DecisionDateType"
116
131
  Action:
117
132
  type: object
118
- description: "A verb + one effective date + human-readable message."
133
+ description: A verb + one effective date + human-readable message.
119
134
  additionalProperties: false
120
- required: [type, message, date_effective]
135
+ required:
136
+ - type
137
+ - message
138
+ - date_effective
121
139
  properties:
122
140
  type:
123
- $ref: "#/$defs/ActionType"
141
+ "$ref": "#/$defs/ActionType"
124
142
  date_effective:
125
- $ref: "#/$defs/ResolutionDate"
143
+ "$ref": "#/$defs/DecisionDate"
126
144
  message:
127
- type: string
128
-
145
+ type: array
146
+ items:
147
+ "$ref": "#/$defs/LocalizedString"
129
148
  Approval:
130
149
  type: object
131
- description: "Approval record: vote type, consensus degree, date, message."
150
+ description: 'Approval record: vote type, consensus degree, date, message.'
132
151
  additionalProperties: false
133
- required: [type, degree, date]
152
+ required:
153
+ - type
154
+ - degree
155
+ - date
134
156
  properties:
135
157
  type:
136
- $ref: "#/$defs/ApprovalType"
158
+ "$ref": "#/$defs/ApprovalType"
137
159
  degree:
138
- $ref: "#/$defs/ApprovalDegree"
160
+ "$ref": "#/$defs/ApprovalDegree"
139
161
  date:
140
- $ref: "#/$defs/ResolutionDate"
162
+ "$ref": "#/$defs/DecisionDate"
141
163
  message:
142
- type: string
143
-
164
+ type: array
165
+ items:
166
+ "$ref": "#/$defs/LocalizedString"
144
167
  Consideration:
145
168
  type: object
146
- description: "The basis for a Resolution: a verb + one effective date + reasoning."
169
+ description: 'The basis for a Decision: a verb + one effective date + reasoning.'
147
170
  additionalProperties: false
148
- required: [type, message, date_effective]
171
+ required:
172
+ - type
173
+ - message
174
+ - date_effective
149
175
  properties:
150
176
  type:
151
- $ref: "#/$defs/ConsiderationType"
177
+ "$ref": "#/$defs/ConsiderationType"
152
178
  date_effective:
153
- $ref: "#/$defs/ResolutionDate"
179
+ "$ref": "#/$defs/DecisionDate"
154
180
  message:
155
- type: string
156
-
157
- Localization:
181
+ type: array
182
+ items:
183
+ "$ref": "#/$defs/LocalizedString"
184
+ LocalizedString:
158
185
  type: object
159
186
  description: |
160
- A monolingual rendering of a Resolution. Mirrors the glossarist
161
- LocalizedConcept pattern: language-agnostic fields live on the
162
- parent Resolution; per-language content lives here.
187
+ One language-specific value of a translatable String field.
188
+ `spelling` is an ISO 24229 spelling/conversion system code.
189
+ Always verbose — single-language data uses the same
190
+ `[{ spelling, value }]` shape as multi-language data.
163
191
  additionalProperties: false
164
- required: [language_code]
192
+ required:
193
+ - spelling
194
+ - value
165
195
  properties:
166
- language_code:
167
- type: string
168
- pattern: "^[a-z]{3}$"
169
- description: "ISO 639-3 three-letter language code (eng, fra, deu, spa, jpn, ...)."
170
- script:
171
- type: string
172
- pattern: "^[A-Z][a-z]{3}$"
173
- description: "ISO 15924 four-letter script code (Latn, Cyrl, Hant, Arab)."
174
- title:
175
- type: string
176
- subject:
177
- type: string
178
- message:
196
+ spelling:
179
197
  type: string
180
- considering:
198
+ value:
181
199
  type: string
182
- considerations:
183
- type: array
184
- items:
185
- $ref: "#/$defs/Consideration"
186
- approvals:
200
+ extensions:
187
201
  type: array
188
202
  items:
189
- $ref: "#/$defs/Approval"
190
- actions:
203
+ "$ref": "#/$defs/MeetingExtension"
204
+ LocalizedName:
205
+ type: object
206
+ description: |
207
+ One language-specific value of a translatable Name field.
208
+ Mirrors LocalizedString but carries a structured Name.
209
+ additionalProperties: false
210
+ required:
211
+ - spelling
212
+ - value
213
+ properties:
214
+ spelling:
215
+ type: string
216
+ value:
217
+ "$ref": "#/$defs/Name"
218
+ extensions:
191
219
  type: array
192
220
  items:
193
- $ref: "#/$defs/Action"
194
-
221
+ "$ref": "#/$defs/MeetingExtension"
195
222
  SourceUrl:
196
223
  type: object
197
- description: "Per-language canonical source URL (e.g. one PDF per language)."
224
+ description: Per-spelling canonical source URL (e.g. one PDF per language).
198
225
  additionalProperties: false
199
- required: [ref, format, language_code]
226
+ required:
227
+ - ref
200
228
  properties:
201
229
  ref:
202
230
  type: string
203
- description: "The URL string."
204
231
  format:
205
232
  type: string
206
- description: "Document format, e.g. 'pdf', 'html'."
207
- language_code:
233
+ spelling:
208
234
  type: string
209
- pattern: "^[a-z]{3}$"
235
+ description: ISO 24229 spelling/conversion system code
210
236
  kind:
211
- type: string
212
- description: "Optional discriminator (agenda_pdf, minutes_pdf, ...)."
213
- enum: [agenda_pdf, minutes_pdf, resolutions_pdf, report_pdf, register_url, landing_page]
214
-
215
- # ====================================================================
216
- # Top-level structures.
217
- # ====================================================================
218
-
219
- Resolution:
237
+ "$ref": "#/$defs/SourceUrlKind"
238
+ Decision:
220
239
  type: object
221
240
  description: |
222
- A formal Resolution. Language-agnostic admin fields live here;
223
- every translatable field is wrapped inside `localizations[]`
224
- (one entry per available language; at least one is required).
241
+ A formal Decision. 1.0: per-field Localized (every translatable
242
+ field carries its own spelling tag). Removed `localizations[]`.
225
243
  additionalProperties: false
226
- required: [identifier, localizations]
244
+ required:
245
+ - identifier
227
246
  properties:
228
247
  identifier:
229
248
  type: array
230
249
  minItems: 1
231
250
  items:
232
- $ref: "#/$defs/StructuredIdentifier"
233
- type:
234
- $ref: "#/$defs/ResolutionType"
251
+ "$ref": "#/$defs/StructuredIdentifier"
252
+ kind:
253
+ "$ref": "#/$defs/DecisionKind"
254
+ status:
255
+ "$ref": "#/$defs/DecisionStatus"
256
+ body_type:
257
+ type: string
235
258
  doi:
236
259
  type: string
237
260
  urn:
@@ -241,150 +264,1257 @@ $defs:
241
264
  dates:
242
265
  type: array
243
266
  items:
244
- $ref: "#/$defs/ResolutionDate"
267
+ "$ref": "#/$defs/DecisionDate"
245
268
  categories:
246
269
  type: array
247
270
  items:
248
271
  type: string
249
272
  meeting:
250
- $ref: "#/$defs/MeetingIdentifier"
273
+ "$ref": "#/$defs/MeetingIdentifier"
251
274
  relations:
252
275
  type: array
253
276
  items:
254
- $ref: "#/$defs/ResolutionRelation"
277
+ "$ref": "#/$defs/DecisionRelation"
255
278
  urls:
256
279
  type: array
257
280
  items:
258
- $ref: "#/$defs/Url"
259
- localizations:
281
+ "$ref": "#/$defs/Url"
282
+ brought_by_motions:
260
283
  type: array
261
- minItems: 1
262
284
  items:
263
- $ref: "#/$defs/Localization"
264
-
265
- ResolutionMetadata:
285
+ type: string
286
+ about_topics:
287
+ type: array
288
+ items:
289
+ type: string
290
+ made_in_component:
291
+ type: string
292
+ title:
293
+ type: array
294
+ items:
295
+ "$ref": "#/$defs/LocalizedString"
296
+ subject:
297
+ type: array
298
+ items:
299
+ "$ref": "#/$defs/LocalizedString"
300
+ message:
301
+ type: array
302
+ items:
303
+ "$ref": "#/$defs/LocalizedString"
304
+ considering:
305
+ type: array
306
+ items:
307
+ "$ref": "#/$defs/LocalizedString"
308
+ considerations:
309
+ type: array
310
+ items:
311
+ "$ref": "#/$defs/Consideration"
312
+ approvals:
313
+ type: array
314
+ items:
315
+ "$ref": "#/$defs/Approval"
316
+ actions:
317
+ type: array
318
+ items:
319
+ "$ref": "#/$defs/Action"
320
+ extensions:
321
+ type: array
322
+ items:
323
+ "$ref": "#/$defs/MeetingExtension"
324
+ DecisionMetadata:
266
325
  type: object
267
- description: "Collection-level metadata (title, meeting date, source, source URLs, host venue)."
326
+ description: Collection-level metadata (localized title, meeting date, source, source URLs, host venue).
268
327
  additionalProperties: false
269
328
  properties:
270
329
  title:
271
- type: string
272
- description: "Default title (no language). For multilingual, use `title_localized[]`."
273
- title_localized:
274
330
  type: array
275
331
  items:
276
- $ref: "#/$defs/Localization"
277
- description: "Per-language title records (parallel pattern to Resolution#localizations)."
332
+ "$ref": "#/$defs/LocalizedString"
278
333
  date:
279
334
  type: string
280
335
  format: date
281
- description: "Meeting date."
282
336
  source:
283
337
  type: string
284
- description: "Source organization / secretariat that issued the collection."
285
338
  source_urls:
286
339
  type: array
287
340
  items:
288
- $ref: "#/$defs/SourceUrl"
289
- description: "Canonical URLs to the source PDFs in each available language."
341
+ "$ref": "#/$defs/SourceUrl"
290
342
  city:
291
343
  type: string
292
344
  pattern: "^[A-Z]{2}[A-Z0-9]{3}$"
293
- description: "UN/LOCODE of the host city (5-char: 2-letter ISO 3166-1 country + 3-char location, e.g. FRPAR, CNSHA, HKHKG). Supersedes the IATA city code."
294
345
  country_code:
295
346
  type: string
296
- description: "ISO 3166-1 alpha-2 country code (2-letter, e.g. DE, FR, JP) of the host country."
347
+ pattern: "^[A-Z]{2}$"
297
348
  meeting_urn:
298
349
  type: string
299
- description: "URN back-reference to the Meeting that produced this collection."
300
-
301
- # ====================================================================
302
- # Enums. Each is referenced by its $ref name above. The schema
303
- # <-> Ruby enum sync spec asserts each value-list matches the
304
- # corresponding Edoxen::Enums::* frozen array.
305
- # ====================================================================
306
-
307
- ActionType:
308
- type: string
309
- description: "Edoxen::Enums::ACTION_TYPE — LUTAML action.lutaml (deduped)."
310
- enum:
311
- - adopts
312
- - thanks
313
- - approves
314
- - decides
315
- - declares
316
- - asks
317
- - invites
318
- - resolves
319
- - confirms
320
- - welcomes
321
- - recommends
322
- - requests
323
- - congratulates
324
- - instructs
325
- - urges
326
- - appoints
327
- - calls-upon
328
- - encourages
329
- - affirms
330
- - elects
331
- - authorizes
332
- - charges
333
- - states
334
- - remarks
335
- - judges
336
- - sanctions
337
- - abrogates
338
- - empowers
339
-
340
- ConsiderationType:
341
- type: string
342
- description: "Edoxen::Enums::CONSIDERATION_TYPE — LUTAML consideration.lutaml (deduped)."
343
- enum:
344
- - having
345
- - noting
346
- - recognizing
347
- - acknowledging
348
- - recalling
349
- - reaffirming
350
- - considering
351
- - taking-into-account
352
- - pursuant-to
353
- - bearing-in-mind
354
- - emphasizing
355
- - concerned
356
- - accepts
357
- - observing
358
- - referring
359
- - acting
360
- - empowers
361
-
362
- ApprovalType:
363
- type: string
364
- description: "Edoxen::Enums::APPROVAL_TYPE — LUTAML approval_type.lutaml."
365
- enum: [affirmative, negative]
366
-
367
- ApprovalDegree:
368
- type: string
369
- description: "Edoxen::Enums::APPROVAL_DEGREE — LUTAML approval_degree.lutaml."
370
- enum: [unanimous, majority, minority]
371
-
372
- ResolutionType:
373
- type: string
374
- description: "Edoxen::Enums::RESOLUTION_TYPE LUTAML resolution_type.lutaml."
375
- enum: [resolution, recommendation, decision, declaration]
376
-
377
- ResolutionDateType:
378
- type: string
379
- description: "Edoxen::Enums::RESOLUTION_DATE_TYPE — LUTAML resolution_date_type.lutaml."
380
- enum: [adoption, drafted, discussed]
381
-
382
- ResolutionRelationType:
383
- type: string
384
- description: "Edoxen::Enums::RESOLUTION_RELATION_TYPE — LUTAML resolution_relation_type.lutaml."
385
- enum: [annexOf, hasAnnex, updates, refines, replaces, considers]
386
-
387
- UrlKind:
388
- type: string
389
- description: "Edoxen::Enums::URL_KIND."
390
- enum: [access, report]
350
+ body_vocabulary:
351
+ type: array
352
+ items:
353
+ "$ref": "#/$defs/BodyVocabularyEntry"
354
+ extensions:
355
+ type: array
356
+ items:
357
+ "$ref": "#/$defs/MeetingExtension"
358
+ BodyVocabularyEntry:
359
+ type: object
360
+ description: |
361
+ One entry in a per-dataset body_vocabulary list. Maps a free-form
362
+ body_type to a short canonical value. SSOT for body_type ->
363
+ canonical_type resolution within the declaring collection.
364
+ additionalProperties: false
365
+ properties:
366
+ body_type:
367
+ type: string
368
+ canonical_type:
369
+ type: string
370
+ definition:
371
+ type: string
372
+ Motion:
373
+ type: object
374
+ description: A procedural act that brings a Decision.
375
+ additionalProperties: false
376
+ properties:
377
+ identifier:
378
+ type: string
379
+ urn:
380
+ type: string
381
+ text:
382
+ type: array
383
+ items:
384
+ "$ref": "#/$defs/LocalizedString"
385
+ mover:
386
+ "$ref": "#/$defs/Person"
387
+ seconders:
388
+ type: array
389
+ items:
390
+ "$ref": "#/$defs/Person"
391
+ status:
392
+ "$ref": "#/$defs/MotionStatus"
393
+ introduced_at:
394
+ type: string
395
+ format: date-time
396
+ proposed_decision:
397
+ type: string
398
+ resulting_decision:
399
+ type: string
400
+ resulting_decision_ref:
401
+ "$ref": "#/$defs/EntityRef"
402
+ votings:
403
+ type: array
404
+ items:
405
+ type: string
406
+ extensions:
407
+ type: array
408
+ items:
409
+ "$ref": "#/$defs/MeetingExtension"
410
+ VotingCounts:
411
+ type: object
412
+ description: Tally for a Voting instance.
413
+ additionalProperties: false
414
+ properties:
415
+ ayes:
416
+ type: integer
417
+ noes:
418
+ type: integer
419
+ abstentions:
420
+ type: integer
421
+ absent:
422
+ type: integer
423
+ Voting:
424
+ type: object
425
+ description: State machine for a single vote on a Motion.
426
+ additionalProperties: false
427
+ properties:
428
+ identifier:
429
+ type: string
430
+ urn:
431
+ type: string
432
+ on_motion:
433
+ type: string
434
+ status:
435
+ "$ref": "#/$defs/VotingStatus"
436
+ voting_method:
437
+ "$ref": "#/$defs/VotingMethod"
438
+ called_by:
439
+ "$ref": "#/$defs/Person"
440
+ called_at:
441
+ type: string
442
+ format: date-time
443
+ result_declared_at:
444
+ type: string
445
+ format: date-time
446
+ result:
447
+ "$ref": "#/$defs/VotingOutcome"
448
+ counts:
449
+ "$ref": "#/$defs/VotingCounts"
450
+ casting_vote:
451
+ "$ref": "#/$defs/VoteRecord"
452
+ vote_records:
453
+ type: array
454
+ items:
455
+ "$ref": "#/$defs/VoteRecord"
456
+ extensions:
457
+ type: array
458
+ items:
459
+ "$ref": "#/$defs/MeetingExtension"
460
+ TopicDocument:
461
+ type: object
462
+ description: 'Text-bearing document about a Topic. 1.0: per-field Localized.'
463
+ additionalProperties: false
464
+ properties:
465
+ identifier:
466
+ type: string
467
+ title:
468
+ type: array
469
+ items:
470
+ "$ref": "#/$defs/LocalizedString"
471
+ version:
472
+ type: string
473
+ status:
474
+ type: string
475
+ url:
476
+ type: string
477
+ format:
478
+ type: string
479
+ spelling:
480
+ type: string
481
+ description: ISO 24229 spelling/conversion system code
482
+ extensions:
483
+ type: array
484
+ items:
485
+ "$ref": "#/$defs/MeetingExtension"
486
+ TopicAsset:
487
+ type: object
488
+ description: 'Non-text resource about a Topic. 1.0: per-field Localized.'
489
+ additionalProperties: false
490
+ properties:
491
+ identifier:
492
+ type: string
493
+ title:
494
+ type: array
495
+ items:
496
+ "$ref": "#/$defs/LocalizedString"
497
+ kind:
498
+ type: string
499
+ url:
500
+ type: string
501
+ format:
502
+ type: string
503
+ extensions:
504
+ type: array
505
+ items:
506
+ "$ref": "#/$defs/MeetingExtension"
507
+ Topic:
508
+ type: object
509
+ description: 'The subject of discussion at a Meeting. 1.0: per-field Localized.'
510
+ additionalProperties: false
511
+ properties:
512
+ identifier:
513
+ type: string
514
+ urn:
515
+ type: string
516
+ title:
517
+ type: array
518
+ items:
519
+ "$ref": "#/$defs/LocalizedString"
520
+ description:
521
+ type: array
522
+ items:
523
+ "$ref": "#/$defs/LocalizedString"
524
+ status:
525
+ "$ref": "#/$defs/TopicStatus"
526
+ resumption_of:
527
+ type: string
528
+ documents:
529
+ type: array
530
+ items:
531
+ "$ref": "#/$defs/TopicDocument"
532
+ assets:
533
+ type: array
534
+ items:
535
+ "$ref": "#/$defs/TopicAsset"
536
+ references:
537
+ type: array
538
+ items:
539
+ "$ref": "#/$defs/Reference"
540
+ motions:
541
+ type: array
542
+ items:
543
+ type: string
544
+ decisions:
545
+ type: array
546
+ items:
547
+ type: string
548
+ statements:
549
+ type: array
550
+ items:
551
+ "$ref": "#/$defs/Statement"
552
+ declarations:
553
+ type: array
554
+ items:
555
+ "$ref": "#/$defs/Declaration"
556
+ extensions:
557
+ type: array
558
+ items:
559
+ "$ref": "#/$defs/MeetingExtension"
560
+ Venue:
561
+ type: object
562
+ description: |
563
+ Polymorphic place where a Meeting happens. `kind` discriminates
564
+ physical vs virtual; all fields from both subtypes live here as
565
+ optional siblings. 1.0: per-field Localized (name, label,
566
+ description, address, building, floor, room, access_notes).
567
+ Added `urn` (registry identity) and `ref` (reference-by-URN).
568
+ additionalProperties: false
569
+ properties:
570
+ ref:
571
+ type: string
572
+ description: URN reference; if set, ignore other fields
573
+ urn:
574
+ type: string
575
+ pattern: "^urn:edoxen:venue:[^:]+:[^:]+$"
576
+ kind:
577
+ "$ref": "#/$defs/VenueKind"
578
+ name:
579
+ type: array
580
+ items:
581
+ "$ref": "#/$defs/LocalizedString"
582
+ label:
583
+ type: array
584
+ items:
585
+ "$ref": "#/$defs/LocalizedString"
586
+ description:
587
+ type: array
588
+ items:
589
+ "$ref": "#/$defs/LocalizedString"
590
+ capacity:
591
+ type: integer
592
+ url:
593
+ type: string
594
+ contact_methods:
595
+ type: array
596
+ items:
597
+ "$ref": "#/$defs/ContactMethod"
598
+ unlocode:
599
+ type: string
600
+ pattern: "^[A-Z]{2}[A-Z0-9]{3}$"
601
+ iata_code:
602
+ type: string
603
+ pattern: "^[A-Z]{3}$"
604
+ address:
605
+ type: array
606
+ items:
607
+ "$ref": "#/$defs/LocalizedString"
608
+ city:
609
+ type: string
610
+ country_code:
611
+ type: string
612
+ pattern: "^[A-Z]{2}$"
613
+ lat:
614
+ type: number
615
+ lon:
616
+ type: number
617
+ building:
618
+ type: array
619
+ items:
620
+ "$ref": "#/$defs/LocalizedString"
621
+ floor:
622
+ type: array
623
+ items:
624
+ "$ref": "#/$defs/LocalizedString"
625
+ room:
626
+ type: array
627
+ items:
628
+ "$ref": "#/$defs/LocalizedString"
629
+ access_notes:
630
+ type: array
631
+ items:
632
+ "$ref": "#/$defs/LocalizedString"
633
+ uri:
634
+ type: string
635
+ features:
636
+ type: array
637
+ items:
638
+ "$ref": "#/$defs/VirtualFeature"
639
+ passcode:
640
+ type: string
641
+ meeting_id:
642
+ type: string
643
+ dial_in_numbers:
644
+ type: array
645
+ items:
646
+ type: string
647
+ waiting_room:
648
+ type: boolean
649
+ registration_required:
650
+ type: boolean
651
+ extensions:
652
+ type: array
653
+ items:
654
+ "$ref": "#/$defs/MeetingExtension"
655
+ PhysicalVenue:
656
+ description: Marker — Venue with kind=physical. Wire shape is identical to Venue.
657
+ allOf:
658
+ - "$ref": "#/$defs/Venue"
659
+ VirtualVenue:
660
+ description: Marker — Venue with kind=virtual. Wire shape is identical to Venue.
661
+ allOf:
662
+ - "$ref": "#/$defs/Venue"
663
+ RecurrenceByDay:
664
+ type: object
665
+ description: BYDAY part of a recurrence. `ordinal` is null for 'every', +1 for first, -1 for last.
666
+ additionalProperties: false
667
+ properties:
668
+ ordinal:
669
+ type: integer
670
+ weekday:
671
+ type: string
672
+ Recurrence:
673
+ type: object
674
+ description: Structured ISO 8601-2 §13 recurrence.
675
+ additionalProperties: false
676
+ properties:
677
+ freq:
678
+ "$ref": "#/$defs/RecurrenceFreq"
679
+ interval:
680
+ type: integer
681
+ count:
682
+ type: integer
683
+ until:
684
+ type: string
685
+ format: date-time
686
+ by_day:
687
+ type: array
688
+ items:
689
+ "$ref": "#/$defs/RecurrenceByDay"
690
+ by_month_day:
691
+ type: array
692
+ items:
693
+ type: integer
694
+ by_month:
695
+ type: array
696
+ items:
697
+ type: integer
698
+ by_week_no:
699
+ type: array
700
+ items:
701
+ type: integer
702
+ by_year_day:
703
+ type: array
704
+ items:
705
+ type: integer
706
+ by_hour:
707
+ type: array
708
+ items:
709
+ type: integer
710
+ by_minute:
711
+ type: array
712
+ items:
713
+ type: integer
714
+ by_second:
715
+ type: array
716
+ items:
717
+ type: integer
718
+ by_set_pos:
719
+ type: array
720
+ items:
721
+ type: integer
722
+ week_start:
723
+ type: string
724
+ extensions:
725
+ type: array
726
+ items:
727
+ "$ref": "#/$defs/MeetingExtension"
728
+ ExtensionAttribute:
729
+ type: object
730
+ description: |
731
+ One typed key/value pair within a MeetingExtension. Polymorphic on
732
+ value type so consumers don't re-parse strings back into Int/Float/
733
+ Bool/Date (1.0 tighten, TODO.refactor/1.0-design).
734
+ additionalProperties: false
735
+ properties:
736
+ key:
737
+ type: string
738
+ type:
739
+ type: string
740
+ enum:
741
+ - string
742
+ - integer
743
+ - float
744
+ - boolean
745
+ - date
746
+ - datetime
747
+ value:
748
+ type: string
749
+ intValue:
750
+ type: integer
751
+ floatValue:
752
+ type: number
753
+ booleanValue:
754
+ type: boolean
755
+ dateValue:
756
+ type: string
757
+ format: date
758
+ dateTimeValue:
759
+ type: string
760
+ format: date-time
761
+ MeetingExtension:
762
+ type: object
763
+ description: |
764
+ Profile-specific extension. Adopters register their namespace via
765
+ `profile` and discriminate via `kind`. Field semantics tightened
766
+ 1.0 (TODO.refactor/1.0-design): `kind` is the in-profile discriminator,
767
+ `ref` is the URN of an external profile document, and the
768
+ recursive `extensions[]` slot was removed (YAGNI — use dotted
769
+ keys in `attributes[]` for nesting).
770
+ additionalProperties: false
771
+ properties:
772
+ profile:
773
+ type: string
774
+ kind:
775
+ type: string
776
+ ref:
777
+ type: string
778
+ attributes:
779
+ type: array
780
+ items:
781
+ "$ref": "#/$defs/ExtensionAttribute"
782
+ ContactMethodKind:
783
+ type: string
784
+ description: Polymorphic communication channel kind.
785
+ enum:
786
+ - phone
787
+ - mobile
788
+ - fax
789
+ - email
790
+ - url
791
+ - mail
792
+ - pager
793
+ - message
794
+ - other
795
+ ContactMethod:
796
+ type: object
797
+ description: |
798
+ One polymorphic communication channel — phone, email, fax, url,
799
+ mail, etc. `kind` discriminates the channel; `value` carries the
800
+ address/number; `label` is a free-form display hint ("Office",
801
+ "Front desk"). OCP: new channel kinds are added via the
802
+ ContactMethodKind enum (or `other` + extensions).
803
+ additionalProperties: false
804
+ properties:
805
+ kind:
806
+ "$ref": "#/$defs/ContactMethodKind"
807
+ value:
808
+ type: string
809
+ label:
810
+ type: string
811
+ primary:
812
+ type: boolean
813
+ extensions:
814
+ type: array
815
+ items:
816
+ "$ref": "#/$defs/MeetingExtension"
817
+ ContactIdentifierKind:
818
+ type: string
819
+ description: Polymorphic external identifier scheme for a Contact.
820
+ enum:
821
+ - orcid
822
+ - isni
823
+ - wikidata
824
+ - ror
825
+ - ringgold
826
+ - github
827
+ - other
828
+ ContactIdentifier:
829
+ type: object
830
+ description: |
831
+ One polymorphic external identifier — ORCID, ISNI, Wikidata QID,
832
+ ROR, Ringgold, GitHub handle, etc. Replaces the hard-coded `orcid`
833
+ field. OCP: new identifier schemes are added via the
834
+ ContactIdentifierKind enum (or `other` + extensions).
835
+ additionalProperties: false
836
+ properties:
837
+ kind:
838
+ "$ref": "#/$defs/ContactIdentifierKind"
839
+ value:
840
+ type: string
841
+ extensions:
842
+ type: array
843
+ items:
844
+ "$ref": "#/$defs/MeetingExtension"
845
+ Name:
846
+ type: object
847
+ description: |
848
+ Structured personal/organisational name (VCARD RFC 6350
849
+ conventions). `formatted` is the pre-built display string (FN);
850
+ the structured components (N) are stored separately for sorting,
851
+ indexing, or locale-aware rendering.
852
+ additionalProperties: false
853
+ properties:
854
+ formatted:
855
+ type: string
856
+ family:
857
+ type: string
858
+ given:
859
+ type: string
860
+ additional:
861
+ type: string
862
+ prefix:
863
+ type: string
864
+ suffix:
865
+ type: string
866
+ extensions:
867
+ type: array
868
+ items:
869
+ "$ref": "#/$defs/MeetingExtension"
870
+ Contact:
871
+ type: object
872
+ description: |
873
+ VCARD-like abstract contact. 1.0: per-field Localized
874
+ (name, title, affiliation, address). Added `urn` (registry
875
+ identity) and `ref` (reference-by-URN).
876
+ additionalProperties: false
877
+ properties:
878
+ ref:
879
+ type: string
880
+ description: URN reference; if set, ignore other fields
881
+ urn:
882
+ type: string
883
+ pattern: "^urn:edoxen:contact:[^:]+:[^:]+$"
884
+ name:
885
+ type: array
886
+ items:
887
+ "$ref": "#/$defs/LocalizedName"
888
+ kind:
889
+ type: string
890
+ role:
891
+ type: string
892
+ title:
893
+ type: array
894
+ items:
895
+ "$ref": "#/$defs/LocalizedString"
896
+ affiliation:
897
+ type: array
898
+ items:
899
+ "$ref": "#/$defs/LocalizedString"
900
+ contact_methods:
901
+ type: array
902
+ items:
903
+ "$ref": "#/$defs/ContactMethod"
904
+ identifiers:
905
+ type: array
906
+ items:
907
+ "$ref": "#/$defs/ContactIdentifier"
908
+ address:
909
+ type: array
910
+ items:
911
+ "$ref": "#/$defs/LocalizedString"
912
+ extensions:
913
+ type: array
914
+ items:
915
+ "$ref": "#/$defs/MeetingExtension"
916
+ Person:
917
+ type: object
918
+ description: |
919
+ A Contact that is specifically an individual human. Schema
920
+ duplicates Contact's properties because JSON-Schema draft-07
921
+ doesn't support `extends`. Same shape; semantically a subclass.
922
+ additionalProperties: false
923
+ properties:
924
+ ref:
925
+ type: string
926
+ urn:
927
+ type: string
928
+ pattern: "^urn:edoxen:contact:[^:]+:[^:]+$"
929
+ name:
930
+ type: array
931
+ items:
932
+ "$ref": "#/$defs/LocalizedName"
933
+ kind:
934
+ type: string
935
+ role:
936
+ type: string
937
+ title:
938
+ type: array
939
+ items:
940
+ "$ref": "#/$defs/LocalizedString"
941
+ affiliation:
942
+ type: array
943
+ items:
944
+ "$ref": "#/$defs/LocalizedString"
945
+ contact_methods:
946
+ type: array
947
+ items:
948
+ "$ref": "#/$defs/ContactMethod"
949
+ identifiers:
950
+ type: array
951
+ items:
952
+ "$ref": "#/$defs/ContactIdentifier"
953
+ address:
954
+ type: array
955
+ items:
956
+ "$ref": "#/$defs/LocalizedString"
957
+ extensions:
958
+ type: array
959
+ items:
960
+ "$ref": "#/$defs/MeetingExtension"
961
+ Reference:
962
+ type: object
963
+ description: Generic document reference.
964
+ additionalProperties: false
965
+ properties:
966
+ ref:
967
+ type: string
968
+ kind:
969
+ type: string
970
+ title:
971
+ type: array
972
+ items:
973
+ "$ref": "#/$defs/LocalizedString"
974
+ VoteRecord:
975
+ type: object
976
+ description: One vote by one person on one decision/voting.
977
+ additionalProperties: false
978
+ required:
979
+ - person
980
+ - vote
981
+ properties:
982
+ decision_ref:
983
+ type: string
984
+ voting_ref:
985
+ type: string
986
+ person:
987
+ "$ref": "#/$defs/Person"
988
+ affiliation:
989
+ type: string
990
+ vote:
991
+ "$ref": "#/$defs/VoteType"
992
+ role:
993
+ type: string
994
+ notes:
995
+ type: string
996
+ extensions:
997
+ type: array
998
+ items:
999
+ "$ref": "#/$defs/MeetingExtension"
1000
+ Officer:
1001
+ type: object
1002
+ description: A person holding a structural role in a Meeting.
1003
+ additionalProperties: false
1004
+ properties:
1005
+ role:
1006
+ "$ref": "#/$defs/OfficerRole"
1007
+ person:
1008
+ "$ref": "#/$defs/Person"
1009
+ term_start:
1010
+ type: string
1011
+ format: date
1012
+ term_end:
1013
+ type: string
1014
+ format: date
1015
+ extensions:
1016
+ type: array
1017
+ items:
1018
+ "$ref": "#/$defs/MeetingExtension"
1019
+ MeetingComponent:
1020
+ type: object
1021
+ description: 'Flat sub-event of a Meeting. 1.0: per-field Localized.'
1022
+ additionalProperties: false
1023
+ properties:
1024
+ identifier:
1025
+ type: string
1026
+ urn:
1027
+ type: string
1028
+ kind:
1029
+ "$ref": "#/$defs/ComponentKind"
1030
+ body_type:
1031
+ type: string
1032
+ title:
1033
+ type: array
1034
+ items:
1035
+ "$ref": "#/$defs/LocalizedString"
1036
+ description:
1037
+ type: array
1038
+ items:
1039
+ "$ref": "#/$defs/LocalizedString"
1040
+ starts_at:
1041
+ type: string
1042
+ format: date-time
1043
+ ends_at:
1044
+ type: string
1045
+ format: date-time
1046
+ time_label:
1047
+ type: array
1048
+ items:
1049
+ "$ref": "#/$defs/LocalizedString"
1050
+ venue_refs:
1051
+ type: array
1052
+ items:
1053
+ type: string
1054
+ officers:
1055
+ type: array
1056
+ items:
1057
+ "$ref": "#/$defs/Officer"
1058
+ agenda_ref:
1059
+ type: string
1060
+ minutes_ref:
1061
+ type: string
1062
+ attendance_refs:
1063
+ type: array
1064
+ items:
1065
+ type: string
1066
+ extensions:
1067
+ type: array
1068
+ items:
1069
+ "$ref": "#/$defs/MeetingExtension"
1070
+ MeetingSeries:
1071
+ type: object
1072
+ description: 'Parent of recurring Meeting instances. 1.0: per-field Localized.'
1073
+ additionalProperties: false
1074
+ properties:
1075
+ identifier:
1076
+ type: array
1077
+ items:
1078
+ "$ref": "#/$defs/StructuredIdentifier"
1079
+ urn:
1080
+ type: string
1081
+ name:
1082
+ type: array
1083
+ items:
1084
+ "$ref": "#/$defs/LocalizedString"
1085
+ description:
1086
+ type: array
1087
+ items:
1088
+ "$ref": "#/$defs/LocalizedString"
1089
+ recurrence:
1090
+ "$ref": "#/$defs/Recurrence"
1091
+ term:
1092
+ type: string
1093
+ contact:
1094
+ "$ref": "#/$defs/Contact"
1095
+ hosts:
1096
+ type: array
1097
+ items:
1098
+ "$ref": "#/$defs/HostRef"
1099
+ kind:
1100
+ type: string
1101
+ meeting_refs:
1102
+ type: array
1103
+ items:
1104
+ type: string
1105
+ extensions:
1106
+ type: array
1107
+ items:
1108
+ "$ref": "#/$defs/MeetingExtension"
1109
+ body_type:
1110
+ type: string
1111
+ HostRef:
1112
+ type: object
1113
+ description: Typed reference to a hosting organization.
1114
+ additionalProperties: false
1115
+ required:
1116
+ - ref
1117
+ properties:
1118
+ ref:
1119
+ type: string
1120
+ type:
1121
+ "$ref": "#/$defs/HostType"
1122
+ role:
1123
+ type: string
1124
+ contact:
1125
+ "$ref": "#/$defs/Contact"
1126
+ ContactCollection:
1127
+ type: object
1128
+ description: |
1129
+ Registry of Contacts indexed by scoped URN. Members carry
1130
+ `urn: urn:edoxen:contact:{scope}:{local-id}`; the collection's
1131
+ `scope` MUST match the scope segment in member URNs.
1132
+ additionalProperties: false
1133
+ properties:
1134
+ scope:
1135
+ type: string
1136
+ title:
1137
+ type: array
1138
+ items:
1139
+ "$ref": "#/$defs/LocalizedString"
1140
+ contacts:
1141
+ type: array
1142
+ items:
1143
+ "$ref": "#/$defs/Contact"
1144
+ extensions:
1145
+ type: array
1146
+ items:
1147
+ "$ref": "#/$defs/MeetingExtension"
1148
+ VenueCollection:
1149
+ type: object
1150
+ description: 'Registry of Venues indexed by scoped URN. Mirrors ContactCollection.
1151
+
1152
+ '
1153
+ additionalProperties: false
1154
+ properties:
1155
+ scope:
1156
+ type: string
1157
+ title:
1158
+ type: array
1159
+ items:
1160
+ "$ref": "#/$defs/LocalizedString"
1161
+ venues:
1162
+ type: array
1163
+ items:
1164
+ "$ref": "#/$defs/Venue"
1165
+ extensions:
1166
+ type: array
1167
+ items:
1168
+ "$ref": "#/$defs/MeetingExtension"
1169
+ ActionType:
1170
+ type: string
1171
+ description: |
1172
+ Action verb. Edoxen::Enums::ACTION_TYPE lists the canonical set
1173
+ (28 values). The schema is permissive — adopters may use
1174
+ body-specific verbs (e.g. "scopes", "directs", "establishes")
1175
+ outside the canonical set. The canonical set is advisory; the
1176
+ body_vocabulary mechanism (1.0, TODO.refactor/1.0-design) will
1177
+ eventually map body-specific verbs to canonical types.
1178
+ ConsiderationType:
1179
+ type: string
1180
+ description: |
1181
+ Consideration verb. Edoxen::Enums::CONSIDERATION_TYPE lists the
1182
+ canonical set. The schema is permissive — adopters may use
1183
+ body-specific verbs outside the canonical set (same rationale as
1184
+ ActionType).
1185
+ ApprovalType:
1186
+ type: string
1187
+ description: Edoxen::Enums::APPROVAL_TYPE.
1188
+ enum:
1189
+ - affirmative
1190
+ - negative
1191
+ ApprovalDegree:
1192
+ type: string
1193
+ description: Edoxen::Enums::APPROVAL_DEGREE.
1194
+ enum:
1195
+ - unanimous
1196
+ - majority
1197
+ - minority
1198
+ DecisionKind:
1199
+ type: string
1200
+ description: Edoxen::Enums::DECISION_KIND.
1201
+ enum:
1202
+ - resolution
1203
+ - order
1204
+ - ruling
1205
+ - determination
1206
+ - recommendation
1207
+ - statement
1208
+ - finding
1209
+ - opinion
1210
+ - other
1211
+ DecisionKindCanonical:
1212
+ type: string
1213
+ description: |
1214
+ Edoxen::Enums::DECISION_KIND_CANONICAL — short abstract set (1.0,
1215
+ TODO.refactor/1.0-design). Bodies extend via `body_type` + per-dataset
1216
+ `body_vocabulary[]`.
1217
+ enum:
1218
+ - decision
1219
+ - recommendation
1220
+ - statement
1221
+ - finding
1222
+ - other
1223
+ DecisionStatus:
1224
+ type: string
1225
+ description: Edoxen::Enums::DECISION_STATUS.
1226
+ enum:
1227
+ - draft
1228
+ - proposed
1229
+ - under_consideration
1230
+ - decided
1231
+ - negatived
1232
+ - withdrawn
1233
+ - deferred
1234
+ DecisionDateType:
1235
+ type: string
1236
+ description: Edoxen::Enums::DECISION_DATE_TYPE.
1237
+ enum:
1238
+ - adoption
1239
+ - drafted
1240
+ - discussed
1241
+ - proposed
1242
+ - decided
1243
+ - negatived
1244
+ - withdrawn
1245
+ - published
1246
+ - effective
1247
+ DecisionRelationType:
1248
+ type: string
1249
+ description: Edoxen::Enums::DECISION_RELATION_TYPE.
1250
+ enum:
1251
+ - annex_of
1252
+ - has_annex
1253
+ - updates
1254
+ - refines
1255
+ - replaces
1256
+ - considers
1257
+ - cites
1258
+ MotionStatus:
1259
+ type: string
1260
+ description: Edoxen::Enums::MOTION_STATUS.
1261
+ enum:
1262
+ - introduced
1263
+ - seconded
1264
+ - debating
1265
+ - question_put
1266
+ - voting
1267
+ - carried
1268
+ - negatived
1269
+ - withdrawn
1270
+ - lapsed
1271
+ VotingStatus:
1272
+ type: string
1273
+ description: Edoxen::Enums::VOTING_STATUS.
1274
+ enum:
1275
+ - called
1276
+ - in_progress
1277
+ - decided
1278
+ - withdrawn
1279
+ - deferred
1280
+ VotingMethod:
1281
+ type: string
1282
+ description: Edoxen::Enums::VOTING_METHOD.
1283
+ enum:
1284
+ - voice
1285
+ - division
1286
+ - show_of_hands
1287
+ - roll_call
1288
+ - electronic
1289
+ - secret_ballot
1290
+ - unanimous_consent
1291
+ - consensus
1292
+ VotingOutcome:
1293
+ type: string
1294
+ description: Edoxen::Enums::VOTING_OUTCOME.
1295
+ enum:
1296
+ - passed
1297
+ - negatived
1298
+ - tied
1299
+ - withdrawn
1300
+ TopicStatus:
1301
+ type: string
1302
+ description: Edoxen::Enums::TOPIC_STATUS.
1303
+ enum:
1304
+ - open
1305
+ - under_discussion
1306
+ - decided
1307
+ - deferred
1308
+ - withdrawn
1309
+ VenueKind:
1310
+ type: string
1311
+ description: Edoxen::Enums::VENUE_KIND.
1312
+ enum:
1313
+ - physical
1314
+ - virtual
1315
+ VirtualFeature:
1316
+ type: string
1317
+ description: Edoxen::Enums::VIRTUAL_FEATURE.
1318
+ enum:
1319
+ - audio
1320
+ - video
1321
+ - chat
1322
+ - phone
1323
+ - screen
1324
+ - feed
1325
+ Visibility:
1326
+ type: string
1327
+ description: Edoxen::Enums::VISIBILITY.
1328
+ enum:
1329
+ - public
1330
+ - private
1331
+ - confidential
1332
+ AttendanceRole:
1333
+ type: string
1334
+ description: Edoxen::Enums::ATTENDANCE_ROLE.
1335
+ enum:
1336
+ - chair
1337
+ - required
1338
+ - optional
1339
+ - non_participant
1340
+ AttendanceResponse:
1341
+ type: string
1342
+ description: Edoxen::Enums::ATTENDANCE_RESPONSE.
1343
+ enum:
1344
+ - pending
1345
+ - confirmed
1346
+ - declined
1347
+ - tentative
1348
+ - delegated
1349
+ ComponentKind:
1350
+ type: string
1351
+ description: Edoxen::Enums::COMPONENT_KIND.
1352
+ enum:
1353
+ - track
1354
+ - session
1355
+ - debate
1356
+ - breakout
1357
+ - bof
1358
+ - plenary_session
1359
+ - working_group_session
1360
+ - committee_of_the_whole
1361
+ - keynote
1362
+ - address
1363
+ - statement
1364
+ - question_time
1365
+ - opening
1366
+ - closing
1367
+ - break
1368
+ - reception
1369
+ - registration
1370
+ - networking
1371
+ - other
1372
+ ComponentKindCanonical:
1373
+ type: string
1374
+ description: |
1375
+ Edoxen::Enums::COMPONENT_KIND_CANONICAL — short abstract set
1376
+ (1.0, TODO.refactor/1.0-design).
1377
+ enum:
1378
+ - deliberative
1379
+ - working
1380
+ - ceremonial
1381
+ - break
1382
+ - other
1383
+ OfficerRole:
1384
+ type: string
1385
+ description: Edoxen::Enums::OFFICER_ROLE.
1386
+ enum:
1387
+ - chair
1388
+ - vice_chair
1389
+ - deputy_chair
1390
+ - secretary
1391
+ - treasurer
1392
+ - parliamentarian
1393
+ - presiding_officer
1394
+ - sergeant_at_arms
1395
+ - other
1396
+ RecurrenceFreq:
1397
+ type: string
1398
+ description: Edoxen::Enums::RECURRENCE_FREQ.
1399
+ enum:
1400
+ - secondly
1401
+ - minutely
1402
+ - hourly
1403
+ - daily
1404
+ - weekly
1405
+ - monthly
1406
+ - yearly
1407
+ UrlKind:
1408
+ type: string
1409
+ description: Edoxen::Enums::URL_KIND.
1410
+ enum:
1411
+ - access
1412
+ - report
1413
+ SourceUrlKind:
1414
+ type: string
1415
+ description: Edoxen::Enums::SOURCE_URL_KIND.
1416
+ enum:
1417
+ - agenda_pdf
1418
+ - minutes_pdf
1419
+ - decisions_pdf
1420
+ - report_pdf
1421
+ - register_url
1422
+ - landing_page
1423
+ HostType:
1424
+ type: string
1425
+ description: Edoxen::Enums::HOST_TYPE.
1426
+ enum:
1427
+ - national_body
1428
+ - liaison
1429
+ - associate
1430
+ - organizer
1431
+ VoteType:
1432
+ type: string
1433
+ description: Edoxen::Enums::VOTE_TYPE.
1434
+ enum:
1435
+ - affirmative
1436
+ - negative
1437
+ - abstain
1438
+ - absent
1439
+ - not_applicable
1440
+ DateTimeRange:
1441
+ type: object
1442
+ description: |
1443
+ Start + end pair with sub-day precision. Parallel to DateRange;
1444
+ use when day granularity is insufficient (e.g. a meeting that
1445
+ ran 09:00–11:30).
1446
+ additionalProperties: false
1447
+ properties:
1448
+ start:
1449
+ type: string
1450
+ format: date-time
1451
+ end:
1452
+ type: string
1453
+ format: date-time
1454
+ StatementKind:
1455
+ type: string
1456
+ description: |
1457
+ Discriminator for the three BS 0:2006 statement types. Adding a
1458
+ new kind is a one-line enum extension; the Statement model
1459
+ itself never needs to change (OCP).
1460
+ enum:
1461
+ - statement
1462
+ - comment
1463
+ - standpoint
1464
+ DeclarationKind:
1465
+ type: string
1466
+ description: |
1467
+ Discriminator for the two BS 0:2006 declaration types
1468
+ (conflict of interest, IPR).
1469
+ enum:
1470
+ - conflict_of_interest
1471
+ - ipr
1472
+ Statement:
1473
+ type: object
1474
+ description: |
1475
+ One remark made by one or more meeting members on a topic or a
1476
+ minutes section. Per-field Localized description; party is a
1477
+ list of Person references. The `kind` discriminator separates
1478
+ the three BS 0:2006 statement types.
1479
+ additionalProperties: false
1480
+ properties:
1481
+ kind:
1482
+ "$ref": "#/$defs/StatementKind"
1483
+ description:
1484
+ type: array
1485
+ items:
1486
+ "$ref": "#/$defs/LocalizedString"
1487
+ party:
1488
+ type: array
1489
+ items:
1490
+ "$ref": "#/$defs/Person"
1491
+ extensions:
1492
+ type: array
1493
+ items:
1494
+ "$ref": "#/$defs/MeetingExtension"
1495
+ Declaration:
1496
+ type: object
1497
+ description: |
1498
+ A formal declaration (conflict of interest or IPR) made by one
1499
+ or more meeting members. IPR-specific fields (`ipr_subject_ref`,
1500
+ `ipr_target_ref`) are populated only when `kind == "ipr"`.
1501
+ additionalProperties: false
1502
+ properties:
1503
+ kind:
1504
+ "$ref": "#/$defs/DeclarationKind"
1505
+ description:
1506
+ type: array
1507
+ items:
1508
+ "$ref": "#/$defs/LocalizedString"
1509
+ party:
1510
+ type: array
1511
+ items:
1512
+ "$ref": "#/$defs/Person"
1513
+ ipr_subject_ref:
1514
+ "$ref": "#/$defs/EntityRef"
1515
+ ipr_target_ref:
1516
+ "$ref": "#/$defs/EntityRef"
1517
+ extensions:
1518
+ type: array
1519
+ items:
1520
+ "$ref": "#/$defs/MeetingExtension"