@yottagraph-app/data-model-skill 0.0.12 → 0.0.14
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.
- package/package.json +1 -1
- package/skill/sanctions/schema.yaml +553 -21
- package/skill/stocks/DATA_DICTIONARY.md +12 -12
- package/skill/stocks/schema.yaml +41 -1
package/package.json
CHANGED
|
@@ -19,24 +19,91 @@ flavors:
|
|
|
19
19
|
description: "A real person as opposed to a fictional character, such as a CEO, politician, or public figure"
|
|
20
20
|
display_name: "Person"
|
|
21
21
|
mergeability: not_mergeable
|
|
22
|
+
strong_id_properties: ["sanctions_id"]
|
|
22
23
|
passive: true
|
|
23
24
|
|
|
24
25
|
- name: "organization"
|
|
25
26
|
description: "A particular business, institution, or organization such as a corporation, university, government agency, or non-profit"
|
|
26
27
|
display_name: "Organization"
|
|
27
28
|
mergeability: not_mergeable
|
|
29
|
+
strong_id_properties: ["sanctions_id"]
|
|
30
|
+
passive: true
|
|
31
|
+
|
|
32
|
+
- name: "legal_entity"
|
|
33
|
+
description: "An entity with legal personality whose type (person vs organization) is unknown in the source data, common in leak-derived datasets like ICIJ Offshore Leaks"
|
|
34
|
+
display_name: "Legal Entity"
|
|
35
|
+
mergeability: not_mergeable
|
|
36
|
+
strong_id_properties: ["sanctions_id"]
|
|
28
37
|
passive: true
|
|
29
38
|
|
|
30
39
|
- name: "sanction_program"
|
|
31
40
|
description: "A government or international sanctions program under which entities are designated"
|
|
32
41
|
display_name: "Sanction Program"
|
|
33
42
|
mergeability: not_mergeable
|
|
43
|
+
strong_id_properties: ["program_id"]
|
|
34
44
|
passive: true
|
|
35
45
|
|
|
36
|
-
- name: "
|
|
37
|
-
description: "A
|
|
38
|
-
display_name: "
|
|
46
|
+
- name: "ship"
|
|
47
|
+
description: "A vessel (boat or ship) identified in sanctions designations"
|
|
48
|
+
display_name: "Vessel"
|
|
49
|
+
mergeability: not_mergeable
|
|
50
|
+
strong_id_properties: ["sanctions_id"]
|
|
51
|
+
passive: true
|
|
52
|
+
|
|
53
|
+
- name: "aircraft"
|
|
54
|
+
description: "An airplane identified in sanctions designations"
|
|
55
|
+
display_name: "Aircraft"
|
|
39
56
|
mergeability: not_mergeable
|
|
57
|
+
strong_id_properties: ["sanctions_id"]
|
|
58
|
+
passive: true
|
|
59
|
+
|
|
60
|
+
- name: "financial_instrument"
|
|
61
|
+
description: "A specific asset that can be traded, such as a stock, ETF, bond, CD, or fund. Companies are organizations, NOT financial instruments. Specific currency amounts are NOT financial instruments."
|
|
62
|
+
display_name: "Security"
|
|
63
|
+
mergeability: not_mergeable
|
|
64
|
+
strong_id_properties: ["sanctions_id", "cusip_number", "isin"]
|
|
65
|
+
passive: true
|
|
66
|
+
|
|
67
|
+
- name: "crypto_wallet"
|
|
68
|
+
description: "A cryptocurrency wallet address identified in sanctions designations"
|
|
69
|
+
display_name: "Crypto Wallet"
|
|
70
|
+
mergeability: not_mergeable
|
|
71
|
+
strong_id_properties: ["sanctions_id", "public_key"]
|
|
72
|
+
passive: true
|
|
73
|
+
|
|
74
|
+
- name: "location"
|
|
75
|
+
description: "A specific named geographic location such as a city, country, region, or landmark"
|
|
76
|
+
display_name: "Address"
|
|
77
|
+
mergeability: not_mergeable
|
|
78
|
+
strong_id_properties: ["sanctions_id"]
|
|
79
|
+
passive: true
|
|
80
|
+
|
|
81
|
+
- name: "political_position"
|
|
82
|
+
description: "A political office or government position held by a PEP"
|
|
83
|
+
display_name: "Political Position"
|
|
84
|
+
mergeability: not_mergeable
|
|
85
|
+
strong_id_properties: ["sanctions_id"]
|
|
86
|
+
passive: true
|
|
87
|
+
|
|
88
|
+
- name: "physical_asset"
|
|
89
|
+
description: "A physical asset such as real estate or business property linked to a sanctioned person"
|
|
90
|
+
display_name: "Physical Asset"
|
|
91
|
+
mergeability: not_mergeable
|
|
92
|
+
strong_id_properties: ["sanctions_id"]
|
|
93
|
+
passive: true
|
|
94
|
+
|
|
95
|
+
- name: "article"
|
|
96
|
+
description: "A news article or press release being processed"
|
|
97
|
+
display_name: "Article"
|
|
98
|
+
mergeability: not_mergeable
|
|
99
|
+
strong_id_properties: ["sanctions_id"]
|
|
100
|
+
passive: true
|
|
101
|
+
|
|
102
|
+
- name: "identity_document"
|
|
103
|
+
description: "An identity document (passport, national ID) linked to a sanctioned person"
|
|
104
|
+
display_name: "Identity Document"
|
|
105
|
+
mergeability: not_mergeable
|
|
106
|
+
strong_id_properties: ["sanctions_id"]
|
|
40
107
|
passive: true
|
|
41
108
|
|
|
42
109
|
properties:
|
|
@@ -45,7 +112,7 @@ properties:
|
|
|
45
112
|
description: "Unique identifier assigned to this entity by the upstream sanctions data provider (OpenSanctions entity ID)"
|
|
46
113
|
display_name: "Sanctions ID"
|
|
47
114
|
mergeability: not_mergeable
|
|
48
|
-
domain_flavors: ["person", "organization"]
|
|
115
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "location", "political_position", "physical_asset", "article", "identity_document"]
|
|
49
116
|
examples: ["ch-seco-94982", "us-ofac-12345"]
|
|
50
117
|
passive: true
|
|
51
118
|
|
|
@@ -54,7 +121,7 @@ properties:
|
|
|
54
121
|
description: "Display name of the entity"
|
|
55
122
|
display_name: "Name"
|
|
56
123
|
mergeability: not_mergeable
|
|
57
|
-
domain_flavors: ["person", "organization"]
|
|
124
|
+
domain_flavors: ["person", "organization", "legal_entity", "sanction_program", "ship", "aircraft", "financial_instrument", "crypto_wallet", "location", "political_position", "physical_asset", "article"]
|
|
58
125
|
examples: ["Zhongheng Lin", "Vladimir Putin"]
|
|
59
126
|
passive: true
|
|
60
127
|
|
|
@@ -63,7 +130,7 @@ properties:
|
|
|
63
130
|
description: "An alternative name or spelling for this entity, one atom per alias"
|
|
64
131
|
display_name: "Alias"
|
|
65
132
|
mergeability: not_mergeable
|
|
66
|
-
domain_flavors: ["person", "organization"]
|
|
133
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet"]
|
|
67
134
|
passive: true
|
|
68
135
|
|
|
69
136
|
- name: "birth_date"
|
|
@@ -98,7 +165,7 @@ properties:
|
|
|
98
165
|
description: "Classification tag indicating the type of sanctions designation, one atom per topic"
|
|
99
166
|
display_name: "Sanctions Topic"
|
|
100
167
|
mergeability: not_mergeable
|
|
101
|
-
domain_flavors: ["person", "organization"]
|
|
168
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet"]
|
|
102
169
|
examples: ["sanction", "poi", "debarment", "entity.associate"]
|
|
103
170
|
passive: true
|
|
104
171
|
|
|
@@ -107,47 +174,512 @@ properties:
|
|
|
107
174
|
description: "Descriptive notes or commentary associated with the entity"
|
|
108
175
|
display_name: "Notes"
|
|
109
176
|
mergeability: not_mergeable
|
|
110
|
-
domain_flavors: ["person", "organization"]
|
|
177
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "physical_asset", "crypto_wallet"]
|
|
111
178
|
passive: true
|
|
112
179
|
|
|
113
|
-
- name: "
|
|
114
|
-
type:
|
|
115
|
-
description: "
|
|
116
|
-
display_name: "
|
|
180
|
+
- name: "sanction_source_url"
|
|
181
|
+
type: string
|
|
182
|
+
description: "URL of the original source document for this sanctions listing, one atom per URL"
|
|
183
|
+
display_name: "Sanction Source URL"
|
|
184
|
+
mergeability: not_mergeable
|
|
185
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "article"]
|
|
186
|
+
examples: ["https://www.federalreserve.gov/boarddocs/press/enforcement/2005/20050607/default.htm"]
|
|
187
|
+
passive: true
|
|
188
|
+
|
|
189
|
+
- name: "sanction_start_date"
|
|
190
|
+
type: string
|
|
191
|
+
description: "ISO 8601 date when this entity first appeared in the sanctions dataset (from OpenSanctions first_seen)"
|
|
192
|
+
display_name: "Sanction Start Date"
|
|
117
193
|
mergeability: not_mergeable
|
|
118
|
-
domain_flavors: ["person", "organization"]
|
|
194
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "political_position", "location", "article"]
|
|
195
|
+
examples: ["2022-02-25", "2023-06-14"]
|
|
196
|
+
passive: true
|
|
197
|
+
|
|
198
|
+
- name: "sanction_end_date"
|
|
199
|
+
type: string
|
|
200
|
+
description: "ISO 8601 date when this entity was removed from the sanctions dataset; absent while actively sanctioned"
|
|
201
|
+
display_name: "Sanction End Date"
|
|
202
|
+
mergeability: not_mergeable
|
|
203
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet"]
|
|
204
|
+
examples: ["2026-04-06"]
|
|
205
|
+
passive: true
|
|
206
|
+
|
|
207
|
+
- name: "last_fetched"
|
|
208
|
+
type: string
|
|
209
|
+
description: "ISO 8601 date of the last dataset snapshot in which this entity or relationship was present"
|
|
210
|
+
display_name: "Last Fetched"
|
|
211
|
+
mergeability: not_mergeable
|
|
212
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "physical_asset", "political_position", "location", "article"]
|
|
213
|
+
examples: ["2026-04-09"]
|
|
119
214
|
passive: true
|
|
120
215
|
|
|
121
216
|
- name: "address"
|
|
122
217
|
type: string
|
|
123
|
-
description: "Physical address of the
|
|
218
|
+
description: "Physical street address of the entity"
|
|
124
219
|
display_name: "Address"
|
|
125
220
|
mergeability: not_mergeable
|
|
126
|
-
domain_flavors: ["organization"]
|
|
221
|
+
domain_flavors: ["organization", "legal_entity"]
|
|
127
222
|
passive: true
|
|
128
223
|
|
|
129
|
-
- name: "
|
|
224
|
+
- name: "sanction_sector"
|
|
130
225
|
type: string
|
|
131
226
|
description: "Business sector or industry classification of the sanctioned organization"
|
|
132
|
-
display_name: "Sector"
|
|
227
|
+
display_name: "Sanction Sector"
|
|
133
228
|
mergeability: not_mergeable
|
|
134
229
|
domain_flavors: ["organization"]
|
|
135
230
|
examples: ["Energy", "Banking", "Defense"]
|
|
136
231
|
passive: true
|
|
137
232
|
|
|
233
|
+
# Vessel properties
|
|
234
|
+
- name: "imo_number"
|
|
235
|
+
type: string
|
|
236
|
+
description: "IMO number of the vessel"
|
|
237
|
+
display_name: "IMO Number"
|
|
238
|
+
mergeability: not_mergeable
|
|
239
|
+
domain_flavors: ["ship"]
|
|
240
|
+
examples: ["IMO9553359"]
|
|
241
|
+
passive: true
|
|
242
|
+
|
|
243
|
+
- name: "mmsi"
|
|
244
|
+
type: string
|
|
245
|
+
description: "Maritime Mobile Service Identity of the vessel"
|
|
246
|
+
display_name: "MMSI"
|
|
247
|
+
mergeability: not_mergeable
|
|
248
|
+
domain_flavors: ["ship"]
|
|
249
|
+
passive: true
|
|
250
|
+
|
|
251
|
+
- name: "callsign"
|
|
252
|
+
type: string
|
|
253
|
+
description: "Radio call sign of the vessel"
|
|
254
|
+
display_name: "Call Sign"
|
|
255
|
+
mergeability: not_mergeable
|
|
256
|
+
domain_flavors: ["ship"]
|
|
257
|
+
passive: true
|
|
258
|
+
|
|
259
|
+
- name: "shipAndCargoType"
|
|
260
|
+
type: string
|
|
261
|
+
description: "Type classification of the vessel"
|
|
262
|
+
display_name: "Ship / Cargo Type"
|
|
263
|
+
mergeability: not_mergeable
|
|
264
|
+
domain_flavors: ["ship"]
|
|
265
|
+
examples: ["General cargo/multipurpose", "Oil tanker"]
|
|
266
|
+
passive: true
|
|
267
|
+
|
|
268
|
+
- name: "grossTonnage"
|
|
269
|
+
type: float
|
|
270
|
+
description: "Gross registered tonnage of the vessel"
|
|
271
|
+
display_name: "Gross Tonnage"
|
|
272
|
+
mergeability: not_mergeable
|
|
273
|
+
domain_flavors: ["ship"]
|
|
274
|
+
passive: true
|
|
275
|
+
|
|
276
|
+
# Aircraft properties
|
|
277
|
+
- name: "serial_number"
|
|
278
|
+
type: string
|
|
279
|
+
description: "Manufacturer serial number of the aircraft"
|
|
280
|
+
display_name: "Serial Number"
|
|
281
|
+
mergeability: not_mergeable
|
|
282
|
+
domain_flavors: ["aircraft"]
|
|
283
|
+
passive: true
|
|
284
|
+
|
|
285
|
+
- name: "tailNumber"
|
|
286
|
+
type: string
|
|
287
|
+
description: "Registration number (tail number) of the aircraft"
|
|
288
|
+
display_name: "Tail Number"
|
|
289
|
+
mergeability: not_mergeable
|
|
290
|
+
domain_flavors: ["aircraft"]
|
|
291
|
+
passive: true
|
|
292
|
+
|
|
293
|
+
- name: "model"
|
|
294
|
+
type: string
|
|
295
|
+
description: "Aircraft model"
|
|
296
|
+
display_name: "Model"
|
|
297
|
+
mergeability: not_mergeable
|
|
298
|
+
domain_flavors: ["aircraft"]
|
|
299
|
+
examples: ["Gulfstream 200", "Boeing 737"]
|
|
300
|
+
passive: true
|
|
301
|
+
|
|
302
|
+
# Security properties
|
|
303
|
+
- name: "isin"
|
|
304
|
+
type: string
|
|
305
|
+
description: "International Securities Identification Number (ISO 6166) uniquely identifying this financial instrument"
|
|
306
|
+
display_name: "ISIN"
|
|
307
|
+
mergeability: not_mergeable
|
|
308
|
+
domain_flavors: ["financial_instrument"]
|
|
309
|
+
passive: true
|
|
310
|
+
|
|
311
|
+
- name: "cusip_number"
|
|
312
|
+
type: string
|
|
313
|
+
description: "CUSIP identifier for the security"
|
|
314
|
+
display_name: "CUSIP Number"
|
|
315
|
+
mergeability: not_mergeable
|
|
316
|
+
domain_flavors: ["financial_instrument"]
|
|
317
|
+
passive: true
|
|
318
|
+
|
|
319
|
+
- name: "ticker"
|
|
320
|
+
type: string
|
|
321
|
+
description: "Primary stock ticker symbol"
|
|
322
|
+
display_name: "Ticker"
|
|
323
|
+
mergeability: not_mergeable
|
|
324
|
+
domain_flavors: ["financial_instrument"]
|
|
325
|
+
passive: true
|
|
326
|
+
|
|
327
|
+
- name: "currency"
|
|
328
|
+
type: string
|
|
329
|
+
description: "Currency denomination of the security or crypto wallet"
|
|
330
|
+
display_name: "Currency"
|
|
331
|
+
mergeability: not_mergeable
|
|
332
|
+
domain_flavors: ["financial_instrument", "crypto_wallet"]
|
|
333
|
+
passive: true
|
|
334
|
+
|
|
335
|
+
- name: "figi"
|
|
336
|
+
type: string
|
|
337
|
+
description: "Financial Instrument Global Identifier (Bloomberg OpenFIGI)"
|
|
338
|
+
display_name: "FIGI"
|
|
339
|
+
mergeability: not_mergeable
|
|
340
|
+
domain_flavors: ["financial_instrument"]
|
|
341
|
+
passive: true
|
|
342
|
+
|
|
343
|
+
# issuer is modeled as the instrument_issuer relationship (see relationships section)
|
|
344
|
+
|
|
345
|
+
# CryptoWallet properties
|
|
346
|
+
- name: "public_key"
|
|
347
|
+
type: string
|
|
348
|
+
description: "Blockchain public key or wallet address"
|
|
349
|
+
display_name: "Public Key"
|
|
350
|
+
mergeability: not_mergeable
|
|
351
|
+
domain_flavors: ["crypto_wallet"]
|
|
352
|
+
passive: true
|
|
353
|
+
|
|
354
|
+
# Document properties
|
|
355
|
+
- name: "document_number"
|
|
356
|
+
type: string
|
|
357
|
+
description: "Passport or identity document number"
|
|
358
|
+
display_name: "Document Number"
|
|
359
|
+
mergeability: not_mergeable
|
|
360
|
+
domain_flavors: ["identity_document"]
|
|
361
|
+
passive: true
|
|
362
|
+
|
|
363
|
+
- name: "document_country"
|
|
364
|
+
type: string
|
|
365
|
+
description: "Issuing country of the identity document"
|
|
366
|
+
display_name: "Document Country"
|
|
367
|
+
mergeability: not_mergeable
|
|
368
|
+
domain_flavors: ["identity_document"]
|
|
369
|
+
passive: true
|
|
370
|
+
|
|
371
|
+
# Article properties
|
|
372
|
+
- name: "title"
|
|
373
|
+
type: string
|
|
374
|
+
description: "Title of the entity"
|
|
375
|
+
display_name: "Title"
|
|
376
|
+
mergeability: not_mergeable
|
|
377
|
+
domain_flavors: ["article"]
|
|
378
|
+
passive: true
|
|
379
|
+
|
|
380
|
+
- name: "published_at"
|
|
381
|
+
type: string
|
|
382
|
+
description: "Publication date of the article"
|
|
383
|
+
display_name: "Published At"
|
|
384
|
+
mergeability: not_mergeable
|
|
385
|
+
domain_flavors: ["article"]
|
|
386
|
+
passive: true
|
|
387
|
+
|
|
388
|
+
# Sanction program properties
|
|
389
|
+
- name: "program_description"
|
|
390
|
+
type: string
|
|
391
|
+
description: "Description of the sanctions program and its legal basis"
|
|
392
|
+
display_name: "Program Description"
|
|
393
|
+
mergeability: not_mergeable
|
|
394
|
+
domain_flavors: ["sanction_program"]
|
|
395
|
+
passive: true
|
|
396
|
+
|
|
397
|
+
- name: "program_url"
|
|
398
|
+
type: string
|
|
399
|
+
description: "URL of the official sanctions program page"
|
|
400
|
+
display_name: "Program URL"
|
|
401
|
+
mergeability: not_mergeable
|
|
402
|
+
domain_flavors: ["sanction_program"]
|
|
403
|
+
passive: true
|
|
404
|
+
|
|
405
|
+
- name: "program_issuer"
|
|
406
|
+
type: string
|
|
407
|
+
description: "Government body or authority that administers the sanctions program"
|
|
408
|
+
display_name: "Program Issuer"
|
|
409
|
+
mergeability: not_mergeable
|
|
410
|
+
domain_flavors: ["sanction_program"]
|
|
411
|
+
passive: true
|
|
412
|
+
|
|
413
|
+
- name: "program_measures"
|
|
414
|
+
type: string
|
|
415
|
+
description: "Type of sanctions measures imposed by the program, one atom per measure"
|
|
416
|
+
display_name: "Program Measures"
|
|
417
|
+
mergeability: not_mergeable
|
|
418
|
+
domain_flavors: ["sanction_program"]
|
|
419
|
+
passive: true
|
|
420
|
+
|
|
138
421
|
relationships:
|
|
139
422
|
- name: "sanction_program"
|
|
140
423
|
description: "Links a sanctioned entity to the sanctions program under which it is designated"
|
|
141
424
|
display_name: "Sanction Program"
|
|
142
425
|
mergeability: not_mergeable
|
|
143
|
-
domain_flavors: ["person", "organization"]
|
|
144
|
-
target_flavors: ["sanction_program"]
|
|
426
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "location", "physical_asset"]
|
|
427
|
+
target_flavors: ["sanction_program", "organization"]
|
|
428
|
+
passive: true
|
|
429
|
+
|
|
430
|
+
- name: "flag"
|
|
431
|
+
description: "Links a vessel to its flag state country"
|
|
432
|
+
display_name: "Flag"
|
|
433
|
+
mergeability: not_mergeable
|
|
434
|
+
domain_flavors: ["ship"]
|
|
435
|
+
target_flavors: ["location"]
|
|
145
436
|
passive: true
|
|
146
437
|
|
|
147
438
|
- name: "country"
|
|
148
439
|
description: "Links a sanctioned organization to its associated country"
|
|
149
440
|
display_name: "Country"
|
|
150
441
|
mergeability: not_mergeable
|
|
151
|
-
domain_flavors: ["organization"]
|
|
152
|
-
target_flavors: ["
|
|
442
|
+
domain_flavors: ["organization", "legal_entity", "ship", "financial_instrument", "physical_asset", "political_position"]
|
|
443
|
+
target_flavors: ["location"]
|
|
444
|
+
passive: true
|
|
445
|
+
|
|
446
|
+
- name: "owns"
|
|
447
|
+
description: "A person or organization owns or controls another organization or location (such as real estate)."
|
|
448
|
+
display_name: "Owns"
|
|
449
|
+
mergeability: not_mergeable
|
|
450
|
+
domain_flavors: ["person", "organization", "legal_entity"]
|
|
451
|
+
target_flavors: ["organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "physical_asset", "location"]
|
|
452
|
+
passive: true
|
|
453
|
+
|
|
454
|
+
- name: "is_director"
|
|
455
|
+
description: "A person or entity is on the board of directors of an organization. Not to be used for heads of organizations."
|
|
456
|
+
display_name: "Is Director"
|
|
457
|
+
mergeability: not_mergeable
|
|
458
|
+
domain_flavors: ["person", "legal_entity", "organization"]
|
|
459
|
+
target_flavors: ["organization", "legal_entity"]
|
|
460
|
+
passive: true
|
|
461
|
+
|
|
462
|
+
- name: "holds_political_position"
|
|
463
|
+
description: "Links a politically exposed person to the position they hold"
|
|
464
|
+
display_name: "Holds Political Position"
|
|
465
|
+
mergeability: not_mergeable
|
|
466
|
+
domain_flavors: ["person", "legal_entity"]
|
|
467
|
+
target_flavors: ["political_position"]
|
|
468
|
+
passive: true
|
|
469
|
+
|
|
470
|
+
- name: "is_holder"
|
|
471
|
+
description: "Links a person to an identity document (passport, national ID)"
|
|
472
|
+
display_name: "Is Holder"
|
|
473
|
+
mergeability: not_mergeable
|
|
474
|
+
domain_flavors: ["person", "legal_entity"]
|
|
475
|
+
target_flavors: ["identity_document"]
|
|
476
|
+
passive: true
|
|
477
|
+
|
|
478
|
+
- name: "instrument_issuer"
|
|
479
|
+
description: "Links a financial instrument to the organization that issued it"
|
|
480
|
+
display_name: "Instrument Issuer"
|
|
481
|
+
mergeability: not_mergeable
|
|
482
|
+
domain_flavors: ["financial_instrument"]
|
|
483
|
+
target_flavors: ["organization", "legal_entity"]
|
|
484
|
+
passive: true
|
|
485
|
+
|
|
486
|
+
- name: "appears_in"
|
|
487
|
+
description: "An entity or event appears in a source document"
|
|
488
|
+
display_name: "Appears In"
|
|
489
|
+
mergeability: not_mergeable
|
|
490
|
+
domain_flavors: ["person", "organization", "legal_entity"]
|
|
491
|
+
target_flavors: ["article"]
|
|
492
|
+
passive: true
|
|
493
|
+
|
|
494
|
+
- name: "family_member"
|
|
495
|
+
description: "Links a person to a family member (spouse, parent, child, sibling)"
|
|
496
|
+
display_name: "Family Member"
|
|
497
|
+
mergeability: not_mergeable
|
|
498
|
+
domain_flavors: ["person", "legal_entity"]
|
|
499
|
+
target_flavors: ["person", "legal_entity"]
|
|
500
|
+
passive: true
|
|
501
|
+
|
|
502
|
+
- name: "associated_with"
|
|
503
|
+
description: "A generic association between two entities, from UnknownLink or Associate schemas"
|
|
504
|
+
display_name: "Associated With"
|
|
505
|
+
mergeability: not_mergeable
|
|
506
|
+
domain_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "physical_asset"]
|
|
507
|
+
target_flavors: ["person", "organization", "legal_entity", "ship", "aircraft", "financial_instrument", "crypto_wallet", "physical_asset"]
|
|
508
|
+
passive: true
|
|
509
|
+
|
|
510
|
+
- name: "succeeds"
|
|
511
|
+
description: "Links a successor entity to its predecessor (positions or organizations)"
|
|
512
|
+
display_name: "Succeeds"
|
|
513
|
+
mergeability: not_mergeable
|
|
514
|
+
domain_flavors: ["person", "organization", "legal_entity", "political_position"]
|
|
515
|
+
target_flavors: ["person", "organization", "legal_entity", "political_position"]
|
|
516
|
+
passive: true
|
|
517
|
+
|
|
518
|
+
- name: "represents"
|
|
519
|
+
description: "A person or entity legally or diplomatically represents another entity"
|
|
520
|
+
display_name: "Represents"
|
|
521
|
+
mergeability: not_mergeable
|
|
522
|
+
domain_flavors: ["person", "organization", "legal_entity"]
|
|
523
|
+
target_flavors: ["person", "organization", "legal_entity"]
|
|
524
|
+
passive: true
|
|
525
|
+
|
|
526
|
+
- name: "is_member"
|
|
527
|
+
description: "A person is a member of an organization"
|
|
528
|
+
display_name: "Is Member"
|
|
529
|
+
mergeability: not_mergeable
|
|
530
|
+
domain_flavors: ["person", "legal_entity"]
|
|
531
|
+
target_flavors: ["organization", "legal_entity"]
|
|
532
|
+
passive: true
|
|
533
|
+
|
|
534
|
+
- name: "employed_by"
|
|
535
|
+
description: "A person is employed by an organization"
|
|
536
|
+
display_name: "Employed By"
|
|
537
|
+
mergeability: not_mergeable
|
|
538
|
+
domain_flavors: ["person", "legal_entity"]
|
|
539
|
+
target_flavors: ["organization", "legal_entity"]
|
|
540
|
+
passive: true
|
|
541
|
+
|
|
542
|
+
- name: "paid"
|
|
543
|
+
description: "One entity made a payment to another"
|
|
544
|
+
display_name: "Paid"
|
|
545
|
+
mergeability: not_mergeable
|
|
546
|
+
domain_flavors: ["person", "organization", "legal_entity", "physical_asset"]
|
|
547
|
+
target_flavors: ["person", "organization", "legal_entity", "physical_asset"]
|
|
548
|
+
passive: true
|
|
549
|
+
|
|
550
|
+
- name: "owes_debt"
|
|
551
|
+
description: "One entity owes a debt to another"
|
|
552
|
+
display_name: "Owes Debt"
|
|
553
|
+
mergeability: not_mergeable
|
|
554
|
+
domain_flavors: ["person", "organization", "legal_entity", "physical_asset"]
|
|
555
|
+
target_flavors: ["person", "organization", "legal_entity", "physical_asset"]
|
|
556
|
+
passive: true
|
|
557
|
+
|
|
558
|
+
attributes:
|
|
559
|
+
- property: "sanction_program"
|
|
560
|
+
name: "authority"
|
|
561
|
+
type: string
|
|
562
|
+
description: "Name of the sanctioning authority"
|
|
563
|
+
display_name: "Authority"
|
|
564
|
+
mergeability: not_mergeable
|
|
565
|
+
passive: true
|
|
566
|
+
|
|
567
|
+
- property: "sanction_program"
|
|
568
|
+
name: "reason"
|
|
569
|
+
type: string
|
|
570
|
+
description: "Reason(s) for the sanctions designation"
|
|
571
|
+
display_name: "Reason"
|
|
572
|
+
mergeability: not_mergeable
|
|
573
|
+
passive: true
|
|
574
|
+
|
|
575
|
+
- property: "sanction_program"
|
|
576
|
+
name: "listing_date"
|
|
577
|
+
type: string
|
|
578
|
+
description: "Date when the entity was listed under this program"
|
|
579
|
+
display_name: "Listing Date"
|
|
580
|
+
mergeability: not_mergeable
|
|
581
|
+
passive: true
|
|
582
|
+
|
|
583
|
+
- property: "sanction_program"
|
|
584
|
+
name: "start_date"
|
|
585
|
+
type: string
|
|
586
|
+
description: "Start date of the sanctions measures"
|
|
587
|
+
display_name: "Start Date"
|
|
588
|
+
mergeability: not_mergeable
|
|
589
|
+
passive: true
|
|
590
|
+
|
|
591
|
+
- property: "sanction_program"
|
|
592
|
+
name: "end_date"
|
|
593
|
+
type: string
|
|
594
|
+
description: "End date of the sanctions measures, if lifted"
|
|
595
|
+
display_name: "End Date"
|
|
596
|
+
mergeability: not_mergeable
|
|
597
|
+
passive: true
|
|
598
|
+
|
|
599
|
+
- property: "sanction_program"
|
|
600
|
+
name: "status"
|
|
601
|
+
type: string
|
|
602
|
+
description: "Current status of the designation"
|
|
603
|
+
display_name: "Status"
|
|
604
|
+
mergeability: not_mergeable
|
|
605
|
+
passive: true
|
|
606
|
+
|
|
607
|
+
- property: "sanction_program"
|
|
608
|
+
name: "provisions"
|
|
609
|
+
type: string
|
|
610
|
+
description: "Legal provisions under which the entity is designated"
|
|
611
|
+
display_name: "Provisions"
|
|
612
|
+
mergeability: not_mergeable
|
|
613
|
+
passive: true
|
|
614
|
+
|
|
615
|
+
- property: "sanction_program"
|
|
616
|
+
name: "summary"
|
|
617
|
+
type: string
|
|
618
|
+
description: "Summary of the sanctions designation"
|
|
619
|
+
display_name: "Summary"
|
|
620
|
+
mergeability: not_mergeable
|
|
621
|
+
passive: true
|
|
622
|
+
|
|
623
|
+
- property: "family_member"
|
|
624
|
+
name: "relationship_type"
|
|
625
|
+
type: string
|
|
626
|
+
description: "Type of family relationship (e.g. spouse, child, parent, sibling)"
|
|
627
|
+
display_name: "Relationship Type"
|
|
628
|
+
mergeability: not_mergeable
|
|
629
|
+
passive: true
|
|
630
|
+
|
|
631
|
+
- property: "associated_with"
|
|
632
|
+
name: "role"
|
|
633
|
+
type: string
|
|
634
|
+
description: "Role or nature of the association"
|
|
635
|
+
display_name: "Role"
|
|
636
|
+
mergeability: not_mergeable
|
|
637
|
+
passive: true
|
|
638
|
+
|
|
639
|
+
- property: "associated_with"
|
|
640
|
+
name: "relationship_type"
|
|
641
|
+
type: string
|
|
642
|
+
description: "Type of association (e.g. partner in business, significant person)"
|
|
643
|
+
display_name: "Relationship Type"
|
|
644
|
+
mergeability: not_mergeable
|
|
645
|
+
passive: true
|
|
646
|
+
|
|
647
|
+
- property: "represents"
|
|
648
|
+
name: "role"
|
|
649
|
+
type: string
|
|
650
|
+
description: "Nature of the representation (e.g. lawyer, diplomat)"
|
|
651
|
+
display_name: "Role"
|
|
652
|
+
mergeability: not_mergeable
|
|
653
|
+
passive: true
|
|
654
|
+
|
|
655
|
+
- property: "is_member"
|
|
656
|
+
name: "role"
|
|
657
|
+
type: string
|
|
658
|
+
description: "Role within the organization"
|
|
659
|
+
display_name: "Role"
|
|
660
|
+
mergeability: not_mergeable
|
|
661
|
+
passive: true
|
|
662
|
+
|
|
663
|
+
- property: "employed_by"
|
|
664
|
+
name: "role"
|
|
665
|
+
type: string
|
|
666
|
+
description: "Job title or role"
|
|
667
|
+
display_name: "Role"
|
|
668
|
+
mergeability: not_mergeable
|
|
669
|
+
passive: true
|
|
670
|
+
|
|
671
|
+
- property: "paid"
|
|
672
|
+
name: "summary"
|
|
673
|
+
type: string
|
|
674
|
+
description: "Description of the payment"
|
|
675
|
+
display_name: "Summary"
|
|
676
|
+
mergeability: not_mergeable
|
|
677
|
+
passive: true
|
|
678
|
+
|
|
679
|
+
- property: "owes_debt"
|
|
680
|
+
name: "summary"
|
|
681
|
+
type: string
|
|
682
|
+
description: "Description of the debt"
|
|
683
|
+
display_name: "Summary"
|
|
684
|
+
mergeability: not_mergeable
|
|
153
685
|
passive: true
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Source Overview
|
|
4
4
|
|
|
5
|
-
Alpha Vantage stock market data via the `TIME_SERIES_DAILY` REST
|
|
5
|
+
Alpha Vantage stock market data via the `TIME_SERIES_DAILY` and `TIME_SERIES_INTRADAY` REST APIs. Provides daily and 15-minute OHLCV (open, high, low, close, volume) candlestick data for US-listed equities on NYSE, NASDAQ, and AMEX exchanges.
|
|
6
6
|
|
|
7
|
-
Historical data
|
|
7
|
+
Historical data uses daily candles: `outputsize=full` (20+ years) for initial backfill, `outputsize=compact` (last 100 trading days) for incremental catch-ups. Current-day data uses intraday candles at 15-minute intervals (15-min delayed). The streamer automatically handles both: daily backfill when needed, plus intraday polling every 15 minutes.
|
|
8
8
|
|
|
9
9
|
Symbol universe: ~6,900 tickers (after filtering preferred stock symbols) sourced from the NASDAQ screener (static CSV, downloaded 2026-03-13). Symbols containing `^` (preferred shares) are excluded because Alpha Vantage does not support them.
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ Rate limit: 1,200 requests/minute (premium plan). Downloads run concurrently (10
|
|
|
12
12
|
|
|
13
13
|
| Pipeline | `Record.Source` |
|
|
14
14
|
|----------|----------------|
|
|
15
|
-
| Daily OHLCV | `stocks` |
|
|
15
|
+
| Daily + Intraday OHLCV | `stocks` |
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -68,32 +68,32 @@ A company or entity whose equity securities are publicly traded on a US exchange
|
|
|
68
68
|
* Examples: `"Computer Manufacturing"`, `"Biotechnology: Laboratory Analytical Instruments"`
|
|
69
69
|
* Derivation: `industry` field from the NASDAQ screener CSV. May be empty.
|
|
70
70
|
|
|
71
|
-
#### Price Data (per
|
|
71
|
+
#### Price Data (per candle)
|
|
72
72
|
|
|
73
|
-
Each record represents one
|
|
73
|
+
Each record represents one OHLCV candlestick for a single security. For daily candles the timestamp is the trading day's date; for intraday candles it is the interval's start time. All timestamps are Eastern time, converted to UTC.
|
|
74
74
|
|
|
75
75
|
* `open_price`
|
|
76
|
-
* Definition: Opening price of the trading
|
|
76
|
+
* Definition: Opening price of the trading interval. Unit: USD.
|
|
77
77
|
* Examples: `233.55`, `247.10`
|
|
78
|
-
* Derivation: `1. open` field from Alpha Vantage
|
|
78
|
+
* Derivation: `1. open` field from Alpha Vantage time series response, parsed as float.
|
|
79
79
|
|
|
80
80
|
* `high_price`
|
|
81
|
-
* Definition: Highest price reached during the trading
|
|
81
|
+
* Definition: Highest price reached during the trading interval. Unit: USD.
|
|
82
82
|
* Examples: `234.00`, `250.05`
|
|
83
83
|
* Derivation: `2. high` field from Alpha Vantage response, parsed as float.
|
|
84
84
|
|
|
85
85
|
* `low_price`
|
|
86
|
-
* Definition: Lowest price reached during the trading
|
|
86
|
+
* Definition: Lowest price reached during the trading interval. Unit: USD.
|
|
87
87
|
* Examples: `233.00`, `245.64`
|
|
88
88
|
* Derivation: `3. low` field from Alpha Vantage response, parsed as float.
|
|
89
89
|
|
|
90
90
|
* `close_price`
|
|
91
|
-
* Definition: Closing price of the trading
|
|
91
|
+
* Definition: Closing price of the trading interval. Unit: USD.
|
|
92
92
|
* Examples: `233.50`, `247.68`
|
|
93
93
|
* Derivation: `4. close` field from Alpha Vantage response, parsed as float.
|
|
94
94
|
|
|
95
95
|
* `trading_volume`
|
|
96
|
-
* Definition: Number of shares traded during the
|
|
96
|
+
* Definition: Number of shares traded during the interval. Unit: shares.
|
|
97
97
|
* Examples: `1858`, `5547724`
|
|
98
98
|
* Derivation: `5. volume` field from Alpha Vantage response, parsed as integer (stored as float per v2 convention).
|
|
99
99
|
|
|
@@ -118,5 +118,5 @@ organization ──[traded_as]──→ financial_instrument
|
|
|
118
118
|
- **Timestamps**: Alpha Vantage returns timestamps in US/Eastern time. All atom timestamps are converted to UTC before storage.
|
|
119
119
|
- **Adjusted prices**: The daily endpoint returns raw (as-traded) prices. Split/dividend-adjusted data is available via `TIME_SERIES_DAILY_ADJUSTED` (premium) but is not currently used.
|
|
120
120
|
- **Missing data**: Not all symbols have data for all dates. Candles only exist for days with trading activity.
|
|
121
|
-
- **Streaming model**: HandleStream runs as a
|
|
121
|
+
- **Streaming model**: HandleStream runs as a unified polling loop (default: every 15 minutes). First run downloads full daily history (`outputsize=full`) plus current-day intraday data. Subsequent runs download compact daily data once per day to catch yesterday's close, then poll intraday data every 15 minutes. Only candles newer than the checkpoint are atomized.
|
|
122
122
|
- **Preferred stock symbols**: Tickers containing `^` (e.g., `AHT^F`, `F^C`) are filtered out during symbol loading because Alpha Vantage returns empty responses for them.
|
package/skill/stocks/schema.yaml
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# All elements are passive -- created by the atomizer from structured JSON
|
|
8
8
|
# fields, not by LLM extraction.
|
|
9
9
|
name: "stocks"
|
|
10
|
-
description: "US equity OHLCV price data from Alpha Vantage, covering NYSE, NASDAQ, and AMEX listed securities
|
|
10
|
+
description: "US equity OHLCV price data from Alpha Vantage, covering NYSE, NASDAQ, and AMEX listed securities. Daily candles for historical data, 15-minute intraday candles for current-day data."
|
|
11
11
|
|
|
12
12
|
extraction:
|
|
13
13
|
flavors: closed
|
|
@@ -129,3 +129,43 @@ relationships:
|
|
|
129
129
|
target_flavors: ["financial_instrument"]
|
|
130
130
|
examples: ["Apple Inc. traded as AAPL", "International Business Machines Corporation traded as IBM"]
|
|
131
131
|
passive: true
|
|
132
|
+
|
|
133
|
+
# Each price and volume atom carries a candle_interval attribute indicating
|
|
134
|
+
# the time period it covers. Only representative entries are listed; the
|
|
135
|
+
# attribute is added dynamically by the atomizer to all price/volume atoms.
|
|
136
|
+
|
|
137
|
+
attributes:
|
|
138
|
+
- property: "open_price"
|
|
139
|
+
name: "candle_interval"
|
|
140
|
+
type: string
|
|
141
|
+
description: "Time period covered by this candle: '1day' for daily end-of-day, '15min'/'5min'/'1min' for intraday"
|
|
142
|
+
display_name: "Candle Interval"
|
|
143
|
+
mergeability: not_mergeable
|
|
144
|
+
|
|
145
|
+
- property: "high_price"
|
|
146
|
+
name: "candle_interval"
|
|
147
|
+
type: string
|
|
148
|
+
description: "Time period covered by this candle: '1day' for daily end-of-day, '15min'/'5min'/'1min' for intraday"
|
|
149
|
+
display_name: "Candle Interval"
|
|
150
|
+
mergeability: not_mergeable
|
|
151
|
+
|
|
152
|
+
- property: "low_price"
|
|
153
|
+
name: "candle_interval"
|
|
154
|
+
type: string
|
|
155
|
+
description: "Time period covered by this candle: '1day' for daily end-of-day, '15min'/'5min'/'1min' for intraday"
|
|
156
|
+
display_name: "Candle Interval"
|
|
157
|
+
mergeability: not_mergeable
|
|
158
|
+
|
|
159
|
+
- property: "close_price"
|
|
160
|
+
name: "candle_interval"
|
|
161
|
+
type: string
|
|
162
|
+
description: "Time period covered by this candle: '1day' for daily end-of-day, '15min'/'5min'/'1min' for intraday"
|
|
163
|
+
display_name: "Candle Interval"
|
|
164
|
+
mergeability: not_mergeable
|
|
165
|
+
|
|
166
|
+
- property: "trading_volume"
|
|
167
|
+
name: "candle_interval"
|
|
168
|
+
type: string
|
|
169
|
+
description: "Time period covered by this candle: '1day' for daily end-of-day, '15min'/'5min'/'1min' for intraday"
|
|
170
|
+
display_name: "Candle Interval"
|
|
171
|
+
mergeability: not_mergeable
|