@yottagraph-app/data-model-skill 0.0.16 → 0.0.18

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.16",
3
+ "version": "0.0.18",
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",
@@ -27,7 +27,14 @@ flavors:
27
27
  description: "A particular business, institution, or organization such as a corporation, university, government agency, or non-profit"
28
28
  display_name: "Organization"
29
29
  mergeability: not_mergeable
30
- strong_id_properties: ["company_cik"]
30
+ # lei, crd_number, sec_file_number, and pcaob_number let us merge N-CEN
31
+ # service providers (custodians, investment advisers, transfer agents,
32
+ # auditors, etc.) across filings even when the SEC doesn't assign them a
33
+ # CIK. pcaob_number is auditor-specific and is the canonical fallback for
34
+ # PCAOB-registered audit firms whose filer didn't supply an LEI. crd_number
35
+ # carries the firm-level FINRA CRD here; the same property on person
36
+ # carries the individual CRD — the flavor scopes the namespace.
37
+ strong_id_properties: ["company_cik", "lei", "pcaob_number", "crd_number", "sec_file_number"]
31
38
  passive: true
32
39
 
33
40
  - name: "10_k"
@@ -134,6 +141,30 @@ flavors:
134
141
  strong_id_properties: ["accession_number"]
135
142
  passive: true
136
143
 
144
+ - name: "ncen"
145
+ namespace: "sec"
146
+ description: "Annual report (Form N-CEN) for a registered investment company capturing fund structure, service providers, and operational data"
147
+ display_name: "N-CEN"
148
+ mergeability: not_mergeable
149
+ strong_id_properties: ["accession_number"]
150
+ passive: true
151
+
152
+ - name: "form_d"
153
+ namespace: "sec"
154
+ description: "Regulation D offering notice (Form D or D/A) filed with the SEC to claim an exemption from registration for a private placement. Covers VC/PE funds, hedge funds, and operating company raises."
155
+ display_name: "Form D"
156
+ mergeability: not_mergeable
157
+ strong_id_properties: ["accession_number"]
158
+ passive: true
159
+
160
+ - name: "valuation_method_change"
161
+ namespace: "sec"
162
+ description: "A material change to fund valuation methodology disclosed under N-CEN Item B.20. Each entity records one valuationMethodsChange record (date, asset type, regulatory basis, free-text explanation) and links to the disclosing N-CEN filing plus any per-series fund(s) affected."
163
+ display_name: "Valuation Method Change"
164
+ mergeability: not_mergeable
165
+ strong_id_properties: ["valuation_change_id"]
166
+ passive: true
167
+
137
168
  - name: "filing"
138
169
  namespace: "sec"
139
170
  description: "SEC filing (generic, for form types without a specific modeled flavor)"
@@ -143,10 +174,16 @@ flavors:
143
174
  passive: true
144
175
 
145
176
  - name: "person"
146
- description: "A real person as opposed to a fictional character, such as a CEO, politician, or public figure"
177
+ description: "A real person as opposed to a fictional character, such as a CEO, politician, or public figure. Also used for individual registered broker-dealer representatives identified by their FINRA CRD number."
147
178
  display_name: "Person"
148
179
  mergeability: not_mergeable
149
- strong_id_properties: ["person_cik"]
180
+ # crd_number is FINRA's individual Central Registration Depository
181
+ # identifier, disclosed for fund directors and chief compliance officers
182
+ # on N-CEN. Adding it as a strong ID lets the same person merge across
183
+ # all the registrants (and historical filings) where they're disclosed.
184
+ # The same crd_number property exists on organization (for firm-level
185
+ # CRDs) — flavor scoping prevents cross-namespace collisions.
186
+ strong_id_properties: ["person_cik", "crd_number"]
150
187
  passive: true
151
188
 
152
189
  - name: "financial_instrument"
@@ -175,7 +212,7 @@ properties:
175
212
  description: "SEC Central Index Key, 10-digit zero-padded"
176
213
  display_name: "CIK"
177
214
  mergeability: not_mergeable
178
- domain_flavors: ["organization", "sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p"]
215
+ domain_flavors: ["organization", "sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d"]
179
216
  passive: true
180
217
 
181
218
  - name: "ticker"
@@ -212,7 +249,7 @@ properties:
212
249
 
213
250
  - name: "state_of_incorporation"
214
251
  type: string
215
- description: "Two-letter US state or country code of incorporation"
252
+ description: "State or country of incorporation or formation. Submission-derived values are two-letter US state / ISO country codes (e.g. DE, KY); Form D reports the same concept as a full uppercase jurisdiction name (e.g. DELAWARE, CAYMAN ISLANDS) and is emitted as-is. Consumers should treat the value as an opaque jurisdiction string and match by case-insensitive equality after normalising whitespace."
216
253
  display_name: "State of Incorporation"
217
254
  mergeability: not_mergeable
218
255
  domain_flavors: ["organization"]
@@ -597,7 +634,7 @@ properties:
597
634
  description: "SEC accession number uniquely identifying a filing"
598
635
  display_name: "Accession Number"
599
636
  mergeability: not_mergeable
600
- domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
637
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
601
638
  passive: true
602
639
 
603
640
  - name: "form_type"
@@ -605,7 +642,7 @@ properties:
605
642
  description: "Normalized SEC form type (e.g. 10-K, SC 13D, 4)"
606
643
  display_name: "Form Type"
607
644
  mergeability: not_mergeable
608
- domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
645
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
609
646
  passive: true
610
647
 
611
648
  - name: "filing_date"
@@ -613,7 +650,7 @@ properties:
613
650
  description: "Date the filing was submitted to the SEC (YYYY-MM-DD)"
614
651
  display_name: "Filing Date"
615
652
  mergeability: not_mergeable
616
- domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
653
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
617
654
  passive: true
618
655
 
619
656
  - name: "report_date"
@@ -621,7 +658,7 @@ properties:
621
658
  description: "End date of the primary reporting period (YYYY-MM-DD)"
622
659
  display_name: "Report Date"
623
660
  mergeability: not_mergeable
624
- domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
661
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
625
662
  passive: true
626
663
 
627
664
  # ── XBRL Financial Facts (key concepts) ──
@@ -1558,10 +1595,10 @@ properties:
1558
1595
 
1559
1596
  - name: "report_period_date"
1560
1597
  type: string
1561
- description: "End date for the report period (e.g. quarter-end for 13F-HR, month-end for N-PORT)"
1598
+ description: "End date for the report period (e.g. quarter-end for 13F-HR, month-end for N-PORT, fiscal year-end for N-CEN)"
1562
1599
  display_name: "Report Period Date"
1563
1600
  mergeability: not_mergeable
1564
- domain_flavors: ["sec::13f_hr", "sec::nport_p"]
1601
+ domain_flavors: ["sec::13f_hr", "sec::nport_p", "sec::ncen"]
1565
1602
  passive: true
1566
1603
 
1567
1604
  - name: "confidential_treatment_flag"
@@ -1767,6 +1804,460 @@ properties:
1767
1804
  domain_flavors: ["organization"]
1768
1805
  passive: true
1769
1806
 
1807
+ # ── Organization: N-CEN Service Provider Identifiers ──
1808
+ # These are strong IDs on organization (see flavor definition above) so
1809
+ # N-CEN service providers (advisers, transfer agents) merge across filings
1810
+ # even when the SEC hasn't assigned them a CIK.
1811
+
1812
+ - name: "sec_file_number"
1813
+ type: string
1814
+ description: "SEC file number — registrant identifier assigned by the SEC (e.g. 801-XXXXX for advisers, 084-XXXXX for transfer agents, 811-XXXXX for investment-company / fund issuers)"
1815
+ display_name: "SEC File Number"
1816
+ mergeability: not_mergeable
1817
+ domain_flavors: ["organization", "financial_instrument"]
1818
+ passive: true
1819
+
1820
+ - name: "pcaob_number"
1821
+ type: string
1822
+ description: "PCAOB firm ID — the Public Company Accounting Oversight Board's registration number for an audit firm. Mandatory for any auditor of an SEC-registered fund and stable across filings, so it serves as the canonical fallback identifier when a filer doesn't supply the auditor's LEI on N-CEN Item C.7."
1823
+ display_name: "PCAOB Number"
1824
+ mergeability: not_mergeable
1825
+ domain_flavors: ["organization"]
1826
+ passive: true
1827
+
1828
+ # ── N-CEN Filing Metadata ──
1829
+
1830
+ # SEC investment-company classification under the Investment Company
1831
+ # Act of 1940. A durable registrant trait — an adviser complex is
1832
+ # permanently N-1A (open-end), N-2 (closed-end), N-3/N-4 (variable
1833
+ # insurance), N-6 (variable life), etc., barring rare re-organisation.
1834
+ # Lives on the organization for cross-filing querying ("which
1835
+ # registrants are N-1A?") and on the sec::ncen filing that disclosed
1836
+ # it for per-filing provenance. Populated from N-CEN today; any
1837
+ # future form carrying the same classification can emit it.
1838
+ - name: "investment_company_type"
1839
+ type: string
1840
+ description: "SEC investment-company classification under the Investment Company Act of 1940 (e.g. N-1A open-end, N-2 closed-end, N-3/N-4 variable insurance, N-6 variable life). A durable registrant attribute."
1841
+ display_name: "Investment Company Type"
1842
+ mergeability: not_mergeable
1843
+ domain_flavors: ["organization", "sec::ncen"]
1844
+ passive: true
1845
+
1846
+ # Filing-preparer contact. Every SEC submission carries a CONTACT_TYPE
1847
+ # block in the SGML/XML header naming the person SEC should reach about
1848
+ # the submission — typically inside counsel or a fund-admin paralegal,
1849
+ # distinct from the registrant. Flattened into a single comma-joined
1850
+ # "name, email, phone" string because the contact has no stable
1851
+ # identifier across filings (no CIK, no CRD) and no downstream queries
1852
+ # branch on the individual fields. Empty pieces are omitted from the
1853
+ # join. Lives on the filing rather than the registrant org (which has
1854
+ # its own business_phone). Currently populated only by the N-CEN
1855
+ # handler; the full SEC filings domain is declared so other form
1856
+ # handlers can lift the same CONTACT_TYPE block without schema changes.
1857
+ - name: "contact"
1858
+ type: string
1859
+ description: "Filing-preparer contact from the SEC submission CONTACT_TYPE header, formatted as 'Name, email, phone' (e.g. 'Jane Doe, jane@filer.com, 412-444-4444'); empty pieces are omitted. Distinct from the registrant — typically inside counsel or fund-admin staff."
1860
+ display_name: "Contact"
1861
+ mergeability: not_mergeable
1862
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::filing"]
1863
+ passive: true
1864
+
1865
+ # N-CEN Item B.* signals. Each property attaches to its single natural
1866
+ # home: durable registrant attributes (fund_family_name) live on the
1867
+ # organization; per-filing lifecycle facts and per-period event flags
1868
+ # (is_first/last_filing, is_material_weakness, is_public_accountant_
1869
+ # changed, is_accounting_principle_change, had_nav_error,
1870
+ # had_dividend_error) live on the sec::ncen filing. Putting per-period
1871
+ # facts on the org would accumulate conflicting Y/N atoms across years
1872
+ # (a fund that had a material weakness in 2018 but not 2019-2025 isn't
1873
+ # permanently a "material weakness" org). To answer "did this fund
1874
+ # ever..." or "what's its current state", join through the filer edge
1875
+ # to the most recent or all sec::ncen filings. Material valuation
1876
+ # method changes (Item B.20) are intentionally modelled only as the
1877
+ # sec::valuation_method_change sub-record flavor — no rollup boolean
1878
+ # on the filing or fund — since the per-change detail (date, asset
1879
+ # type, regulatory basis, free-text explanation) is the meaningful
1880
+ # signal and "did it happen?" is recoverable by existence check on
1881
+ # the sub-records' disclosed_in / affects_series edges.
1882
+ - name: "fund_family_name"
1883
+ type: string
1884
+ description: "Name of the fund family (registrantFamilyInvComp) the registrant belongs to per N-CEN — useful for grouping registrants that share advisers, distributors, and boards (e.g. 'Vanguard', 'BlackRock')."
1885
+ display_name: "Fund Family"
1886
+ mergeability: not_mergeable
1887
+ domain_flavors: ["organization"]
1888
+ passive: true
1889
+
1890
+ # Filing position on the registrant's N-CEN lifecycle. One enum
1891
+ # rather than two independent booleans because a filing is in exactly
1892
+ # one of three positions: first submission (fund launch), last
1893
+ # submission (wind-down), or ongoing. "last" wins when both B.2 and
1894
+ # B.3 are Y on the same filing (rare same-year launch-and-terminate).
1895
+ - name: "filing_lifecycle_position"
1896
+ type: string
1897
+ description: "N-CEN filing's position on the registrant's lifecycle per Items B.2 / B.3. One of: 'first' (fund launch, B.2=Y), 'last' (fund wind-down, B.3=Y), 'ongoing' (neither). 'last' takes precedence if both B.2 and B.3 are Y."
1898
+ display_name: "Filing Lifecycle Position"
1899
+ mergeability: not_mergeable
1900
+ domain_flavors: ["sec::ncen"]
1901
+ passive: true
1902
+
1903
+ - name: "is_material_weakness"
1904
+ type: string
1905
+ description: "Whether the auditor reported a material weakness in internal control (Y or N) per N-CEN Item B.6"
1906
+ display_name: "Material Weakness"
1907
+ mergeability: not_mergeable
1908
+ domain_flavors: ["sec::ncen"]
1909
+ passive: true
1910
+
1911
+ - name: "is_public_accountant_changed"
1912
+ type: string
1913
+ description: "Whether the registrant's public accountant changed during the period (Y or N) per N-CEN Item B.5 — auditor turnover signal"
1914
+ display_name: "Public Accountant Changed"
1915
+ mergeability: not_mergeable
1916
+ domain_flavors: ["sec::ncen"]
1917
+ passive: true
1918
+
1919
+ - name: "is_accounting_principle_change"
1920
+ type: string
1921
+ description: "Whether the registrant changed accounting principles during the period (Y or N) per N-CEN Item B.7"
1922
+ display_name: "Accounting Principle Change"
1923
+ mergeability: not_mergeable
1924
+ domain_flavors: ["sec::ncen"]
1925
+ passive: true
1926
+
1927
+ # NAV- and dividend-error flags live on both the sec::ncen filing
1928
+ # (registrant-wide "did any series have an error?") and on each
1929
+ # affected financial_instrument series. Same concept, two
1930
+ # granularities, so one property per concept with dual flavors.
1931
+ # Registrant-level emission is Y or N (B.22 / B.23 is always
1932
+ # answered); per-series emission is Y-only (absence reads as "this
1933
+ # series was not listed as affected").
1934
+ - name: "had_nav_error"
1935
+ type: string
1936
+ description: "Whether a NAV calculation error occurred during the N-CEN reporting period per Item B.22. On the sec::ncen filing, Y/N registrant-wide. On a financial_instrument, Y when that series appeared in the B.22.a.i affected-series list (absence means not disclosed as affected)."
1937
+ display_name: "Had NAV Error"
1938
+ mergeability: not_mergeable
1939
+ domain_flavors: ["sec::ncen", "financial_instrument"]
1940
+ passive: true
1941
+
1942
+ - name: "had_dividend_error"
1943
+ type: string
1944
+ description: "Whether a dividend or distribution payment error occurred during the N-CEN reporting period per Item B.23. On the sec::ncen filing, Y/N registrant-wide. On a financial_instrument, Y when that series appeared in the B.23.a.i affected-series list (absence means not disclosed as affected)."
1945
+ display_name: "Had Dividend Error"
1946
+ mergeability: not_mergeable
1947
+ domain_flavors: ["sec::ncen", "financial_instrument"]
1948
+ passive: true
1949
+
1950
+ # FINRA Central Registration Depository identifier — applied to both
1951
+ # firms (an investment-adviser, principal underwriter, sub-adviser
1952
+ # disclosed on an N-CEN service-provider list) and individuals (fund
1953
+ # directors and chief compliance officers). Flavor scopes the
1954
+ # namespace, so the same numeric value on an org and a person resolves
1955
+ # to two distinct entities (FINRA does maintain separate firm vs.
1956
+ # individual registries, but flavor scoping is the durable safeguard).
1957
+ - name: "crd_number"
1958
+ type: string
1959
+ description: "FINRA Central Registration Depository identifier. On organization entities the firm-level CRD (e.g. investment-adviser firms, principal underwriters); on person entities the individual CRD (e.g. fund directors, chief compliance officers). The flavor disambiguates the namespace."
1960
+ display_name: "CRD Number"
1961
+ mergeability: not_mergeable
1962
+ domain_flavors: ["organization", "person"]
1963
+ passive: true
1964
+
1965
+ # Valuation method change entity properties (N-CEN Item B.20).
1966
+ - name: "valuation_change_id"
1967
+ type: string
1968
+ description: "Synthetic strong ID for an N-CEN valuation method change record (accession_number::index)"
1969
+ display_name: "Valuation Change ID"
1970
+ mergeability: not_mergeable
1971
+ domain_flavors: ["sec::valuation_method_change"]
1972
+ passive: true
1973
+
1974
+ # Scoped field names — "change_date"/"change_explanation" would be
1975
+ # magnets for future collisions with other change-event sub-records
1976
+ # (auditor change, name change, fiscal-year change, …). Keeping the
1977
+ # valuation_ prefix means each future sub-record can coin its own
1978
+ # scoped pair (auditor_change_date, …) without re-writing history.
1979
+ - name: "valuation_change_date"
1980
+ type: string
1981
+ description: "Date the valuation methodology change took effect (YYYY-MM-DD) per N-CEN Item B.20"
1982
+ display_name: "Valuation Change Date"
1983
+ mergeability: not_mergeable
1984
+ domain_flavors: ["sec::valuation_method_change"]
1985
+ passive: true
1986
+
1987
+ - name: "valuation_change_explanation"
1988
+ type: string
1989
+ description: "Free-text explanation of the valuation methodology change per N-CEN Item B.20"
1990
+ display_name: "Valuation Change Explanation"
1991
+ mergeability: not_mergeable
1992
+ domain_flavors: ["sec::valuation_method_change"]
1993
+ passive: true
1994
+
1995
+ - name: "affected_asset_type"
1996
+ type: string
1997
+ description: "Asset category whose valuation methodology changed (N-CEN ASSET_TYPE enum: equity, debt, derivative, etc.)"
1998
+ display_name: "Affected Asset Type"
1999
+ mergeability: not_mergeable
2000
+ domain_flavors: ["sec::valuation_method_change"]
2001
+ passive: true
2002
+
2003
+ - name: "affected_investment_type"
2004
+ type: string
2005
+ description: "Free-text sub-classification of investments affected by the valuation methodology change per N-CEN"
2006
+ display_name: "Affected Investment Type"
2007
+ mergeability: not_mergeable
2008
+ domain_flavors: ["sec::valuation_method_change"]
2009
+ passive: true
2010
+
2011
+ - name: "regulatory_basis"
2012
+ type: string
2013
+ description: "Statutory or regulatory basis cited for the valuation methodology change per N-CEN (e.g. 'Rule 2a-5 fair value designee determination')"
2014
+ display_name: "Regulatory Basis"
2015
+ mergeability: not_mergeable
2016
+ domain_flavors: ["sec::valuation_method_change"]
2017
+ passive: true
2018
+
2019
+ # ── Financial Instrument: N-CEN Fund Operational Data ──
2020
+
2021
+ - name: "is_fund_of_funds"
2022
+ type: string
2023
+ description: "Whether the fund is a fund-of-funds (Y or N) per N-CEN"
2024
+ display_name: "Fund of Funds"
2025
+ mergeability: not_mergeable
2026
+ domain_flavors: ["financial_instrument"]
2027
+ passive: true
2028
+
2029
+ - name: "is_etf"
2030
+ type: string
2031
+ description: "Whether the fund is an exchange-traded fund (Y or N) per N-CEN"
2032
+ display_name: "ETF"
2033
+ mergeability: not_mergeable
2034
+ domain_flavors: ["financial_instrument"]
2035
+ passive: true
2036
+
2037
+ - name: "securities_lending_enabled"
2038
+ type: string
2039
+ description: "Whether the fund engages in securities lending (Y or N) per N-CEN"
2040
+ display_name: "Securities Lending Enabled"
2041
+ mergeability: not_mergeable
2042
+ domain_flavors: ["financial_instrument"]
2043
+ passive: true
2044
+
2045
+ - name: "avg_portfolio_securities_value"
2046
+ type: float
2047
+ description: "Average value of portfolio securities on loan during the reporting period (USD) per N-CEN"
2048
+ display_name: "Avg Portfolio Securities Value"
2049
+ mergeability: not_mergeable
2050
+ domain_flavors: ["financial_instrument"]
2051
+ passive: true
2052
+
2053
+ - name: "net_income_securities_lending"
2054
+ type: float
2055
+ description: "Net income from securities lending during the reporting period (USD) per N-CEN"
2056
+ display_name: "Net Income (Securities Lending)"
2057
+ mergeability: not_mergeable
2058
+ domain_flavors: ["financial_instrument"]
2059
+ passive: true
2060
+
2061
+ - name: "avg_net_assets_monthly"
2062
+ type: float
2063
+ description: "Average net assets of the fund computed monthly during the reporting period (USD) per N-CEN Item C.19"
2064
+ display_name: "Avg Net Assets (Monthly)"
2065
+ mergeability: not_mergeable
2066
+ domain_flavors: ["financial_instrument"]
2067
+ passive: true
2068
+
2069
+ - name: "avg_net_assets_daily"
2070
+ type: float
2071
+ description: "Average net assets of the fund computed daily during the reporting period (USD) per N-CEN Item C.19"
2072
+ display_name: "Avg Net Assets (Daily)"
2073
+ mergeability: not_mergeable
2074
+ domain_flavors: ["financial_instrument"]
2075
+ passive: true
2076
+
2077
+ - name: "index_tracking_diff_pre_fees"
2078
+ type: float
2079
+ description: "Index fund tracking difference vs. benchmark before fees and expenses (per N-CEN indexFundInfo)"
2080
+ display_name: "Index Tracking Diff (Pre-Fees)"
2081
+ mergeability: not_mergeable
2082
+ domain_flavors: ["financial_instrument"]
2083
+ passive: true
2084
+
2085
+ - name: "index_tracking_diff_post_fees"
2086
+ type: float
2087
+ description: "Index fund tracking difference vs. benchmark after fees and expenses (per N-CEN indexFundInfo)"
2088
+ display_name: "Index Tracking Diff (Post-Fees)"
2089
+ mergeability: not_mergeable
2090
+ domain_flavors: ["financial_instrument"]
2091
+ passive: true
2092
+
2093
+ - name: "index_tracking_stdev_pre_fees"
2094
+ type: float
2095
+ description: "Daily standard deviation of index fund tracking difference before fees and expenses (per N-CEN indexFundInfo)"
2096
+ display_name: "Index Tracking Stdev (Pre-Fees)"
2097
+ mergeability: not_mergeable
2098
+ domain_flavors: ["financial_instrument"]
2099
+ passive: true
2100
+
2101
+ - name: "index_tracking_stdev_post_fees"
2102
+ type: float
2103
+ description: "Daily standard deviation of index fund tracking difference after fees and expenses (per N-CEN indexFundInfo)"
2104
+ display_name: "Index Tracking Stdev (Post-Fees)"
2105
+ mergeability: not_mergeable
2106
+ domain_flavors: ["financial_instrument"]
2107
+ passive: true
2108
+
2109
+ # ── Form D: Issuer Attributes (on organization) ──
2110
+
2111
+ # Form-D-specific issuer attributes are scoped with form_d_ prefixes when
2112
+ # they overlap conceptually with broader properties (industry_group →
2113
+ # form_d_industry_group disambiguates from sic_code and the 'industry'
2114
+ # flavor). Truly Form-D-only attributes (legal_entity_form,
2115
+ # private_fund_type, year_of_inc) keep simple names. Fields that change
2116
+ # over time relative to the filing date (e.g. "incorporated within the
2117
+ # last 5 years") are deliberately not stored: they're derivable from
2118
+ # year_of_inc + filing_date and would otherwise accumulate conflicting
2119
+ # answers across filings.
2120
+
2121
+ - name: "legal_entity_form"
2122
+ type: string
2123
+ description: "Legal entity structure as reported in Form D: e.g. Limited Partnership, Limited Liability Company, Corporation, Business Trust"
2124
+ display_name: "Legal Entity Form"
2125
+ mergeability: not_mergeable
2126
+ domain_flavors: ["organization"]
2127
+ examples: ["Limited Partnership", "Limited Liability Company", "Corporation"]
2128
+ passive: true
2129
+
2130
+ - name: "form_d_industry_group"
2131
+ type: string
2132
+ description: "Form D's coarse industry classification (e.g. Pooled Investment Fund, Technology, Real Estate, Banking). Distinct from the SIC taxonomy carried by sic_code/sic_description and the 'industry' flavor — Form D's enum is much coarser and self-reported by the issuer."
2133
+ display_name: "Form D Industry Group"
2134
+ mergeability: not_mergeable
2135
+ domain_flavors: ["organization"]
2136
+ examples: ["Pooled Investment Fund", "Technology", "Real Estate"]
2137
+ passive: true
2138
+
2139
+ - name: "private_fund_type"
2140
+ type: string
2141
+ description: "Fund type for pooled investment fund issuers in Form D: Venture Capital Fund, Hedge Fund, Private Equity Fund, Real Estate Fund, etc."
2142
+ display_name: "Private Fund Type"
2143
+ mergeability: not_mergeable
2144
+ domain_flavors: ["organization"]
2145
+ examples: ["Venture Capital Fund", "Hedge Fund", "Private Equity Fund"]
2146
+ passive: true
2147
+
2148
+ - name: "year_of_inc"
2149
+ type: string
2150
+ description: "Year the issuer was incorporated or formed (from Form D)"
2151
+ display_name: "Year of Incorporation"
2152
+ mergeability: not_mergeable
2153
+ domain_flavors: ["organization"]
2154
+ examples: ["2024", "1985"]
2155
+ passive: true
2156
+
2157
+ # ── Form D: Offering Attributes (on sec::form_d) ──
2158
+ #
2159
+ # Offering-level facts use the `offering_` prefix to scope them clearly
2160
+ # to the offering record (sec::form_d) and avoid collisions with future
2161
+ # broader concepts of "amount" or "investors" on other filing types.
2162
+ # Booleans derivable from other properties (e.g. is_amendment, recoverable
2163
+ # from form_type ending in "/A") are intentionally omitted — see the
2164
+ # Form D handler for the derivation contract.
2165
+
2166
+ - name: "date_of_first_sale"
2167
+ type: string
2168
+ description: "Date on which the first securities were sold in this offering (from Form D)"
2169
+ display_name: "Date of First Sale"
2170
+ mergeability: not_mergeable
2171
+ domain_flavors: ["sec::form_d"]
2172
+ examples: ["2026-02-26"]
2173
+ passive: true
2174
+
2175
+ - name: "offering_total_amount"
2176
+ type: float
2177
+ description: "Total target offering size in USD (from Form D). Empty when the offering amount is Indefinite — see offering_amount_indefinite."
2178
+ display_name: "Offering Total Amount"
2179
+ mergeability: not_mergeable
2180
+ domain_flavors: ["sec::form_d"]
2181
+ passive: true
2182
+
2183
+ - name: "offering_amount_sold"
2184
+ type: float
2185
+ description: "Total amount already sold/raised from investors in USD (from Form D)"
2186
+ display_name: "Offering Amount Sold"
2187
+ mergeability: not_mergeable
2188
+ domain_flavors: ["sec::form_d"]
2189
+ passive: true
2190
+
2191
+ - name: "offering_total_investors"
2192
+ type: float
2193
+ description: "Number of investors who have already participated in this offering (from Form D). Typed as float to match the schema-wide convention for numeric counts (entity_number_of_employees, board_size, us_gaap:number_of_segments)."
2194
+ display_name: "Offering Total Investors"
2195
+ mergeability: not_mergeable
2196
+ domain_flavors: ["sec::form_d"]
2197
+ passive: true
2198
+
2199
+ - name: "offering_min_investment"
2200
+ type: float
2201
+ description: "Minimum investment accepted from a single investor in USD (from Form D)"
2202
+ display_name: "Offering Min Investment"
2203
+ mergeability: not_mergeable
2204
+ domain_flavors: ["sec::form_d"]
2205
+ passive: true
2206
+
2207
+ - name: "federal_exemption"
2208
+ type: string
2209
+ description: "Primary Reg D federal exemption claimed: 06b (Rule 506(b) accredited), 06c (Rule 506(c) general solicitation), 04a5, 04a6, etc."
2210
+ display_name: "Federal Exemption"
2211
+ mergeability: not_mergeable
2212
+ domain_flavors: ["sec::form_d"]
2213
+ examples: ["06b", "06c", "04a5"]
2214
+ passive: true
2215
+
2216
+ - name: "offering_amount_indefinite"
2217
+ type: string
2218
+ description: "Whether the total offering amount is Indefinite (open-ended offering with no fixed cap): Y or N"
2219
+ display_name: "Indefinite Offering"
2220
+ mergeability: not_mergeable
2221
+ domain_flavors: ["sec::form_d"]
2222
+ examples: ["Y", "N"]
2223
+ passive: true
2224
+
2225
+ - name: "issuer_size_range"
2226
+ type: string
2227
+ description: "Verbal size range of the issuer from Form D: aggregateNetAssetValueRange for funds or revenueRange for operating companies"
2228
+ display_name: "Issuer Size Range"
2229
+ mergeability: not_mergeable
2230
+ domain_flavors: ["sec::form_d"]
2231
+ examples: ["$1 - $5,000,000", "Over $1,000,000,000", "Decline to Disclose"]
2232
+ passive: true
2233
+
2234
+ - name: "more_than_one_year"
2235
+ type: string
2236
+ description: "Whether the offering is expected to last more than one year: true or false (from Form D durationOfOffering)"
2237
+ display_name: "Multi-Year Offering"
2238
+ mergeability: not_mergeable
2239
+ domain_flavors: ["sec::form_d"]
2240
+ examples: ["true", "false"]
2241
+ passive: true
2242
+
2243
+ - name: "has_non_accredited_investors"
2244
+ type: string
2245
+ description: "Whether the offering has sold securities to any non-accredited investors: true or false (from Form D)"
2246
+ display_name: "Non-Accredited Investors"
2247
+ mergeability: not_mergeable
2248
+ domain_flavors: ["sec::form_d"]
2249
+ examples: ["true", "false"]
2250
+ passive: true
2251
+
2252
+ - name: "is_40_act_fund"
2253
+ type: string
2254
+ description: "Whether the issuer is a fund registered under the Investment Company Act of 1940: true or false. Registered funds are subject to stricter regulation than exempt funds under 3(c)(1) or 3(c)(7). This is the issuer's own assertion at Form D filing time; the canonical durable registrant attribute for the same concept is investment_company_type on organization (a non-empty value there implies 1940 Act registration)."
2255
+ display_name: "40 Act Registered"
2256
+ mergeability: not_mergeable
2257
+ domain_flavors: ["sec::form_d"]
2258
+ examples: ["true", "false"]
2259
+ passive: true
2260
+
1770
2261
  # ── Financial Instrument: N-PORT Fund Financials ──
1771
2262
 
1772
2263
  - name: "fund_total_assets"
@@ -2044,8 +2535,8 @@ relationships:
2044
2535
  description: "Link from a company or person to an SEC filing document they filed, or from a sub-record (event, transaction, holding) to its parent filing"
2045
2536
  display_name: "Filed"
2046
2537
  mergeability: not_mergeable
2047
- domain_flavors: ["organization", "person", "sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
2048
- target_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
2538
+ domain_flavors: ["organization", "person", "sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
2539
+ target_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
2049
2540
  passive: true
2050
2541
 
2051
2542
  - name: "is_issuer_of"
@@ -2061,7 +2552,7 @@ relationships:
2061
2552
  display_name: "Filing Reference"
2062
2553
  mergeability: not_mergeable
2063
2554
  domain_flavors: ["organization", "person", "financial_instrument"]
2064
- target_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p"]
2555
+ target_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d"]
2065
2556
  passive: true
2066
2557
 
2067
2558
  # ── Filing → Organization ──
@@ -2070,7 +2561,7 @@ relationships:
2070
2561
  description: "Link from a filing or financial instrument to the company it pertains to (the filer for most forms; the issuer for ownership forms and 13F holdings)"
2071
2562
  display_name: "Issued By"
2072
2563
  mergeability: not_mergeable
2073
- domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing", "financial_instrument"]
2564
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing", "financial_instrument"]
2074
2565
  target_flavors: ["organization"]
2075
2566
  passive: true
2076
2567
 
@@ -2086,7 +2577,23 @@ relationships:
2086
2577
  description: "Link from a filing to the entity (person or organization) who filed it"
2087
2578
  display_name: "Filer"
2088
2579
  mergeability: not_mergeable
2089
- domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::filing"]
2580
+ domain_flavors: ["sec::10_k", "sec::10_q", "sec::20_f", "sec::8_k", "sec::6_k", "sec::40_f", "sec::form_3", "sec::form_4", "sec::sc_13d", "sec::sc_13g", "sec::13f_hr", "sec::def_14a", "sec::nport_p", "sec::ncen", "sec::form_d", "sec::filing"]
2581
+ target_flavors: ["organization", "person"]
2582
+ passive: true
2583
+
2584
+ # placed_offering is a per-offering transactional edge from the Form D
2585
+ # filing to a sales compensation recipient — distinct from the N-CEN
2586
+ # service-provider edges (audited_by, advised_by, has_principal_underwriter,
2587
+ # has_transfer_agent, custodied_by, sub_advised_by, has_securities_lending_
2588
+ # agent), which are durable registrant-↔-provider relationships that live
2589
+ # on the organization or financial_instrument. A single broker-dealer may
2590
+ # appear as `placed_offering` from many Form D filings while never
2591
+ # appearing on an N-CEN service-provider edge for those same issuers.
2592
+ - name: "placed_offering"
2593
+ description: "Link from a Form D filing to a broker-dealer, investment adviser, or registered representative receiving sales compensation for placing the Reg D offering"
2594
+ display_name: "Placed Offering"
2595
+ mergeability: not_mergeable
2596
+ domain_flavors: ["sec::form_d"]
2090
2597
  target_flavors: ["organization", "person"]
2091
2598
  passive: true
2092
2599
 
@@ -2194,6 +2701,122 @@ relationships:
2194
2701
  target_flavors: ["organization"]
2195
2702
  passive: true
2196
2703
 
2704
+ # ── N-CEN Service Provider Relationships ──
2705
+ # N-CEN filings disclose a registrant's service providers (auditors,
2706
+ # underwriters, advisers, custodians, transfer agents, securities lending
2707
+ # agents). Registrant-level providers attach to the organization; per-series
2708
+ # providers attach to the fund's financial_instrument.
2709
+
2710
+ - name: "audited_by"
2711
+ description: "Link from a registrant to its public accountant / auditor (N-CEN)"
2712
+ display_name: "Audited By"
2713
+ mergeability: not_mergeable
2714
+ domain_flavors: ["organization"]
2715
+ target_flavors: ["organization"]
2716
+ passive: true
2717
+
2718
+ - name: "has_principal_underwriter"
2719
+ description: "Link from a registrant to its principal underwriter (N-CEN)"
2720
+ display_name: "Has Principal Underwriter"
2721
+ mergeability: not_mergeable
2722
+ domain_flavors: ["organization"]
2723
+ target_flavors: ["organization"]
2724
+ passive: true
2725
+
2726
+ - name: "advised_by"
2727
+ description: "Link from a registrant or fund series to an investment adviser (N-CEN)"
2728
+ display_name: "Advised By"
2729
+ mergeability: not_mergeable
2730
+ domain_flavors: ["organization", "financial_instrument"]
2731
+ target_flavors: ["organization"]
2732
+ passive: true
2733
+
2734
+ - name: "has_transfer_agent"
2735
+ description: "Link from a registrant or fund series to a transfer agent (N-CEN)"
2736
+ display_name: "Has Transfer Agent"
2737
+ mergeability: not_mergeable
2738
+ domain_flavors: ["organization", "financial_instrument"]
2739
+ target_flavors: ["organization"]
2740
+ passive: true
2741
+
2742
+ - name: "custodied_by"
2743
+ description: "Link from a fund series to its primary custodian (N-CEN). Sub-custodians are excluded; the custody_type attribute captures the custodian's role."
2744
+ display_name: "Custodied By"
2745
+ mergeability: not_mergeable
2746
+ domain_flavors: ["financial_instrument"]
2747
+ target_flavors: ["organization"]
2748
+ passive: true
2749
+
2750
+ - name: "has_securities_lending_agent"
2751
+ description: "Link from a fund series to its securities lending agent (N-CEN)"
2752
+ display_name: "Has Securities Lending Agent"
2753
+ mergeability: not_mergeable
2754
+ domain_flavors: ["financial_instrument"]
2755
+ target_flavors: ["organization"]
2756
+ passive: true
2757
+
2758
+ - name: "sub_advised_by"
2759
+ description: "Link from a fund series to a sub-adviser organization (N-CEN Item C.9.c). Sub-advisers are delegated portfolio-management authority by the primary investment adviser, so this complements 'advised_by' rather than replacing it."
2760
+ display_name: "Sub-Advised By"
2761
+ mergeability: not_mergeable
2762
+ domain_flavors: ["financial_instrument"]
2763
+ target_flavors: ["organization"]
2764
+ passive: true
2765
+
2766
+ - name: "has_master_fund"
2767
+ description: "Link from a feeder fund to its master fund in a master-feeder structure (N-CEN Item C.3). The feeder invests substantially all assets in the master, so resolving this edge is required to see the feeder's true portfolio (which lives on the master's N-PORT)."
2768
+ display_name: "Has Master Fund"
2769
+ mergeability: not_mergeable
2770
+ domain_flavors: ["financial_instrument"]
2771
+ target_flavors: ["financial_instrument"]
2772
+ passive: true
2773
+
2774
+ - name: "has_feeder_fund"
2775
+ description: "Link from a master fund to one of its feeder funds (N-CEN master-feeder structure)."
2776
+ display_name: "Has Feeder Fund"
2777
+ mergeability: not_mergeable
2778
+ domain_flavors: ["financial_instrument"]
2779
+ target_flavors: ["financial_instrument"]
2780
+ passive: true
2781
+
2782
+ # ── N-CEN Governance (board + compliance) ──
2783
+ # is_director already exists for person → organization; we attach board
2784
+ # service from N-CEN directors to the registrant organization (board
2785
+ # service is registrant-wide, not per-fund). is_chief_compliance_officer
2786
+ # is a distinct edge from is_officer because the SEC discloses CCOs as
2787
+ # a separate registrant-level role with its own change-since-last-filing
2788
+ # signal.
2789
+ - name: "is_chief_compliance_officer"
2790
+ description: "A person serves as the Chief Compliance Officer of a registered investment company. Disclosed under N-CEN Item B.10."
2791
+ display_name: "Is CCO"
2792
+ mergeability: not_mergeable
2793
+ domain_flavors: ["person"]
2794
+ target_flavors: ["organization"]
2795
+ passive: true
2796
+
2797
+ # ── N-CEN Operational Incidents (Item B.20) ──
2798
+ # A valuation_method_change entity records a single materially-changed
2799
+ # valuation methodology. It links back to the disclosing N-CEN filing
2800
+ # (disclosed_in) and to each fund series the change applied to
2801
+ # (affects_series). Item B.22 / B.23 (NAV / dividend errors) are modelled
2802
+ # as per-fund booleans rather than separate entities since the XSD
2803
+ # carries no per-incident metadata for them.
2804
+ - name: "disclosed_in"
2805
+ description: "Link from an operational-incident sub-record (e.g. a valuation method change) to the SEC filing where it was disclosed."
2806
+ display_name: "Disclosed In"
2807
+ mergeability: not_mergeable
2808
+ domain_flavors: ["sec::valuation_method_change"]
2809
+ target_flavors: ["sec::ncen"]
2810
+ passive: true
2811
+
2812
+ - name: "affects_series"
2813
+ description: "Link from an operational-incident sub-record to a fund series the incident applied to (N-CEN per-incident series fan-out)."
2814
+ display_name: "Affects Series"
2815
+ mergeability: not_mergeable
2816
+ domain_flavors: ["sec::valuation_method_change"]
2817
+ target_flavors: ["financial_instrument"]
2818
+ passive: true
2819
+
2197
2820
  # =============================================================================
2198
2821
  # ATTRIBUTES
2199
2822
  # =============================================================================
@@ -2422,3 +3045,39 @@ attributes:
2422
3045
  description: "Aggregate value of securities lent to this borrower (USD)"
2423
3046
  display_name: "Lending Value"
2424
3047
  mergeability: not_mergeable
3048
+
3049
+ # ── custodied_by relationship attributes (N-CEN) ──
3050
+
3051
+ - property: "custodied_by"
3052
+ name: "custody_type"
3053
+ type: string
3054
+ description: "Custodian's role per N-CEN (e.g. SECURITIES, CASH, BANK_CUSTODIAN)"
3055
+ display_name: "Custody Type"
3056
+ mergeability: not_mergeable
3057
+
3058
+ # ── sub_advised_by relationship attributes (N-CEN) ──
3059
+
3060
+ - property: "sub_advised_by"
3061
+ name: "is_sub_adviser_affiliated"
3062
+ type: string
3063
+ description: "Whether the sub-adviser is affiliated with the registrant or primary adviser (Y or N) per N-CEN"
3064
+ display_name: "Sub-Adviser Affiliated"
3065
+ mergeability: not_mergeable
3066
+
3067
+ # ── is_director relationship attributes (N-CEN) ──
3068
+
3069
+ - property: "is_director"
3070
+ name: "is_interested_person"
3071
+ type: string
3072
+ description: "Whether the director is an 'interested person' (Y or N) of the registrant under section 2(a)(19) of the Investment Company Act per N-CEN Item B.9. Distinguishes affiliated/inside directors from independents."
3073
+ display_name: "Interested Person"
3074
+ mergeability: not_mergeable
3075
+
3076
+ # ── is_chief_compliance_officer relationship attributes (N-CEN) ──
3077
+
3078
+ - property: "is_chief_compliance_officer"
3079
+ name: "is_changed_since_last_filing"
3080
+ type: string
3081
+ description: "Whether the CCO changed since the registrant's last N-CEN filing (Y or N) per Item B.10"
3082
+ display_name: "Changed Since Last Filing"
3083
+ mergeability: not_mergeable