@yottagraph-app/data-model-skill 0.0.39 → 0.0.41

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.39",
3
+ "version": "0.0.41",
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",
@@ -0,0 +1,134 @@
1
+ # Data Dictionary: Finnhub Bonds (ISIN-LEI + Bond Prices)
2
+
3
+ Last updated: 2026-05-28
4
+
5
+ ## Source Overview
6
+
7
+ This source combines two upstream datasets:
8
+
9
+ 1. **GLEIF-ANNA ISIN-to-LEI mapping** — daily open-source file linking financial instruments (ISIN) to issuers (LEI). The published ZIP is a **full snapshot** of mappings from participating national numbering agencies (~8.7M pairs as of May 2026), refreshed daily. It is not a delta of only newly issued ISINs from the prior day.
10
+ 2. **Finnhub bond prices** — end-of-day close prices from `GET /bond/price` for each ISIN in the mapping file, fetched for **yesterday UTC** each poll cycle.
11
+
12
+ The streamer uses the **diffing** pipeline (`DiffingStreamer`): each mapping pair and each ISIN price observation is stored as JSON under the raw download store, SHA-256 compared against the previous run, and only changed rows are atomized and published.
13
+
14
+ | Item | Value |
15
+ |------|--------|
16
+ | Stream source constant | `finnhubbond-source` |
17
+ | `Record.Source` | `finnhubbond` |
18
+ | GLEIF mapping API | `https://mapping.gleif.org/api/v2/isin-lei` |
19
+ | Finnhub price API | `https://finnhub.io/api/v1/bond/price` |
20
+ | Default poll cadence | 1440 min (`pollTimeMin`) |
21
+
22
+ **Data quality notes**
23
+
24
+ - GLEIF mapping coverage depends on participating NNAs; legacy ISINs outside the program may be absent.
25
+ - Finnhub `/bond/price` returns BondCandles (`c[]` close, `t[]` unix timestamps, `s` status). Status `no_data` produces no price record.
26
+ - Yield on `/bond/price` is only emitted when Finnhub returns a `y[]` array; TRACE trade-level yield is on `/bond/tick` (not ingested in v1).
27
+ - Many mapped ISINs may have no Finnhub price (non-US, non-TRACE, delisted). Failures are logged and skipped.
28
+
29
+ ---
30
+
31
+ ## Entity Types
32
+
33
+ ### `organization`
34
+
35
+ A legal entity that **issued** a mapped security, identified by LEI from the GLEIF-ANNA CSV.
36
+
37
+ - **Subject name:** LEI string (no legal name in mapping file).
38
+ - **Strong id:** `lei` on the organization subject.
39
+ - **Resolver:** Organization flavor `NOT_MERGEABLE`; named entity `MERGEABLE` on LEI for cross-source merge with `gleif-source` entities.
40
+ - **Emitted when:** A `(LEI, ISIN)` mapping row is new or changed in the diffing pass.
41
+
42
+ ### `financial_instrument`
43
+
44
+ A bond or fixed-income instrument identified by ISIN.
45
+
46
+ - **Subject name:** ISIN.
47
+ - **Strong id:** `isin`.
48
+ - **Resolver:** `MERGEABLE` on ISIN — aligns with `gleif`, `sanctions`, and EDGAR `holding_isin` resolution.
49
+ - **Emitted when:** (1) mapping rows add `issued_security` target entities, or (2) price rows publish close/yield observations.
50
+
51
+ ---
52
+
53
+ ## Properties
54
+
55
+ ### Organization
56
+
57
+ * `lei`
58
+ * Definition: Legal Entity Identifier (ISO 17442) of the issuer.
59
+ * Examples: `"5493001KJTIIGC8Y1R12"`
60
+ * Derivation: First CSV column in GLEIF ISIN-LEI mapping.
61
+
62
+ ### Financial instrument
63
+
64
+ * `isin`
65
+ * Definition: International Securities Identification Number (ISO 6166).
66
+ * Examples: `"US0378331005"`, `"US46625HQW33"`
67
+ * Derivation: Second CSV column in mapping; or Finnhub price query key.
68
+
69
+ * `close_price`
70
+ * Definition: Bond close price in USD from Finnhub `/bond/price` field `c[]`.
71
+ * Derivation: One atom per candle point in the response; timestamp from matching `t[]` entry.
72
+ * Attribute: `price_date` (YYYY-MM-DD UTC) on each observation atom.
73
+
74
+ * `yield`
75
+ * Definition: Bond yield when Finnhub returns field `y[]` alongside price candles.
76
+ * Derivation: Optional; same indexing as `c[]` / `t[]`. Often absent on `/bond/price`.
77
+ * Attribute: `price_date` on each observation atom.
78
+
79
+ ---
80
+
81
+ ## Relationships
82
+
83
+ * `issued_security`
84
+ * Definition: The organization (issuer LEI) has issued the target financial instrument (ISIN).
85
+ * Direction: `organization` → `financial_instrument`.
86
+ * Derivation: Each GLEIF-ANNA mapping row where both LEI and ISIN are non-empty.
87
+ * Note: Same relationship name and semantics as `gleif-source` ISIN enrichment (`buildISINAtoms`).
88
+
89
+ ---
90
+
91
+ ## Attributes
92
+
93
+ * `price_date`
94
+ * Definition: UTC calendar date of the bond price observation.
95
+ * Examples: `"2026-05-27"`
96
+ * Derivation: From Finnhub candle timestamp `t[]`, or the configured yesterday date when timestamp missing.
97
+
98
+ ---
99
+
100
+ ## Pipeline Behavior
101
+
102
+ ### FetchRows (single cycle)
103
+
104
+ 1. Download latest GLEIF ISIN-LEI ZIP.
105
+ 2. Parse CSV; emit one diffing row per `(LEI, ISIN)` pair (subject to `maxRows`).
106
+ 3. Deduplicate ISINs; optionally cap with `maxIsins`.
107
+ 4. Parallel Finnhub `/bond/price` for yesterday UTC (`priceWorkers`, `finnhubQPS`).
108
+ 5. Emit one diffing price row per ISIN (`price-{ISIN}-{date}.json`).
109
+
110
+ ### Atomization
111
+
112
+ - **Changed mapping rows:** One record per pair — organization subject + `lei` property + `issued_security` target.
113
+ - **Changed price rows:** One record per ISIN — financial_instrument subject + `isin` + `close_price` / optional `yield` atoms.
114
+
115
+ ### Configuration args
116
+
117
+ | Arg | Default | Purpose |
118
+ |-----|---------|---------|
119
+ | `finnhubToken` | `$FINNHUB_TOKEN` | Required API token |
120
+ | `priceWorkers` | 16 | Parallel Finnhub workers |
121
+ | `finnhubQPS` | 10 | Client-side rate limit |
122
+ | `maxIsins` | 0 (all) | Cap price fetches for dev |
123
+ | `maxRows` | 0 (all) | Cap mapping rows emitted |
124
+ | `writeWorkers` | 8 | Diffing raw-store parallelism |
125
+ | `batchSize` | 100 | Publish batch size |
126
+ | `pollTimeMin` | 1440 | Poll interval (minutes) |
127
+
128
+ ---
129
+
130
+ ## Cross-Source Resolution
131
+
132
+ - **`lei`** property matches `gleif.organization.lei` — issuer orgs from this source should merge with GLEIF LEI records when both exist.
133
+ - **`isin`** property matches `financial_instrument.isin` across gleif, sanctions, EDGAR holdings.
134
+ - **`issued_security`** inverse query: find issuer org whose `issued_security` points at an ISIN instrument node.
@@ -0,0 +1,241 @@
1
+ # Dataset schema for GLEIF ISIN-LEI mapping + Finnhub bond end-of-day prices.
2
+ #
3
+ # The streamer diffs LEI→ISIN mapping rows from the daily GLEIF-ANNA file and
4
+ # fetches Finnhub /bond/price candles for every ISIN in the mapping each cycle.
5
+ name: "finnhubbond"
6
+ description: "GLEIF-ANNA ISIN-to-LEI issuer mappings and Finnhub bond end-of-day close prices for mapped ISINs"
7
+
8
+ extraction:
9
+ flavors: closed
10
+ properties: closed
11
+ relationships: closed
12
+ attributes: closed
13
+ events: closed
14
+
15
+ flavors:
16
+ - name: "organization"
17
+ description: "A particular business, institution, or organization such as a corporation, university, government agency, or non-profit"
18
+ display_name: "Organization"
19
+ mergeability: not_mergeable
20
+ strong_id_properties: ["lei"]
21
+ passive: true
22
+
23
+ - name: "financial_instrument"
24
+ 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."
25
+ display_name: "Financial Instrument"
26
+ mergeability: not_mergeable
27
+ strong_id_properties: ["isin", "figi"]
28
+ passive: true
29
+
30
+ properties:
31
+ - name: "lei"
32
+ type: string
33
+ description: "Legal Entity Identifier — a 20-character alphanumeric code uniquely identifying a legal entity in the global financial system (ISO 17442)"
34
+ display_name: "LEI"
35
+ mergeability: not_mergeable
36
+ domain_flavors: ["organization"]
37
+ passive: true
38
+
39
+ - name: "isin"
40
+ type: string
41
+ description: "International Securities Identification Number (ISO 6166) uniquely identifying this financial instrument"
42
+ display_name: "ISIN"
43
+ mergeability: not_mergeable
44
+ domain_flavors: ["financial_instrument"]
45
+ passive: true
46
+
47
+ - name: "close_price"
48
+ type: float
49
+ description: "Closing price of the trading interval in USD"
50
+ display_name: "Close Price"
51
+ mergeability: not_mergeable
52
+ domain_flavors: ["financial_instrument"]
53
+ passive: true
54
+
55
+ - name: "yield"
56
+ type: float
57
+ description: "Yield on the security."
58
+ display_name: "Yield"
59
+ mergeability: not_mergeable
60
+ domain_flavors: ["financial_instrument"]
61
+ passive: true
62
+
63
+ - name: "figi"
64
+ type: string
65
+ description: "Financial Instrument Global Identifier (Bloomberg OpenFIGI)"
66
+ display_name: "FIGI"
67
+ mergeability: not_mergeable
68
+ domain_flavors: ["financial_instrument"]
69
+ passive: true
70
+
71
+ - name: "bond_type"
72
+ type: string
73
+ description: "Bond type from Finnhub /bond/profile (e.g. Corporate, Government)"
74
+ display_name: "Bond Type"
75
+ mergeability: not_mergeable
76
+ domain_flavors: ["financial_instrument"]
77
+ passive: true
78
+
79
+ - name: "debt_type"
80
+ type: string
81
+ description: "Debt type from Finnhub /bond/profile"
82
+ display_name: "Debt Type"
83
+ mergeability: not_mergeable
84
+ domain_flavors: ["financial_instrument"]
85
+ passive: true
86
+
87
+ - name: "coupon"
88
+ type: float
89
+ description: "Coupon rate of the security (e.g. 7.000% or Variable)."
90
+ display_name: "Coupon"
91
+ mergeability: not_mergeable
92
+ domain_flavors: ["financial_instrument"]
93
+ passive: true
94
+
95
+ - name: "coupon_type"
96
+ type: string
97
+ description: "Coupon type from Finnhub /bond/profile (e.g. Fixed)"
98
+ display_name: "Coupon Type"
99
+ mergeability: not_mergeable
100
+ domain_flavors: ["financial_instrument"]
101
+ passive: true
102
+
103
+ - name: "maturity_date"
104
+ type: string
105
+ description: "Maturity date of the security."
106
+ display_name: "Maturity Date"
107
+ mergeability: not_mergeable
108
+ domain_flavors: ["financial_instrument"]
109
+ passive: true
110
+
111
+ - name: "issue_date"
112
+ type: string
113
+ description: "Issue date of the bonds."
114
+ display_name: "Issue Date"
115
+ mergeability: not_mergeable
116
+ domain_flavors: ["financial_instrument"]
117
+ passive: true
118
+
119
+ - name: "first_coupon_date"
120
+ type: string
121
+ description: "First coupon date from Finnhub /bond/profile"
122
+ display_name: "First Coupon Date"
123
+ mergeability: not_mergeable
124
+ domain_flavors: ["financial_instrument"]
125
+ passive: true
126
+
127
+ - name: "dated_date"
128
+ type: string
129
+ description: "Dated date of the bonds."
130
+ display_name: "Dated Date"
131
+ mergeability: not_mergeable
132
+ domain_flavors: ["financial_instrument"]
133
+ passive: true
134
+
135
+ - name: "payment_frequency"
136
+ type: string
137
+ description: "Payment frequency from Finnhub /bond/profile"
138
+ display_name: "Payment Frequency"
139
+ mergeability: not_mergeable
140
+ domain_flavors: ["financial_instrument"]
141
+ passive: true
142
+
143
+ - name: "security_level"
144
+ type: string
145
+ description: "Security level from Finnhub /bond/profile (e.g. Senior)"
146
+ display_name: "Security Level"
147
+ mergeability: not_mergeable
148
+ domain_flavors: ["financial_instrument"]
149
+ passive: true
150
+
151
+ - name: "amount_outstanding"
152
+ type: float
153
+ description: "Amount outstanding from Finnhub /bond/profile"
154
+ display_name: "Amount Outstanding"
155
+ mergeability: not_mergeable
156
+ domain_flavors: ["financial_instrument"]
157
+ passive: true
158
+
159
+ - name: "original_offering"
160
+ type: float
161
+ description: "Original offering amount from Finnhub /bond/profile"
162
+ display_name: "Original Offering"
163
+ mergeability: not_mergeable
164
+ domain_flavors: ["financial_instrument"]
165
+ passive: true
166
+
167
+ - name: "offering_price"
168
+ type: float
169
+ description: "Offering price from Finnhub /bond/profile"
170
+ display_name: "Offering Price"
171
+ mergeability: not_mergeable
172
+ domain_flavors: ["financial_instrument"]
173
+ passive: true
174
+
175
+ - name: "industry_group"
176
+ type: string
177
+ description: "Industry group from Finnhub /bond/profile"
178
+ display_name: "Industry Group"
179
+ mergeability: not_mergeable
180
+ domain_flavors: ["financial_instrument"]
181
+ passive: true
182
+
183
+ - name: "industry_subgroup"
184
+ type: string
185
+ description: "Industry subgroup from Finnhub /bond/profile"
186
+ display_name: "Industry Subgroup"
187
+ mergeability: not_mergeable
188
+ domain_flavors: ["financial_instrument"]
189
+ passive: true
190
+
191
+ - name: "asset"
192
+ type: string
193
+ description: "Asset from Finnhub /bond/profile"
194
+ display_name: "Asset"
195
+ mergeability: not_mergeable
196
+ domain_flavors: ["financial_instrument"]
197
+ passive: true
198
+
199
+ - name: "asset_type"
200
+ type: string
201
+ description: "Asset type from Finnhub /bond/profile"
202
+ display_name: "Asset Type"
203
+ mergeability: not_mergeable
204
+ domain_flavors: ["financial_instrument"]
205
+ passive: true
206
+
207
+ - name: "day_count"
208
+ type: string
209
+ description: "Day count convention from Finnhub /bond/profile"
210
+ display_name: "Day Count"
211
+ mergeability: not_mergeable
212
+ domain_flavors: ["financial_instrument"]
213
+ passive: true
214
+
215
+ - name: "security_term"
216
+ type: string
217
+ description: "Security term from Finnhub /bond/profile"
218
+ display_name: "Security Term"
219
+ mergeability: not_mergeable
220
+ domain_flavors: ["financial_instrument"]
221
+ passive: true
222
+
223
+ relationships:
224
+ - name: "issued_security"
225
+ description: "The organization has issued this financial instrument, linked via GLEIF-ANNA ISIN-LEI daily mapping. To find the issuer of a security, query inversely: find the entity whose issued_security points to the instrument."
226
+ display_name: "Issued Security"
227
+ mergeability: not_mergeable
228
+ domain_flavors: ["organization"]
229
+ target_flavors: ["financial_instrument"]
230
+ passive: true
231
+
232
+ attributes:
233
+ - properties:
234
+ - "close_price"
235
+ - "yield"
236
+ name: "price_date"
237
+ type: string
238
+ description: "UTC calendar date (YYYY-MM-DD) of the bond price observation from Finnhub timestamp t[]"
239
+ display_name: "Price Date"
240
+ mergeability: not_mergeable
241
+ passive: true
@@ -50,6 +50,20 @@ flavors:
50
50
  examples: ["New York City", "San Francisco", "North America", "Bakery Square"]
51
51
  passive: true
52
52
 
53
+ - name: "private_fund"
54
+ description: "A private investment fund (hedge fund, private equity, venture capital, real estate, or other pooled investment vehicle) reported by an SEC-registered investment adviser on Form ADV Schedule D Section 7.B(1). Identified by its SEC-assigned fund ID (e.g. 805-XXXXXXXX); strong-ID-resolvable across monthly filings"
55
+ display_name: "Private Fund"
56
+ mergeability: not_mergeable
57
+ strong_id_properties: ["sec_fund_id"]
58
+ passive: true
59
+
60
+ - name: "person"
61
+ description: "An individual person reported on Form ADV — typically a direct or indirect owner (Schedule A/B), an executive officer, a control person, or a DRP-affiliated individual. Identified by person_crd (FINRA-issued individual identifier) when available; otherwise resolved by name within an adviser context"
62
+ display_name: "Person"
63
+ mergeability: not_mergeable
64
+ strong_id_properties: ["person_crd"]
65
+ passive: true
66
+
53
67
  properties:
54
68
  # --- Identity and Registration ---
55
69
 
@@ -504,6 +518,526 @@ properties:
504
518
  examples: ["true", "false"]
505
519
  passive: true
506
520
 
521
+ - name: "active_through_date"
522
+ type: string
523
+ description: "Earliest date by which this firm is no longer guaranteed to still be in the IAPD daily feed. Set to the snapshot date plus one day on every AtomizeFirm record; bumps daily as long as the firm continues to appear in the feed and freezes when the firm drops off (presumed withdrawn or transitioned to a different regulator). Downstream consumers can detect withdrawal by checking whether today exceeds this date by more than the feed's expected lag (≈7-14 days)"
524
+ display_name: "Active Through Date"
525
+ mergeability: not_mergeable
526
+ domain_flavors: ["organization"]
527
+ examples: ["2026-05-29", "2026-05-30"]
528
+ passive: true
529
+
530
+ # --- Private Fund Identity (Schedule D 7.B(1)) ---
531
+
532
+ - name: "sec_fund_id"
533
+ type: string
534
+ description: "SEC-assigned identifier for a private fund reported on Form ADV Schedule D Section 7.B(1) (e.g. 805-XXXXXXXX). Canonical strong ID for the private_fund flavor, stable across monthly filings and across changes to the fund's adviser-of-record. Derived from the \"Fund ID\" column of the IA_Schedule_D_7B1 CSV table"
535
+ display_name: "SEC Fund ID"
536
+ mergeability: not_mergeable
537
+ domain_flavors: ["private_fund"]
538
+ examples: ["805-12345678", "805-87654321"]
539
+ passive: true
540
+
541
+ - name: "fund_name"
542
+ type: string
543
+ description: "Legal name of the private fund as reported on Form ADV Schedule D Section 7.B(1). Derived from the \"Fund Name\" column"
544
+ display_name: "Fund Name"
545
+ mergeability: not_mergeable
546
+ domain_flavors: ["private_fund"]
547
+ examples: ["HANSABEL INCOME, L.P.", "Acme Capital Master Fund"]
548
+ passive: true
549
+
550
+ - name: "fund_type"
551
+ type: string
552
+ description: "Fund classification per Form ADV Schedule D Section 7.B(1) Item 10 (Hedge Fund, Private Equity Fund, Venture Capital Fund, Real Estate Fund, Securitized Asset Fund, Liquidity Fund, Other Private Fund). Derived from \"Fund Type\" with fallback to \"Fund Type Other\""
553
+ display_name: "Fund Type"
554
+ mergeability: not_mergeable
555
+ domain_flavors: ["private_fund"]
556
+ examples: ["Hedge Fund", "Private Equity Fund", "Venture Capital Fund", "Real Estate Fund"]
557
+ passive: true
558
+
559
+ - name: "gross_asset_value"
560
+ type: float
561
+ description: "Gross asset value of the private fund in USD as reported on Form ADV Schedule D Section 7.B(1) Item 11. Derived from the \"Gross Asset Value\" column"
562
+ display_name: "Gross Asset Value (USD)"
563
+ mergeability: not_mergeable
564
+ domain_flavors: ["private_fund"]
565
+ examples: ["1000000000", "250000000"]
566
+ passive: true
567
+
568
+ - name: "minimum_investment"
569
+ type: float
570
+ description: "Minimum investment commitment required of investors in the private fund in USD, per Form ADV Schedule D Section 7.B(1) Item 13. Derived from the \"Minimum Investment\" column"
571
+ display_name: "Minimum Investment (USD)"
572
+ mergeability: not_mergeable
573
+ domain_flavors: ["private_fund"]
574
+ examples: ["1000000", "250000", "100000"]
575
+ passive: true
576
+
577
+ - name: "beneficial_owners"
578
+ type: float
579
+ description: "Approximate number of beneficial owners of the private fund per Form ADV Schedule D Section 7.B(1) Item 14. Derived from the \"Owners\" column"
580
+ display_name: "Beneficial Owners"
581
+ mergeability: not_mergeable
582
+ domain_flavors: ["private_fund"]
583
+ examples: ["25", "100", "500"]
584
+ passive: true
585
+
586
+ - name: "pct_owned_non_us"
587
+ type: float
588
+ description: "Approximate percentage of the private fund's beneficial owners that are non-United States persons per Form ADV Schedule D Section 7.B(1) Item 15. Derived from the \"%Owned Non-US\" column"
589
+ display_name: "% Owned Non-US"
590
+ mergeability: not_mergeable
591
+ domain_flavors: ["private_fund"]
592
+ examples: ["0", "25", "75"]
593
+ passive: true
594
+
595
+ - name: "jurisdiction_state"
596
+ type: string
597
+ description: "US state of organization for the private fund as reported on Form ADV Schedule D Section 7.B(1). Derived from the \"State\" column; empty for funds organized outside the US"
598
+ display_name: "Jurisdiction (State)"
599
+ mergeability: not_mergeable
600
+ domain_flavors: ["private_fund"]
601
+ examples: ["DE", "NY", "CA"]
602
+ passive: true
603
+
604
+ - name: "jurisdiction_country"
605
+ type: string
606
+ description: "Country of organization for the private fund as reported on Form ADV Schedule D Section 7.B(1). Derived from the \"Country\" column"
607
+ display_name: "Jurisdiction (Country)"
608
+ mergeability: not_mergeable
609
+ domain_flavors: ["private_fund"]
610
+ examples: ["United States", "Cayman Islands", "Luxembourg", "Ireland"]
611
+ passive: true
612
+
613
+ - name: "is_master_fund"
614
+ type: float
615
+ description: "0.0/1.0 flag indicating whether the private fund is a master fund in a master-feeder structure, per Form ADV Schedule D Section 7.B(1). Derived from the \"Master Fund\" Y/N column"
616
+ display_name: "Is Master Fund"
617
+ mergeability: not_mergeable
618
+ domain_flavors: ["private_fund"]
619
+ examples: ["0", "1"]
620
+ passive: true
621
+
622
+ - name: "is_feeder_fund"
623
+ type: float
624
+ description: "0.0/1.0 flag indicating whether the private fund is a feeder fund into a master fund, per Form ADV Schedule D Section 7.B(1). Derived from the \"Feeder Fund\" Y/N column"
625
+ display_name: "Is Feeder Fund"
626
+ mergeability: not_mergeable
627
+ domain_flavors: ["private_fund"]
628
+ examples: ["0", "1"]
629
+ passive: true
630
+
631
+ - name: "is_fund_of_funds"
632
+ type: float
633
+ description: "0.0/1.0 flag indicating whether the private fund is a fund-of-funds per Form ADV Schedule D Section 7.B(1). Derived from the \"Fund of Funds\" Y/N column"
634
+ display_name: "Is Fund of Funds"
635
+ mergeability: not_mergeable
636
+ domain_flavors: ["private_fund"]
637
+ examples: ["0", "1"]
638
+ passive: true
639
+
640
+ - name: "form_d_file_number"
641
+ type: string
642
+ description: "SEC Form D file number for a private fund that has filed a Form D notice, per Form ADV Schedule D Section 7.B(1) Item 22. Derived from the \"Form D File Number\" column of the IA_Schedule_D_7B1A22 CSV table"
643
+ display_name: "Form D File Number"
644
+ mergeability: not_mergeable
645
+ domain_flavors: ["private_fund"]
646
+ examples: ["021-123456"]
647
+ passive: true
648
+
649
+ # --- Asset Allocation (Item 5K(1)) ---
650
+
651
+ - name: "pct_assets_equity_listed"
652
+ type: float
653
+ description: "Percentage of an adviser's regulatory assets under management held in exchange-listed equity securities, per Form ADV Item 5K(1)(b)(i). Derived from the 5K(1)(b)(i) column of the IA_Schedule_D_5K1 CSV table; emitted only when the cell is non-zero"
654
+ display_name: "% Assets: Listed Equity"
655
+ mergeability: not_mergeable
656
+ domain_flavors: ["organization"]
657
+ examples: ["0.5", "25", "75"]
658
+ passive: true
659
+
660
+ - name: "pct_assets_equity_unlisted"
661
+ type: float
662
+ description: "Percentage of an adviser's regulatory assets under management held in unlisted (private) equity securities, per Form ADV Item 5K(1)(b)(ii). Derived from the 5K(1)(b)(ii) column of the IA_Schedule_D_5K1 CSV table"
663
+ display_name: "% Assets: Unlisted Equity"
664
+ mergeability: not_mergeable
665
+ domain_flavors: ["organization"]
666
+ examples: ["0", "10", "50"]
667
+ passive: true
668
+
669
+ - name: "pct_assets_govt_bonds"
670
+ type: float
671
+ description: "Percentage of an adviser's regulatory assets under management held in US government and agency bonds, per Form ADV Item 5K(1)(b)(iii). Derived from the 5K(1)(b)(iii) column"
672
+ display_name: "% Assets: Government Bonds"
673
+ mergeability: not_mergeable
674
+ domain_flavors: ["organization"]
675
+ examples: ["0", "20", "60"]
676
+ passive: true
677
+
678
+ - name: "pct_assets_muni_bonds"
679
+ type: float
680
+ description: "Percentage of an adviser's regulatory assets under management held in US state and local bonds, per Form ADV Item 5K(1)(b)(iv). Derived from the 5K(1)(b)(iv) column"
681
+ display_name: "% Assets: Municipal Bonds"
682
+ mergeability: not_mergeable
683
+ domain_flavors: ["organization"]
684
+ examples: ["0", "5", "30"]
685
+ passive: true
686
+
687
+ - name: "pct_assets_sovereign_bonds"
688
+ type: float
689
+ description: "Percentage of an adviser's regulatory assets under management held in non-US sovereign bonds, per Form ADV Item 5K(1)(b)(v). Derived from the 5K(1)(b)(v) column"
690
+ display_name: "% Assets: Sovereign Bonds"
691
+ mergeability: not_mergeable
692
+ domain_flavors: ["organization"]
693
+ examples: ["0", "5", "15"]
694
+ passive: true
695
+
696
+ - name: "pct_assets_corp_bonds_ig"
697
+ type: float
698
+ description: "Percentage of an adviser's regulatory assets under management held in investment-grade corporate bonds, per Form ADV Item 5K(1)(b)(vi). Derived from the 5K(1)(b)(vi) column"
699
+ display_name: "% Assets: Corporate Bonds (IG)"
700
+ mergeability: not_mergeable
701
+ domain_flavors: ["organization"]
702
+ examples: ["0", "10", "40"]
703
+ passive: true
704
+
705
+ - name: "pct_assets_corp_bonds_hy"
706
+ type: float
707
+ description: "Percentage of an adviser's regulatory assets under management held in non-investment-grade (high-yield) corporate bonds, per Form ADV Item 5K(1)(b)(vii). Derived from the 5K(1)(b)(vii) column"
708
+ display_name: "% Assets: Corporate Bonds (HY)"
709
+ mergeability: not_mergeable
710
+ domain_flavors: ["organization"]
711
+ examples: ["0", "5", "20"]
712
+ passive: true
713
+
714
+ - name: "pct_assets_derivatives"
715
+ type: float
716
+ description: "Percentage of an adviser's regulatory assets under management held in derivatives, per Form ADV Item 5K(1)(b)(viii). Derived from the 5K(1)(b)(viii) column"
717
+ display_name: "% Assets: Derivatives"
718
+ mergeability: not_mergeable
719
+ domain_flavors: ["organization"]
720
+ examples: ["0", "2", "15"]
721
+ passive: true
722
+
723
+ - name: "pct_assets_pooled_vehicles"
724
+ type: float
725
+ description: "Percentage of an adviser's regulatory assets under management held in pooled investment vehicles (mutual funds, ETFs, private funds), per Form ADV Item 5K(1)(b)(ix). Derived from the 5K(1)(b)(ix) column"
726
+ display_name: "% Assets: Pooled Vehicles"
727
+ mergeability: not_mergeable
728
+ domain_flavors: ["organization"]
729
+ examples: ["0", "10", "50"]
730
+ passive: true
731
+
732
+ - name: "pct_assets_cash"
733
+ type: float
734
+ description: "Percentage of an adviser's regulatory assets under management held in cash and cash equivalents, per Form ADV Item 5K(1)(b)(x). Derived from the 5K(1)(b)(x) column"
735
+ display_name: "% Assets: Cash"
736
+ mergeability: not_mergeable
737
+ domain_flavors: ["organization"]
738
+ examples: ["0", "5", "30"]
739
+ passive: true
740
+
741
+ - name: "pct_assets_real_estate"
742
+ type: float
743
+ description: "Percentage of an adviser's regulatory assets under management held in real estate, per Form ADV Item 5K(1)(b)(xi). Derived from the 5K(1)(b)(xi) column"
744
+ display_name: "% Assets: Real Estate"
745
+ mergeability: not_mergeable
746
+ domain_flavors: ["organization"]
747
+ examples: ["0", "10", "50"]
748
+ passive: true
749
+
750
+ - name: "pct_assets_other"
751
+ type: float
752
+ description: "Percentage of an adviser's regulatory assets under management held in other asset categories not covered by the prior 11 buckets, per Form ADV Item 5K(1)(b)(xii). Derived from the 5K(1)(b)(xii) column"
753
+ display_name: "% Assets: Other"
754
+ mergeability: not_mergeable
755
+ domain_flavors: ["organization"]
756
+ examples: ["0", "5", "20"]
757
+ passive: true
758
+
759
+ - name: "pct_assets_other_desc"
760
+ type: string
761
+ description: "Free-text description of the \"other\" asset category reported in pct_assets_other, per Form ADV Item 5K(1)(b)(xii) Description. Derived from the 5K(1)(b)(xii) Description column"
762
+ display_name: "% Assets: Other (Description)"
763
+ mergeability: not_mergeable
764
+ domain_flavors: ["organization"]
765
+ examples: ["Cryptocurrencies", "Commodities", "Insurance products"]
766
+ passive: true
767
+
768
+ # --- Adviser-level Form ADV Part 1A (IA_ADV_Base_A) ---
769
+ # These atoms come from the monthly filing-data ZIP's IA_ADV_Base_A
770
+ # table, which uses raw Form ADV item codes as column names. Daily
771
+ # XML covers similar data for currently-active SEC-registered firms;
772
+ # this table is the only source for ERAs and historical advisers.
773
+
774
+ - name: "clients_individuals"
775
+ type: float
776
+ description: "0.0/1.0 flag indicating the adviser has retail individual clients (Form ADV Item 5D(1)(a))"
777
+ display_name: "Has Individual Clients"
778
+ mergeability: not_mergeable
779
+ domain_flavors: ["organization"]
780
+ examples: ["0", "1"]
781
+ passive: true
782
+
783
+ - name: "clients_high_net_worth"
784
+ type: float
785
+ description: "0.0/1.0 flag indicating the adviser has high-net-worth individual clients (Form ADV Item 5D(1)(b))"
786
+ display_name: "Has HNW Clients"
787
+ mergeability: not_mergeable
788
+ domain_flavors: ["organization"]
789
+ examples: ["0", "1"]
790
+ passive: true
791
+
792
+ - name: "clients_pooled_vehicles"
793
+ type: float
794
+ description: "0.0/1.0 flag indicating the adviser has pooled-investment-vehicle clients (hedge funds, private funds, etc.; Form ADV Item 5D(1)(d))"
795
+ display_name: "Has Pooled Vehicle Clients"
796
+ mergeability: not_mergeable
797
+ domain_flavors: ["organization"]
798
+ examples: ["0", "1"]
799
+ passive: true
800
+
801
+ - name: "clients_pension_plans"
802
+ type: float
803
+ description: "0.0/1.0 flag indicating the adviser has pension/profit-sharing-plan clients (Form ADV Item 5D(1)(g))"
804
+ display_name: "Has Pension Plan Clients"
805
+ mergeability: not_mergeable
806
+ domain_flavors: ["organization"]
807
+ examples: ["0", "1"]
808
+ passive: true
809
+
810
+ - name: "clients_corporations"
811
+ type: float
812
+ description: "0.0/1.0 flag indicating the adviser has corporation / other business clients (Form ADV Item 5D(1)(k))"
813
+ display_name: "Has Corporate Clients"
814
+ mergeability: not_mergeable
815
+ domain_flavors: ["organization"]
816
+ examples: ["0", "1"]
817
+ passive: true
818
+
819
+ - name: "compensation_pct_aum"
820
+ type: float
821
+ description: "0.0/1.0 flag indicating the adviser charges asset-based fees as a percentage of AUM (Form ADV Item 5E(1))"
822
+ display_name: "Charges % of AUM"
823
+ mergeability: not_mergeable
824
+ domain_flavors: ["organization"]
825
+ examples: ["0", "1"]
826
+ passive: true
827
+
828
+ - name: "compensation_hourly"
829
+ type: float
830
+ description: "0.0/1.0 flag indicating the adviser charges hourly fees (Form ADV Item 5E(2))"
831
+ display_name: "Charges Hourly Fees"
832
+ mergeability: not_mergeable
833
+ domain_flavors: ["organization"]
834
+ examples: ["0", "1"]
835
+ passive: true
836
+
837
+ - name: "compensation_fixed_fees"
838
+ type: float
839
+ description: "0.0/1.0 flag indicating the adviser charges fixed fees (Form ADV Item 5E(4))"
840
+ display_name: "Charges Fixed Fees"
841
+ mergeability: not_mergeable
842
+ domain_flavors: ["organization"]
843
+ examples: ["0", "1"]
844
+ passive: true
845
+
846
+ - name: "compensation_commissions"
847
+ type: float
848
+ description: "0.0/1.0 flag indicating the adviser charges commissions (Form ADV Item 5E(5))"
849
+ display_name: "Charges Commissions"
850
+ mergeability: not_mergeable
851
+ domain_flavors: ["organization"]
852
+ examples: ["0", "1"]
853
+ passive: true
854
+
855
+ - name: "compensation_performance"
856
+ type: float
857
+ description: "0.0/1.0 flag indicating the adviser charges performance-based fees (Form ADV Item 5E(6)). Common for hedge funds and PE managers"
858
+ display_name: "Charges Performance Fees"
859
+ mergeability: not_mergeable
860
+ domain_flavors: ["organization"]
861
+ examples: ["0", "1"]
862
+ passive: true
863
+
864
+ - name: "custody_client_securities"
865
+ type: float
866
+ description: "0.0/1.0 flag indicating the adviser has custody of client securities (Form ADV Item 9A(1)(a))"
867
+ display_name: "Has Custody of Securities"
868
+ mergeability: not_mergeable
869
+ domain_flavors: ["organization"]
870
+ examples: ["0", "1"]
871
+ passive: true
872
+
873
+ - name: "acts_as_qualified_custodian"
874
+ type: float
875
+ description: "0.0/1.0 flag indicating the adviser is itself a qualified custodian for client assets (Form ADV Item 9B(1)(a))"
876
+ display_name: "Acts as Qualified Custodian"
877
+ mergeability: not_mergeable
878
+ domain_flavors: ["organization"]
879
+ examples: ["0", "1"]
880
+ passive: true
881
+
882
+ - name: "regulatory_aum_discretionary"
883
+ type: float
884
+ description: "Regulatory assets under management held with discretionary authority, in USD (Form ADV Item 5F(2)(a)). Sub-component of total regulatory AUM"
885
+ display_name: "Regulatory AUM (Discretionary)"
886
+ mergeability: not_mergeable
887
+ domain_flavors: ["organization"]
888
+ examples: ["100000000", "1500000000"]
889
+ passive: true
890
+
891
+ - name: "regulatory_aum_nondiscretionary"
892
+ type: float
893
+ description: "Regulatory assets under management held without discretionary authority, in USD (Form ADV Item 5F(2)(b))"
894
+ display_name: "Regulatory AUM (Non-Discretionary)"
895
+ mergeability: not_mergeable
896
+ domain_flavors: ["organization"]
897
+ examples: ["0", "50000000"]
898
+ passive: true
899
+
900
+ - name: "total_accounts"
901
+ type: float
902
+ description: "Total number of regulatory accounts under management (Form ADV Item 5F(2)(f))"
903
+ display_name: "Total Accounts"
904
+ mergeability: not_mergeable
905
+ domain_flavors: ["organization"]
906
+ examples: ["10", "500", "50000"]
907
+ passive: true
908
+
909
+ # --- Disciplinary Disclosures (DRP tables) ---
910
+
911
+ - name: "drp_type"
912
+ type: string
913
+ description: "Disclosure Reporting Page category — \"criminal\" (IA_DRP_Criminal), \"regulatory\" (IA_DRP_Regulatory), or \"civil_judicial\" (IA_DRP_Civil_Judicial). Adviser-level disciplinary event"
914
+ display_name: "DRP Type"
915
+ mergeability: not_mergeable
916
+ domain_flavors: ["organization"]
917
+ examples: ["criminal", "regulatory", "civil_judicial"]
918
+ passive: true
919
+
920
+ - name: "drp_allegations"
921
+ type: string
922
+ description: "Free-text allegations as filed in a DRP disclosure. For regulatory and civil-judicial events this is the \"Allegations\" column; for criminal events the analogous \"Event Detail\" column populates this property"
923
+ display_name: "DRP Allegations"
924
+ mergeability: not_mergeable
925
+ domain_flavors: ["organization"]
926
+ examples: ["Failed to disclose conflict of interest", "Securities fraud"]
927
+ passive: true
928
+
929
+ - name: "drp_status"
930
+ type: string
931
+ description: "Current status of the DRP disciplinary event (e.g. pending, final, on appeal). Derived from the \"Status\" column"
932
+ display_name: "DRP Status"
933
+ mergeability: not_mergeable
934
+ domain_flavors: ["organization"]
935
+ examples: ["Final", "Pending", "On Appeal"]
936
+ passive: true
937
+
938
+ - name: "drp_resolution"
939
+ type: string
940
+ description: "Resolution / disposition of the DRP event when concluded — e.g. consented, settled, dismissed. Derived from \"Resolution\" / \"Resolution Type\" columns"
941
+ display_name: "DRP Resolution"
942
+ mergeability: not_mergeable
943
+ domain_flavors: ["organization"]
944
+ examples: ["Consented", "Settled", "Dismissed"]
945
+ passive: true
946
+
947
+ - name: "drp_sanctions"
948
+ type: string
949
+ description: "Principal sanction imposed for a regulatory DRP event. Derived from the \"Principal Sanction\" column; empty for criminal/civil-judicial DRPs"
950
+ display_name: "DRP Sanctions"
951
+ mergeability: not_mergeable
952
+ domain_flavors: ["organization"]
953
+ examples: ["Fine", "Censure", "Suspension"]
954
+ passive: true
955
+
956
+ - name: "drp_date"
957
+ type: string
958
+ description: "Date the DRP event was initiated, charged, or filed (YYYY-MM-DD). Derived from the type-specific date column (Date Initiated for regulatory, Date First Charged for criminal, Filing Date for civil-judicial), normalized to YYYY-MM-DD"
959
+ display_name: "DRP Date"
960
+ mergeability: not_mergeable
961
+ domain_flavors: ["organization"]
962
+ examples: ["2018-04-15", "2022-09-30"]
963
+ passive: true
964
+
965
+ - name: "drp_summary"
966
+ type: string
967
+ description: "Free-text summary of the DRP event. Derived from the \"Summary\" column"
968
+ display_name: "DRP Summary"
969
+ mergeability: not_mergeable
970
+ domain_flavors: ["organization"]
971
+ examples: ["Adviser settled SEC enforcement action regarding misallocation of fund expenses"]
972
+ passive: true
973
+
974
+ # --- ADV-W Withdrawal Filings ---
975
+
976
+ - name: "sec_registration_status"
977
+ type: string
978
+ description: "SEC-side registration status of an investment adviser firm. Set to \"Withdrawn\" on Form ADV-W records so the resolver's latest-atom-wins behavior reflects the firm's terminal state. Distinct from firm_registration_status (which is the primary regulator's status from the daily XML feed and can be a state regulator's value for state-registered firms)"
979
+ display_name: "SEC Registration Status"
980
+ mergeability: not_mergeable
981
+ domain_flavors: ["organization"]
982
+ examples: ["Withdrawn"]
983
+ passive: true
984
+
985
+ - name: "withdrawal_date"
986
+ type: string
987
+ description: "Date Form ADV-W was filed, normalized to YYYY-MM-DD. Derived from the \"Filing Date\" column of the ADVW_W2 CSV"
988
+ display_name: "Withdrawal Date"
989
+ mergeability: not_mergeable
990
+ domain_flavors: ["organization"]
991
+ examples: ["2023-06-30", "2024-12-15"]
992
+ passive: true
993
+
994
+ - name: "withdrawal_type"
995
+ type: string
996
+ description: "Form ADV-W filing type — \"FULL\" (complete withdrawal from SEC registration) or \"PARTIAL\". Derived from the \"Filing Type\" column"
997
+ display_name: "Withdrawal Type"
998
+ mergeability: not_mergeable
999
+ domain_flavors: ["organization"]
1000
+ examples: ["FULL", "PARTIAL"]
1001
+ passive: true
1002
+
1003
+ - name: "total_assets_at_withdrawal"
1004
+ type: float
1005
+ description: "Total assets reported on Form ADV-W at the time of withdrawal, in USD. Derived from the \"Assets Total Assets\" column of the ADVW_W2 CSV. Distinct from FDIC's bank-level total_assets (call-report balance sheet) and SEC's filing-level total_assets — those are point-in-time balance-sheet figures for active entities, while this is the closing balance at the moment an adviser terminated SEC registration"
1006
+ display_name: "Total Assets at Withdrawal (USD)"
1007
+ mergeability: not_mergeable
1008
+ domain_flavors: ["organization"]
1009
+ examples: ["50000000", "1500000000"]
1010
+ passive: true
1011
+
1012
+ - name: "total_shareholder_equity"
1013
+ type: float
1014
+ description: "Total shareholder equity reported on Form ADV-W at the time of withdrawal, in USD. Derived from the \"Total Shareholder Equity\" column"
1015
+ display_name: "Total Shareholder Equity at Withdrawal (USD)"
1016
+ mergeability: not_mergeable
1017
+ domain_flavors: ["organization"]
1018
+ examples: ["10000000", "250000000"]
1019
+ passive: true
1020
+
1021
+ # --- Person Identity (Schedule A/B + DRP affiliates) ---
1022
+
1023
+ - name: "person_crd"
1024
+ type: string
1025
+ description: "FINRA-assigned CRD number for an individual person (officer, principal, control person, DRP-affiliated individual). Distinct from organization CRD; persists across firm changes for the same individual. Property name aligns with the convention used by FINRA BrokerCheck and downstream cross-source person resolution"
1026
+ display_name: "Person CRD"
1027
+ mergeability: not_mergeable
1028
+ domain_flavors: ["person"]
1029
+ examples: ["1234567", "9876543"]
1030
+ passive: true
1031
+
1032
+ - name: "person_title"
1033
+ type: string
1034
+ description: "Title or status of an individual person at an investment adviser firm, per Form ADV Schedule A/B \"Title or Status\" column. Emitted only on person-flavored owner records; common values include officer titles and ownership/control role labels"
1035
+ display_name: "Person Title"
1036
+ mergeability: not_mergeable
1037
+ domain_flavors: ["person"]
1038
+ examples: ["CHIEF EXECUTIVE OFFICER", "PRESIDENT", "MEMBER", "DIRECTOR", "PRINCIPAL"]
1039
+ passive: true
1040
+
507
1041
  relationships:
508
1042
  - name: "is_located_at"
509
1043
  description: "An entity is located at, operates in, resides in, is headquartered in, was born in, visits, or died in a location"
@@ -513,3 +1047,189 @@ relationships:
513
1047
  target_flavors: ["location"]
514
1048
  examples: ["Rabenold Advisors, Inc. is located at Williamsville, NY"]
515
1049
  passive: true
1050
+
1051
+ # --- Private Fund Relationships (Schedule D 7.B(1)) ---
1052
+
1053
+ - name: "advised_by"
1054
+ description: "A private fund is managed by an investment adviser (the primary adviser-of-record on Form ADV Schedule D Section 7.B(1))"
1055
+ display_name: "Advised By"
1056
+ mergeability: not_mergeable
1057
+ domain_flavors: ["private_fund"]
1058
+ target_flavors: ["organization"]
1059
+ examples: ["HANSABEL INCOME, L.P. is advised by Acme Capital Management"]
1060
+ passive: true
1061
+
1062
+ - name: "co_advised_by"
1063
+ description: "A private fund is co-advised by an additional investment adviser (Schedule D 7.B(1) Item 17b)"
1064
+ display_name: "Co-Advised By"
1065
+ mergeability: not_mergeable
1066
+ domain_flavors: ["private_fund"]
1067
+ target_flavors: ["organization"]
1068
+ examples: ["A fund is co-advised by a related adviser"]
1069
+ passive: true
1070
+
1071
+ - name: "sub_advised_by"
1072
+ description: "A private fund is sub-advised by another investment adviser delegated specific portfolio management responsibilities (Schedule D 7.B(1) Item 18b)"
1073
+ display_name: "Sub-Advised By"
1074
+ mergeability: not_mergeable
1075
+ domain_flavors: ["private_fund"]
1076
+ target_flavors: ["organization"]
1077
+ examples: ["A fund delegates strategy to a sub-adviser"]
1078
+ passive: true
1079
+
1080
+ - name: "master_fund_of"
1081
+ description: "A private fund is the master fund into which one or more feeder funds are pooled (Schedule D 7.B(1) Master Fund ID/Name fields)"
1082
+ display_name: "Master Fund Of"
1083
+ mergeability: not_mergeable
1084
+ domain_flavors: ["private_fund"]
1085
+ target_flavors: ["private_fund"]
1086
+ examples: ["A feeder fund references its master fund"]
1087
+ passive: true
1088
+
1089
+ - name: "has_sub_fund"
1090
+ description: "A private fund has beneficial ownership of a sub-fund disclosed on Schedule D 7.B(1) Item 7"
1091
+ display_name: "Has Sub-Fund"
1092
+ mergeability: not_mergeable
1093
+ domain_flavors: ["private_fund"]
1094
+ target_flavors: ["private_fund"]
1095
+ examples: ["A fund-of-funds holds a sub-fund"]
1096
+ passive: true
1097
+
1098
+ - name: "feeds_into"
1099
+ description: "A feeder private fund channels investor capital into the linked fund per Schedule D 7.B(1) Item 6b"
1100
+ display_name: "Feeds Into"
1101
+ mergeability: not_mergeable
1102
+ domain_flavors: ["private_fund"]
1103
+ target_flavors: ["private_fund"]
1104
+ examples: ["A feeder fund feeds into the linked master fund"]
1105
+ passive: true
1106
+
1107
+ - name: "general_partner_of"
1108
+ description: "An organization (typically a general partner LLC or managing member) acts as the general partner of a private fund per Schedule D 7.B(1) Item 7d1"
1109
+ display_name: "General Partner Of"
1110
+ mergeability: not_mergeable
1111
+ domain_flavors: ["private_fund"]
1112
+ target_flavors: ["organization"]
1113
+ examples: ["A GP LLC is the general partner of the fund"]
1114
+ passive: true
1115
+
1116
+ - name: "named_partner_of"
1117
+ description: "A named partner or principal of the private fund as reported on Schedule D 7.B(1) Item 3a"
1118
+ display_name: "Named Partner Of"
1119
+ mergeability: not_mergeable
1120
+ domain_flavors: ["private_fund"]
1121
+ target_flavors: ["organization"]
1122
+ examples: ["A founding partner of the fund"]
1123
+ passive: true
1124
+
1125
+ - name: "marketer_of"
1126
+ description: "A marketer or solicitor that markets the private fund to investors, per Schedule D 7.B(1) Item 28"
1127
+ display_name: "Marketer Of"
1128
+ mergeability: not_mergeable
1129
+ domain_flavors: ["private_fund"]
1130
+ target_flavors: ["organization"]
1131
+ examples: ["A placement agent markets the fund"]
1132
+ passive: true
1133
+
1134
+ - name: "prime_broker_of"
1135
+ description: "The prime broker providing financing and execution services to the private fund, per Schedule D 7.B(1) Item 24"
1136
+ display_name: "Prime Broker Of"
1137
+ mergeability: not_mergeable
1138
+ domain_flavors: ["private_fund"]
1139
+ target_flavors: ["organization"]
1140
+ examples: ["Goldman Sachs is the prime broker of the fund"]
1141
+ passive: true
1142
+
1143
+ - name: "custodian_of"
1144
+ description: "The custodian holding the private fund's assets, per Schedule D 7.B(1) Item 25"
1145
+ display_name: "Custodian Of"
1146
+ mergeability: not_mergeable
1147
+ domain_flavors: ["private_fund"]
1148
+ target_flavors: ["organization"]
1149
+ examples: ["State Street is the custodian of the fund"]
1150
+ passive: true
1151
+
1152
+ - name: "auditor_of"
1153
+ description: "The auditing firm performing the private fund's annual audit, per Schedule D 7.B(1) Item 23"
1154
+ display_name: "Auditor Of"
1155
+ mergeability: not_mergeable
1156
+ domain_flavors: ["private_fund"]
1157
+ target_flavors: ["organization"]
1158
+ examples: ["Ernst & Young audits the fund"]
1159
+ passive: true
1160
+
1161
+ - name: "administrator_of"
1162
+ description: "The fund administrator handling investor accounting and reporting for the private fund, per Schedule D 7.B(1) Item 26"
1163
+ display_name: "Administrator Of"
1164
+ mergeability: not_mergeable
1165
+ domain_flavors: ["private_fund"]
1166
+ target_flavors: ["organization"]
1167
+ examples: ["SS&C GlobeOp is the administrator of the fund"]
1168
+ passive: true
1169
+
1170
+ # --- Adviser-Level Custody (Item 5K(3)) ---
1171
+
1172
+ - name: "primary_custodian"
1173
+ description: "An investment adviser's primary custodian holding client assets, per Form ADV Item 5K(3). The custodian is an organization (custody bank or qualified broker-dealer); strong-IDs preserve CRD and SEC file number for cross-source resolution"
1174
+ display_name: "Primary Custodian"
1175
+ mergeability: not_mergeable
1176
+ domain_flavors: ["organization"]
1177
+ target_flavors: ["organization"]
1178
+ examples: ["Acme Capital Management uses State Street as its primary custodian"]
1179
+ passive: true
1180
+
1181
+ # --- Ownership, Control, and Affiliation Graph ---
1182
+
1183
+ - name: "owner_of"
1184
+ description: "A person or organization is a direct (Schedule A) or indirect (Schedule B) owner of an investment adviser firm. Direction is owner → adviser; the schedule and ownership code are preserved in the source row's citation"
1185
+ display_name: "Owner Of"
1186
+ mergeability: not_mergeable
1187
+ domain_flavors: ["person", "organization"]
1188
+ target_flavors: ["organization"]
1189
+ examples: ["John Doe is an owner of Acme Capital Management", "Acme Holdings LLC is an owner of Acme Capital Management"]
1190
+ passive: true
1191
+
1192
+ - name: "controlled_by"
1193
+ description: "An investment adviser firm is controlled by a Schedule D 10B control entity (a parent organization, holding company, or other person/entity with control). Direction is adviser → control entity, matching the passive-voice convention shared with owner_of / advised_by / affiliated_with (subject is the entity being acted upon). CIK is carried on the control entity target when the SEC's enrichment table provides it, enabling cross-source resolution to EDGAR"
1194
+ display_name: "Controlled By"
1195
+ mergeability: not_mergeable
1196
+ domain_flavors: ["organization"]
1197
+ target_flavors: ["organization"]
1198
+ examples: ["Acme Capital Management is controlled by Acme Holdings LLC (CIK 0001234567)"]
1199
+ passive: true
1200
+
1201
+ - name: "affiliated_with"
1202
+ description: "An investment adviser has a Schedule D 7A financial industry affiliation with another organization (e.g. broker-dealer, bank, insurance company, futures commission merchant). CIK is carried on the affiliate when available via the 7A_CIK enrichment table"
1203
+ display_name: "Affiliated With"
1204
+ mergeability: not_mergeable
1205
+ domain_flavors: ["organization"]
1206
+ target_flavors: ["organization"]
1207
+ examples: ["Acme Capital Management is affiliated with Acme Securities LLC"]
1208
+ passive: true
1209
+
1210
+ - name: "successor_to"
1211
+ description: "An investment adviser acquired or succeeded another firm, per Form ADV Schedule D Item 4. Direction: successor (subject) → acquired firm (target). Captures M&A continuity so the acquired firm's historical records can be linked to the acquirer's go-forward records. Property name aligned with bny.successor_to for cross-source consistency"
1212
+ display_name: "Successor To"
1213
+ mergeability: not_mergeable
1214
+ domain_flavors: ["organization"]
1215
+ target_flavors: ["organization"]
1216
+ examples: ["Acme Capital is successor to Beta Advisors after 2023 acquisition"]
1217
+ passive: true
1218
+
1219
+ - name: "related_to"
1220
+ description: "An investment adviser is related to another SEC-registered investment adviser, per Form ADV Schedule D 2A_Related. Typical for sibling firms under a common holding company or family of advisers. Distinct from affiliated_with (Schedule D 7A) which captures broader financial-industry affiliations across regulatory categories"
1221
+ display_name: "Related To"
1222
+ mergeability: not_mergeable
1223
+ domain_flavors: ["organization"]
1224
+ target_flavors: ["organization"]
1225
+ examples: ["Acme Capital is related to Acme Wealth Management"]
1226
+ passive: true
1227
+
1228
+ - name: "drp_affiliate"
1229
+ description: "A specific named affiliate — either an individual (officer, principal, control person) or an affiliated firm — is named on a DRP disciplinary disclosure filed by an investment adviser, per IA_DRP_Advisory_Affiliates. Provides the per-affiliate grain that the DRP records themselves lack. Direction: adviser → affiliate. Target flavor follows the row's Affiliate Type: Individual rows resolve as persons (carrying person_crd when known); Firm rows resolve as organizations (carrying crd_number when known)."
1230
+ display_name: "DRP Affiliate"
1231
+ mergeability: not_mergeable
1232
+ domain_flavors: ["organization"]
1233
+ target_flavors: ["person", "organization"]
1234
+ examples: ["The 2018 regulatory DRP filed by Acme Capital names Jane Doe as the affiliated individual", "The 2021 regulatory DRP filed by Acme Capital names its affiliated broker-dealer Acme Securities LLC"]
1235
+ passive: true
@@ -106,7 +106,7 @@ properties:
106
106
 
107
107
  - name: "close_price"
108
108
  type: float
109
- description: "Closing price of the trading interval in USD, from Alpha Vantage field '4. close'"
109
+ description: "Closing price of the trading interval in USD"
110
110
  display_name: "Close Price"
111
111
  mergeability: not_mergeable
112
112
  domain_flavors: ["financial_instrument"]