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

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.17",
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,22 @@ 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: "valuation_method_change"
153
+ namespace: "sec"
154
+ 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."
155
+ display_name: "Valuation Method Change"
156
+ mergeability: not_mergeable
157
+ strong_id_properties: ["valuation_change_id"]
158
+ passive: true
159
+
137
160
  - name: "filing"
138
161
  namespace: "sec"
139
162
  description: "SEC filing (generic, for form types without a specific modeled flavor)"
@@ -146,7 +169,13 @@ flavors:
146
169
  description: "A real person as opposed to a fictional character, such as a CEO, politician, or public figure"
147
170
  display_name: "Person"
148
171
  mergeability: not_mergeable
149
- strong_id_properties: ["person_cik"]
172
+ # crd_number is FINRA's individual Central Registration Depository
173
+ # identifier, disclosed for fund directors and chief compliance officers
174
+ # on N-CEN. Adding it as a strong ID lets the same person merge across
175
+ # all the registrants (and historical filings) where they're disclosed.
176
+ # The same crd_number property exists on organization (for firm-level
177
+ # CRDs) — flavor scoping prevents cross-namespace collisions.
178
+ strong_id_properties: ["person_cik", "crd_number"]
150
179
  passive: true
151
180
 
152
181
  - name: "financial_instrument"
@@ -175,7 +204,7 @@ properties:
175
204
  description: "SEC Central Index Key, 10-digit zero-padded"
176
205
  display_name: "CIK"
177
206
  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"]
207
+ 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"]
179
208
  passive: true
180
209
 
181
210
  - name: "ticker"
@@ -597,7 +626,7 @@ properties:
597
626
  description: "SEC accession number uniquely identifying a filing"
598
627
  display_name: "Accession Number"
599
628
  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"]
629
+ 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"]
601
630
  passive: true
602
631
 
603
632
  - name: "form_type"
@@ -605,7 +634,7 @@ properties:
605
634
  description: "Normalized SEC form type (e.g. 10-K, SC 13D, 4)"
606
635
  display_name: "Form Type"
607
636
  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"]
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::filing"]
609
638
  passive: true
610
639
 
611
640
  - name: "filing_date"
@@ -613,7 +642,7 @@ properties:
613
642
  description: "Date the filing was submitted to the SEC (YYYY-MM-DD)"
614
643
  display_name: "Filing Date"
615
644
  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"]
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::filing"]
617
646
  passive: true
618
647
 
619
648
  - name: "report_date"
@@ -621,7 +650,7 @@ properties:
621
650
  description: "End date of the primary reporting period (YYYY-MM-DD)"
622
651
  display_name: "Report Date"
623
652
  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"]
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::filing"]
625
654
  passive: true
626
655
 
627
656
  # ── XBRL Financial Facts (key concepts) ──
@@ -1558,10 +1587,10 @@ properties:
1558
1587
 
1559
1588
  - name: "report_period_date"
1560
1589
  type: string
1561
- description: "End date for the report period (e.g. quarter-end for 13F-HR, month-end for N-PORT)"
1590
+ 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
1591
  display_name: "Report Period Date"
1563
1592
  mergeability: not_mergeable
1564
- domain_flavors: ["sec::13f_hr", "sec::nport_p"]
1593
+ domain_flavors: ["sec::13f_hr", "sec::nport_p", "sec::ncen"]
1565
1594
  passive: true
1566
1595
 
1567
1596
  - name: "confidential_treatment_flag"
@@ -1767,6 +1796,308 @@ properties:
1767
1796
  domain_flavors: ["organization"]
1768
1797
  passive: true
1769
1798
 
1799
+ # ── Organization: N-CEN Service Provider Identifiers ──
1800
+ # These are strong IDs on organization (see flavor definition above) so
1801
+ # N-CEN service providers (advisers, transfer agents) merge across filings
1802
+ # even when the SEC hasn't assigned them a CIK.
1803
+
1804
+ - name: "sec_file_number"
1805
+ type: string
1806
+ 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)"
1807
+ display_name: "SEC File Number"
1808
+ mergeability: not_mergeable
1809
+ domain_flavors: ["organization", "financial_instrument"]
1810
+ passive: true
1811
+
1812
+ - name: "pcaob_number"
1813
+ type: string
1814
+ 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."
1815
+ display_name: "PCAOB Number"
1816
+ mergeability: not_mergeable
1817
+ domain_flavors: ["organization"]
1818
+ passive: true
1819
+
1820
+ # ── N-CEN Filing Metadata ──
1821
+
1822
+ # SEC investment-company classification under the Investment Company
1823
+ # Act of 1940. A durable registrant trait — an adviser complex is
1824
+ # permanently N-1A (open-end), N-2 (closed-end), N-3/N-4 (variable
1825
+ # insurance), N-6 (variable life), etc., barring rare re-organisation.
1826
+ # Lives on the organization for cross-filing querying ("which
1827
+ # registrants are N-1A?") and on the sec::ncen filing that disclosed
1828
+ # it for per-filing provenance. Populated from N-CEN today; any
1829
+ # future form carrying the same classification can emit it.
1830
+ - name: "investment_company_type"
1831
+ type: string
1832
+ 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."
1833
+ display_name: "Investment Company Type"
1834
+ mergeability: not_mergeable
1835
+ domain_flavors: ["organization", "sec::ncen"]
1836
+ passive: true
1837
+
1838
+ # Filing-preparer contact. Every SEC submission carries a CONTACT_TYPE
1839
+ # block in the SGML/XML header naming the person SEC should reach about
1840
+ # the submission — typically inside counsel or a fund-admin paralegal,
1841
+ # distinct from the registrant. Flattened into a single comma-joined
1842
+ # "name, email, phone" string because the contact has no stable
1843
+ # identifier across filings (no CIK, no CRD) and no downstream queries
1844
+ # branch on the individual fields. Empty pieces are omitted from the
1845
+ # join. Lives on the filing rather than the registrant org (which has
1846
+ # its own business_phone). Currently populated only by the N-CEN
1847
+ # handler; the full SEC filings domain is declared so other form
1848
+ # handlers can lift the same CONTACT_TYPE block without schema changes.
1849
+ - name: "contact"
1850
+ type: string
1851
+ 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."
1852
+ display_name: "Contact"
1853
+ mergeability: not_mergeable
1854
+ 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"]
1855
+ passive: true
1856
+
1857
+ # N-CEN Item B.* signals. Each property attaches to its single natural
1858
+ # home: durable registrant attributes (fund_family_name) live on the
1859
+ # organization; per-filing lifecycle facts and per-period event flags
1860
+ # (is_first/last_filing, is_material_weakness, is_public_accountant_
1861
+ # changed, is_accounting_principle_change, had_nav_error,
1862
+ # had_dividend_error) live on the sec::ncen filing. Putting per-period
1863
+ # facts on the org would accumulate conflicting Y/N atoms across years
1864
+ # (a fund that had a material weakness in 2018 but not 2019-2025 isn't
1865
+ # permanently a "material weakness" org). To answer "did this fund
1866
+ # ever..." or "what's its current state", join through the filer edge
1867
+ # to the most recent or all sec::ncen filings. Material valuation
1868
+ # method changes (Item B.20) are intentionally modelled only as the
1869
+ # sec::valuation_method_change sub-record flavor — no rollup boolean
1870
+ # on the filing or fund — since the per-change detail (date, asset
1871
+ # type, regulatory basis, free-text explanation) is the meaningful
1872
+ # signal and "did it happen?" is recoverable by existence check on
1873
+ # the sub-records' disclosed_in / affects_series edges.
1874
+ - name: "fund_family_name"
1875
+ type: string
1876
+ 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')."
1877
+ display_name: "Fund Family"
1878
+ mergeability: not_mergeable
1879
+ domain_flavors: ["organization"]
1880
+ passive: true
1881
+
1882
+ # Filing position on the registrant's N-CEN lifecycle. One enum
1883
+ # rather than two independent booleans because a filing is in exactly
1884
+ # one of three positions: first submission (fund launch), last
1885
+ # submission (wind-down), or ongoing. "last" wins when both B.2 and
1886
+ # B.3 are Y on the same filing (rare same-year launch-and-terminate).
1887
+ - name: "filing_lifecycle_position"
1888
+ type: string
1889
+ 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."
1890
+ display_name: "Filing Lifecycle Position"
1891
+ mergeability: not_mergeable
1892
+ domain_flavors: ["sec::ncen"]
1893
+ passive: true
1894
+
1895
+ - name: "is_material_weakness"
1896
+ type: string
1897
+ description: "Whether the auditor reported a material weakness in internal control (Y or N) per N-CEN Item B.6"
1898
+ display_name: "Material Weakness"
1899
+ mergeability: not_mergeable
1900
+ domain_flavors: ["sec::ncen"]
1901
+ passive: true
1902
+
1903
+ - name: "is_public_accountant_changed"
1904
+ type: string
1905
+ description: "Whether the registrant's public accountant changed during the period (Y or N) per N-CEN Item B.5 — auditor turnover signal"
1906
+ display_name: "Public Accountant Changed"
1907
+ mergeability: not_mergeable
1908
+ domain_flavors: ["sec::ncen"]
1909
+ passive: true
1910
+
1911
+ - name: "is_accounting_principle_change"
1912
+ type: string
1913
+ description: "Whether the registrant changed accounting principles during the period (Y or N) per N-CEN Item B.7"
1914
+ display_name: "Accounting Principle Change"
1915
+ mergeability: not_mergeable
1916
+ domain_flavors: ["sec::ncen"]
1917
+ passive: true
1918
+
1919
+ # NAV- and dividend-error flags live on both the sec::ncen filing
1920
+ # (registrant-wide "did any series have an error?") and on each
1921
+ # affected financial_instrument series. Same concept, two
1922
+ # granularities, so one property per concept with dual flavors.
1923
+ # Registrant-level emission is Y or N (B.22 / B.23 is always
1924
+ # answered); per-series emission is Y-only (absence reads as "this
1925
+ # series was not listed as affected").
1926
+ - name: "had_nav_error"
1927
+ type: string
1928
+ 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)."
1929
+ display_name: "Had NAV Error"
1930
+ mergeability: not_mergeable
1931
+ domain_flavors: ["sec::ncen", "financial_instrument"]
1932
+ passive: true
1933
+
1934
+ - name: "had_dividend_error"
1935
+ type: string
1936
+ 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)."
1937
+ display_name: "Had Dividend Error"
1938
+ mergeability: not_mergeable
1939
+ domain_flavors: ["sec::ncen", "financial_instrument"]
1940
+ passive: true
1941
+
1942
+ # FINRA Central Registration Depository identifier — applied to both
1943
+ # firms (an investment-adviser, principal underwriter, sub-adviser
1944
+ # disclosed on an N-CEN service-provider list) and individuals (fund
1945
+ # directors and chief compliance officers). Flavor scopes the
1946
+ # namespace, so the same numeric value on an org and a person resolves
1947
+ # to two distinct entities (FINRA does maintain separate firm vs.
1948
+ # individual registries, but flavor scoping is the durable safeguard).
1949
+ - name: "crd_number"
1950
+ type: string
1951
+ 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."
1952
+ display_name: "CRD Number"
1953
+ mergeability: not_mergeable
1954
+ domain_flavors: ["organization", "person"]
1955
+ passive: true
1956
+
1957
+ # Valuation method change entity properties (N-CEN Item B.20).
1958
+ - name: "valuation_change_id"
1959
+ type: string
1960
+ description: "Synthetic strong ID for an N-CEN valuation method change record (accession_number::index)"
1961
+ display_name: "Valuation Change ID"
1962
+ mergeability: not_mergeable
1963
+ domain_flavors: ["sec::valuation_method_change"]
1964
+ passive: true
1965
+
1966
+ # Scoped field names — "change_date"/"change_explanation" would be
1967
+ # magnets for future collisions with other change-event sub-records
1968
+ # (auditor change, name change, fiscal-year change, …). Keeping the
1969
+ # valuation_ prefix means each future sub-record can coin its own
1970
+ # scoped pair (auditor_change_date, …) without re-writing history.
1971
+ - name: "valuation_change_date"
1972
+ type: string
1973
+ description: "Date the valuation methodology change took effect (YYYY-MM-DD) per N-CEN Item B.20"
1974
+ display_name: "Valuation Change Date"
1975
+ mergeability: not_mergeable
1976
+ domain_flavors: ["sec::valuation_method_change"]
1977
+ passive: true
1978
+
1979
+ - name: "valuation_change_explanation"
1980
+ type: string
1981
+ description: "Free-text explanation of the valuation methodology change per N-CEN Item B.20"
1982
+ display_name: "Valuation Change Explanation"
1983
+ mergeability: not_mergeable
1984
+ domain_flavors: ["sec::valuation_method_change"]
1985
+ passive: true
1986
+
1987
+ - name: "affected_asset_type"
1988
+ type: string
1989
+ description: "Asset category whose valuation methodology changed (N-CEN ASSET_TYPE enum: equity, debt, derivative, etc.)"
1990
+ display_name: "Affected Asset Type"
1991
+ mergeability: not_mergeable
1992
+ domain_flavors: ["sec::valuation_method_change"]
1993
+ passive: true
1994
+
1995
+ - name: "affected_investment_type"
1996
+ type: string
1997
+ description: "Free-text sub-classification of investments affected by the valuation methodology change per N-CEN"
1998
+ display_name: "Affected Investment Type"
1999
+ mergeability: not_mergeable
2000
+ domain_flavors: ["sec::valuation_method_change"]
2001
+ passive: true
2002
+
2003
+ - name: "regulatory_basis"
2004
+ type: string
2005
+ description: "Statutory or regulatory basis cited for the valuation methodology change per N-CEN (e.g. 'Rule 2a-5 fair value designee determination')"
2006
+ display_name: "Regulatory Basis"
2007
+ mergeability: not_mergeable
2008
+ domain_flavors: ["sec::valuation_method_change"]
2009
+ passive: true
2010
+
2011
+ # ── Financial Instrument: N-CEN Fund Operational Data ──
2012
+
2013
+ - name: "is_fund_of_funds"
2014
+ type: string
2015
+ description: "Whether the fund is a fund-of-funds (Y or N) per N-CEN"
2016
+ display_name: "Fund of Funds"
2017
+ mergeability: not_mergeable
2018
+ domain_flavors: ["financial_instrument"]
2019
+ passive: true
2020
+
2021
+ - name: "is_etf"
2022
+ type: string
2023
+ description: "Whether the fund is an exchange-traded fund (Y or N) per N-CEN"
2024
+ display_name: "ETF"
2025
+ mergeability: not_mergeable
2026
+ domain_flavors: ["financial_instrument"]
2027
+ passive: true
2028
+
2029
+ - name: "securities_lending_enabled"
2030
+ type: string
2031
+ description: "Whether the fund engages in securities lending (Y or N) per N-CEN"
2032
+ display_name: "Securities Lending Enabled"
2033
+ mergeability: not_mergeable
2034
+ domain_flavors: ["financial_instrument"]
2035
+ passive: true
2036
+
2037
+ - name: "avg_portfolio_securities_value"
2038
+ type: float
2039
+ description: "Average value of portfolio securities on loan during the reporting period (USD) per N-CEN"
2040
+ display_name: "Avg Portfolio Securities Value"
2041
+ mergeability: not_mergeable
2042
+ domain_flavors: ["financial_instrument"]
2043
+ passive: true
2044
+
2045
+ - name: "net_income_securities_lending"
2046
+ type: float
2047
+ description: "Net income from securities lending during the reporting period (USD) per N-CEN"
2048
+ display_name: "Net Income (Securities Lending)"
2049
+ mergeability: not_mergeable
2050
+ domain_flavors: ["financial_instrument"]
2051
+ passive: true
2052
+
2053
+ - name: "avg_net_assets_monthly"
2054
+ type: float
2055
+ description: "Average net assets of the fund computed monthly during the reporting period (USD) per N-CEN Item C.19"
2056
+ display_name: "Avg Net Assets (Monthly)"
2057
+ mergeability: not_mergeable
2058
+ domain_flavors: ["financial_instrument"]
2059
+ passive: true
2060
+
2061
+ - name: "avg_net_assets_daily"
2062
+ type: float
2063
+ description: "Average net assets of the fund computed daily during the reporting period (USD) per N-CEN Item C.19"
2064
+ display_name: "Avg Net Assets (Daily)"
2065
+ mergeability: not_mergeable
2066
+ domain_flavors: ["financial_instrument"]
2067
+ passive: true
2068
+
2069
+ - name: "index_tracking_diff_pre_fees"
2070
+ type: float
2071
+ description: "Index fund tracking difference vs. benchmark before fees and expenses (per N-CEN indexFundInfo)"
2072
+ display_name: "Index Tracking Diff (Pre-Fees)"
2073
+ mergeability: not_mergeable
2074
+ domain_flavors: ["financial_instrument"]
2075
+ passive: true
2076
+
2077
+ - name: "index_tracking_diff_post_fees"
2078
+ type: float
2079
+ description: "Index fund tracking difference vs. benchmark after fees and expenses (per N-CEN indexFundInfo)"
2080
+ display_name: "Index Tracking Diff (Post-Fees)"
2081
+ mergeability: not_mergeable
2082
+ domain_flavors: ["financial_instrument"]
2083
+ passive: true
2084
+
2085
+ - name: "index_tracking_stdev_pre_fees"
2086
+ type: float
2087
+ description: "Daily standard deviation of index fund tracking difference before fees and expenses (per N-CEN indexFundInfo)"
2088
+ display_name: "Index Tracking Stdev (Pre-Fees)"
2089
+ mergeability: not_mergeable
2090
+ domain_flavors: ["financial_instrument"]
2091
+ passive: true
2092
+
2093
+ - name: "index_tracking_stdev_post_fees"
2094
+ type: float
2095
+ description: "Daily standard deviation of index fund tracking difference after fees and expenses (per N-CEN indexFundInfo)"
2096
+ display_name: "Index Tracking Stdev (Post-Fees)"
2097
+ mergeability: not_mergeable
2098
+ domain_flavors: ["financial_instrument"]
2099
+ passive: true
2100
+
1770
2101
  # ── Financial Instrument: N-PORT Fund Financials ──
1771
2102
 
1772
2103
  - name: "fund_total_assets"
@@ -2044,8 +2375,8 @@ relationships:
2044
2375
  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
2376
  display_name: "Filed"
2046
2377
  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"]
2378
+ 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::filing"]
2379
+ 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::filing"]
2049
2380
  passive: true
2050
2381
 
2051
2382
  - name: "is_issuer_of"
@@ -2061,7 +2392,7 @@ relationships:
2061
2392
  display_name: "Filing Reference"
2062
2393
  mergeability: not_mergeable
2063
2394
  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"]
2395
+ 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"]
2065
2396
  passive: true
2066
2397
 
2067
2398
  # ── Filing → Organization ──
@@ -2070,7 +2401,7 @@ relationships:
2070
2401
  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
2402
  display_name: "Issued By"
2072
2403
  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"]
2404
+ 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", "financial_instrument"]
2074
2405
  target_flavors: ["organization"]
2075
2406
  passive: true
2076
2407
 
@@ -2086,7 +2417,7 @@ relationships:
2086
2417
  description: "Link from a filing to the entity (person or organization) who filed it"
2087
2418
  display_name: "Filer"
2088
2419
  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"]
2420
+ 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"]
2090
2421
  target_flavors: ["organization", "person"]
2091
2422
  passive: true
2092
2423
 
@@ -2194,6 +2525,122 @@ relationships:
2194
2525
  target_flavors: ["organization"]
2195
2526
  passive: true
2196
2527
 
2528
+ # ── N-CEN Service Provider Relationships ──
2529
+ # N-CEN filings disclose a registrant's service providers (auditors,
2530
+ # underwriters, advisers, custodians, transfer agents, securities lending
2531
+ # agents). Registrant-level providers attach to the organization; per-series
2532
+ # providers attach to the fund's financial_instrument.
2533
+
2534
+ - name: "audited_by"
2535
+ description: "Link from a registrant to its public accountant / auditor (N-CEN)"
2536
+ display_name: "Audited By"
2537
+ mergeability: not_mergeable
2538
+ domain_flavors: ["organization"]
2539
+ target_flavors: ["organization"]
2540
+ passive: true
2541
+
2542
+ - name: "has_principal_underwriter"
2543
+ description: "Link from a registrant to its principal underwriter (N-CEN)"
2544
+ display_name: "Has Principal Underwriter"
2545
+ mergeability: not_mergeable
2546
+ domain_flavors: ["organization"]
2547
+ target_flavors: ["organization"]
2548
+ passive: true
2549
+
2550
+ - name: "advised_by"
2551
+ description: "Link from a registrant or fund series to an investment adviser (N-CEN)"
2552
+ display_name: "Advised By"
2553
+ mergeability: not_mergeable
2554
+ domain_flavors: ["organization", "financial_instrument"]
2555
+ target_flavors: ["organization"]
2556
+ passive: true
2557
+
2558
+ - name: "has_transfer_agent"
2559
+ description: "Link from a registrant or fund series to a transfer agent (N-CEN)"
2560
+ display_name: "Has Transfer Agent"
2561
+ mergeability: not_mergeable
2562
+ domain_flavors: ["organization", "financial_instrument"]
2563
+ target_flavors: ["organization"]
2564
+ passive: true
2565
+
2566
+ - name: "custodied_by"
2567
+ 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."
2568
+ display_name: "Custodied By"
2569
+ mergeability: not_mergeable
2570
+ domain_flavors: ["financial_instrument"]
2571
+ target_flavors: ["organization"]
2572
+ passive: true
2573
+
2574
+ - name: "has_securities_lending_agent"
2575
+ description: "Link from a fund series to its securities lending agent (N-CEN)"
2576
+ display_name: "Has Securities Lending Agent"
2577
+ mergeability: not_mergeable
2578
+ domain_flavors: ["financial_instrument"]
2579
+ target_flavors: ["organization"]
2580
+ passive: true
2581
+
2582
+ - name: "sub_advised_by"
2583
+ 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."
2584
+ display_name: "Sub-Advised By"
2585
+ mergeability: not_mergeable
2586
+ domain_flavors: ["financial_instrument"]
2587
+ target_flavors: ["organization"]
2588
+ passive: true
2589
+
2590
+ - name: "has_master_fund"
2591
+ 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)."
2592
+ display_name: "Has Master Fund"
2593
+ mergeability: not_mergeable
2594
+ domain_flavors: ["financial_instrument"]
2595
+ target_flavors: ["financial_instrument"]
2596
+ passive: true
2597
+
2598
+ - name: "has_feeder_fund"
2599
+ description: "Link from a master fund to one of its feeder funds (N-CEN master-feeder structure)."
2600
+ display_name: "Has Feeder Fund"
2601
+ mergeability: not_mergeable
2602
+ domain_flavors: ["financial_instrument"]
2603
+ target_flavors: ["financial_instrument"]
2604
+ passive: true
2605
+
2606
+ # ── N-CEN Governance (board + compliance) ──
2607
+ # is_director already exists for person → organization; we attach board
2608
+ # service from N-CEN directors to the registrant organization (board
2609
+ # service is registrant-wide, not per-fund). is_chief_compliance_officer
2610
+ # is a distinct edge from is_officer because the SEC discloses CCOs as
2611
+ # a separate registrant-level role with its own change-since-last-filing
2612
+ # signal.
2613
+ - name: "is_chief_compliance_officer"
2614
+ description: "A person serves as the Chief Compliance Officer of a registered investment company. Disclosed under N-CEN Item B.10."
2615
+ display_name: "Is CCO"
2616
+ mergeability: not_mergeable
2617
+ domain_flavors: ["person"]
2618
+ target_flavors: ["organization"]
2619
+ passive: true
2620
+
2621
+ # ── N-CEN Operational Incidents (Item B.20) ──
2622
+ # A valuation_method_change entity records a single materially-changed
2623
+ # valuation methodology. It links back to the disclosing N-CEN filing
2624
+ # (disclosed_in) and to each fund series the change applied to
2625
+ # (affects_series). Item B.22 / B.23 (NAV / dividend errors) are modelled
2626
+ # as per-fund booleans rather than separate entities since the XSD
2627
+ # carries no per-incident metadata for them.
2628
+ - name: "disclosed_in"
2629
+ description: "Link from an operational-incident sub-record (e.g. a valuation method change) to the SEC filing where it was disclosed."
2630
+ display_name: "Disclosed In"
2631
+ mergeability: not_mergeable
2632
+ domain_flavors: ["sec::valuation_method_change"]
2633
+ target_flavors: ["sec::ncen"]
2634
+ passive: true
2635
+
2636
+ - name: "affects_series"
2637
+ description: "Link from an operational-incident sub-record to a fund series the incident applied to (N-CEN per-incident series fan-out)."
2638
+ display_name: "Affects Series"
2639
+ mergeability: not_mergeable
2640
+ domain_flavors: ["sec::valuation_method_change"]
2641
+ target_flavors: ["financial_instrument"]
2642
+ passive: true
2643
+
2197
2644
  # =============================================================================
2198
2645
  # ATTRIBUTES
2199
2646
  # =============================================================================
@@ -2422,3 +2869,39 @@ attributes:
2422
2869
  description: "Aggregate value of securities lent to this borrower (USD)"
2423
2870
  display_name: "Lending Value"
2424
2871
  mergeability: not_mergeable
2872
+
2873
+ # ── custodied_by relationship attributes (N-CEN) ──
2874
+
2875
+ - property: "custodied_by"
2876
+ name: "custody_type"
2877
+ type: string
2878
+ description: "Custodian's role per N-CEN (e.g. SECURITIES, CASH, BANK_CUSTODIAN)"
2879
+ display_name: "Custody Type"
2880
+ mergeability: not_mergeable
2881
+
2882
+ # ── sub_advised_by relationship attributes (N-CEN) ──
2883
+
2884
+ - property: "sub_advised_by"
2885
+ name: "is_sub_adviser_affiliated"
2886
+ type: string
2887
+ description: "Whether the sub-adviser is affiliated with the registrant or primary adviser (Y or N) per N-CEN"
2888
+ display_name: "Sub-Adviser Affiliated"
2889
+ mergeability: not_mergeable
2890
+
2891
+ # ── is_director relationship attributes (N-CEN) ──
2892
+
2893
+ - property: "is_director"
2894
+ name: "is_interested_person"
2895
+ type: string
2896
+ 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."
2897
+ display_name: "Interested Person"
2898
+ mergeability: not_mergeable
2899
+
2900
+ # ── is_chief_compliance_officer relationship attributes (N-CEN) ──
2901
+
2902
+ - property: "is_chief_compliance_officer"
2903
+ name: "is_changed_since_last_filing"
2904
+ type: string
2905
+ description: "Whether the CCO changed since the registrant's last N-CEN filing (Y or N) per Item B.10"
2906
+ display_name: "Changed Since Last Filing"
2907
+ mergeability: not_mergeable