@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yottagraph-app/data-model-skill",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Data model skill documentation for AI agents - entity types, properties, and schemas from Lovelace fetch sources",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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: "country"
37
- description: "A country referenced by sanctioned organizations, identified by ISO country code"
38
- display_name: "Country"
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: "sanctioned"
114
- type: float
115
- description: "Boolean flag indicating this entity is a sanctions target, emitted only when no notes are present as a fallback marker"
116
- display_name: "Sanctioned"
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 sanctioned organization as stated in the sanctions listing"
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: "sector"
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: ["country"]
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 API. Provides daily OHLCV (open, high, low, close, volume) candlestick data for US-listed equities on NYSE, NASDAQ, and AMEX exchanges.
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 available via `outputsize=full` (20+ years). Recent data (last 100 trading days) available via `outputsize=compact`. The streamer uses `full` for initial backfill and `compact` for daily incremental updates.
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 daily candle)
71
+ #### Price Data (per candle)
72
72
 
73
- Each record represents one daily OHLCV candlestick for a single security. The atom timestamp is the trading day's date (Eastern time, converted to UTC).
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 day. Unit: USD.
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 `Time Series (Daily)` response, parsed as float.
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 day. Unit: USD.
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 day. Unit: USD.
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 day. Unit: USD.
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 day. Unit: shares.
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 continuous polling loop. First run downloads full history (`outputsize=full`). Subsequent runs download compact data (`outputsize=compact`, last 100 trading days) and atomize only candles newer than the checkpoint. Default poll interval: 24 hours.
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.
@@ -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 at 15-minute and daily intervals"
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