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

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.38",
3
+ "version": "0.0.39",
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",
@@ -51,6 +51,7 @@ Each SEC form type is a separate flavor, namespaced under `sec`. All share the s
51
51
  | `sec::sc_13g` | SC 13G | Beneficial ownership report (passive) |
52
52
  | `sec::13f_hr` | 13F-HR | Institutional investment manager holdings |
53
53
  | `sec::def_14a` | DEF 14A | Definitive proxy statement |
54
+ | `sec::s_4` | S-4 | Registration statement for securities issued in business combinations (mergers, acquisitions, exchange offers). Heuristic extraction of acquisition target, target legal counsel, and M&A classification. |
54
55
  | `sec::6_k` | 6-K | Foreign private issuer current report (XBRL only, no form download) |
55
56
  | `sec::40_f` | 40-F | Canadian cross-border annual report (XBRL only, no form download) |
56
57
  | `sec::filing` | SEC Filing | Generic filing — defined in `schema.yaml` but **never produced**: `SecFormFlavor()` returns `""` for unmodeled forms, causing them to be skipped in `AtomizeFilingsV2` |
@@ -157,6 +157,14 @@ flavors:
157
157
  strong_id_properties: ["accession_number"]
158
158
  passive: true
159
159
 
160
+ - name: "s_4"
161
+ namespace: "sec"
162
+ description: "Registration statement (Form S-4) filed to register securities issued in connection with a business combination, merger, or acquisition."
163
+ display_name: "S-4"
164
+ mergeability: not_mergeable
165
+ strong_id_properties: ["accession_number"]
166
+ passive: true
167
+
160
168
  - name: "valuation_method_change"
161
169
  namespace: "sec"
162
170
  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."
@@ -212,7 +220,7 @@ properties:
212
220
  description: "SEC Central Index Key, 10-digit zero-padded"
213
221
  display_name: "CIK"
214
222
  mergeability: not_mergeable
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"]
223
+ 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", "sec::s_4"]
216
224
  passive: true
217
225
 
218
226
  - name: "ticker"
@@ -634,7 +642,7 @@ properties:
634
642
  description: "SEC accession number uniquely identifying a filing"
635
643
  display_name: "Accession Number"
636
644
  mergeability: not_mergeable
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"]
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::s_4", "sec::filing"]
638
646
  passive: true
639
647
 
640
648
  - name: "form_type"
@@ -642,7 +650,7 @@ properties:
642
650
  description: "Normalized SEC form type (e.g. 10-K, SC 13D, 4)"
643
651
  display_name: "Form Type"
644
652
  mergeability: not_mergeable
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"]
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::s_4", "sec::filing"]
646
654
  passive: true
647
655
 
648
656
  - name: "filing_date"
@@ -650,7 +658,7 @@ properties:
650
658
  description: "Date the filing was submitted to the SEC (YYYY-MM-DD)"
651
659
  display_name: "Filing Date"
652
660
  mergeability: not_mergeable
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"]
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::s_4", "sec::filing"]
654
662
  passive: true
655
663
 
656
664
  - name: "report_date"
@@ -658,8 +666,280 @@ properties:
658
666
  description: "End date of the primary reporting period (YYYY-MM-DD)"
659
667
  display_name: "Report Date"
660
668
  mergeability: not_mergeable
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"]
662
- passive: true
669
+ 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::s_4", "sec::filing"]
670
+ passive: true
671
+
672
+ # ── S-4 M&A Metadata ──
673
+
674
+ - name: "mna_classification"
675
+ type: string
676
+ description: "High-level classification of the S-4 transaction type. merger / exchange_offer are real third-party transactions (target extraction applies); no_acquisition_target marks spin-offs, redomestications, internal restructurings, and shelf S-4s where the filing has no real third-party target (target extraction is skipped to avoid hallucinated emissions)."
677
+ display_name: "M&A Classification"
678
+ mergeability: not_mergeable
679
+ domain_flavors: ["sec::s_4"]
680
+ classification:
681
+ values:
682
+ - name: "merger"
683
+ description: "Statutory merger or acquisition via merger agreement"
684
+ - name: "exchange_offer"
685
+ description: "Securities exchange offer (one company offers its shares for shares of another)"
686
+ - name: "no_acquisition_target"
687
+ description: "Non-acquisition transaction — spin-off / separation, redomestication / change-of-jurisdiction, internal corporate restructuring, or business-combination shelf S-4. No third-party target."
688
+ passive: true
689
+
690
+ - name: "mna_filing_state"
691
+ type: string
692
+ description: |
693
+ State of the M&A transaction at the time of this filing. Derived
694
+ deterministically from the form_type — no LLM extraction:
695
+ - "registered" — initial registration or amendment, deal pending.
696
+ S-4, S-4/A, S-4EF, S-4POS, F-4, F-4/A, F-4EF, F-4POS.
697
+ - "effective" — merger has closed at filing time. S-4MEF, F-4MEF
698
+ (Merger Effective registrations are filed at or
699
+ immediately after the effective date).
700
+ Use this to distinguish pending acquisitions from completed ones when
701
+ querying the s_4 document set. The graph also carries this distinction
702
+ via the has_acquisition_target (pending) vs has_acquired (closed)
703
+ relationships.
704
+ display_name: "M&A Filing State"
705
+ mergeability: not_mergeable
706
+ domain_flavors: ["sec::s_4"]
707
+ passive: true
708
+
709
+ - name: "mna_deal_type"
710
+ type: string
711
+ description: |
712
+ How the consideration paid to target shareholders is structured. Look at the "Merger Consideration" or "Consideration" section of the merger agreement / Q&A — focus on what target shareholders RECEIVE at closing in exchange for each share they hold.
713
+
714
+ Reasoning steps:
715
+ 1. Find the merger-consideration clause (typically "Each share of [target] common stock ... shall be converted into the right to receive ...").
716
+ 2. Categorize what they receive: cash only, acquirer-stock only, or a mix.
717
+ 3. If shareholders may ELECT between cash and stock (with proration), that is cash_and_stock.
718
+ 4. asset_purchase is rare in S-4 filings and applies ONLY when the acquirer is purchasing specific assets and leaving the target entity intact — NOT a stock-for-stock merger of the whole company, NOT an acquisition of all outstanding shares.
719
+
720
+ Worked examples:
721
+ - "each share ... converted into 0.123 shares of Acquirer common stock" → stock
722
+ - "each share ... converted into $X.XX in cash" → cash
723
+ - "each share ... converted into $X.XX in cash AND 0.123 shares of Acquirer common stock" → cash_and_stock
724
+ - "each share ... shall be converted into, at the holder's election, either $X.XX cash or 0.123 shares (subject to proration)" → cash_and_stock
725
+ - Debt-for-debt exchange offer (registering new notes for old notes) → not_disclosed
726
+
727
+ Negative examples (do NOT classify as asset_purchase):
728
+ - "Acquirer will acquire all outstanding shares of Target" → this is stock or cash, NOT asset_purchase
729
+ - "purchase of the Company" without an explicit asset list → stock or cash, NOT asset_purchase
730
+ display_name: "M&A Deal Type"
731
+ mergeability: not_mergeable
732
+ domain_flavors: ["sec::s_4"]
733
+ extraction_config:
734
+ level: document
735
+ classification:
736
+ include_snippet: true
737
+ values:
738
+ - name: "cash"
739
+ description: "Target shareholders receive cash only"
740
+ - name: "stock"
741
+ description: "Target shareholders receive acquirer shares only (including stock-for-stock mergers with fractional cash)"
742
+ - name: "cash_and_stock"
743
+ description: "Target shareholders receive a mix of cash and acquirer shares, or may elect between them"
744
+ - name: "asset_purchase"
745
+ description: "Acquirer purchases specific assets of the target rather than acquiring the target's equity. Rare in S-4 filings."
746
+ - name: "not_disclosed"
747
+ description: "Consideration structure is not specified in the filing (e.g., debt-only exchange offers and notes-for-notes registrations)"
748
+
749
+ - name: "mna_deal_value_usd"
750
+ type: float
751
+ description: |
752
+ Aggregate transaction value in USD — the total consideration the acquirer is paying for the target as an enterprise. Return as a plain integer dollar amount with no symbols, units, commas, or words — e.g., 2300000000 for $2.3 billion, 850000000 for $850 million.
753
+
754
+ What qualifies (return ONE of these if explicitly stated):
755
+ - "aggregate transaction value of $X"
756
+ - "total enterprise value of $X"
757
+ - "total equity value of $X"
758
+ - "aggregate consideration of $X" (when X is the deal total, not per share)
759
+ - "valuing [target] at $X" (when X is total, not per share)
760
+
761
+ What does NOT qualify — return 'not stated' rather than guessing from these:
762
+ - Per-share price ("$13.00 per share", "$X.XX per share in cash") — even though the math would yield an aggregate, do NOT compute it; the prompt asks for a stated aggregate.
763
+ - Termination/breakup fees (these are typically 2-5% of deal size and appear in the agreement's termination article).
764
+ - Advisor / banker / financial-advisor / fairness-opinion fees (e.g., "Goldman Sachs received $23M").
765
+ - SPAC trust amounts ("$300M held in trust", "$19.4M remaining after redemptions") — those are SPAC cash, not deal value.
766
+ - Top-up consideration caps, contingent value rights (CVRs), earn-outs, or any conditional figure.
767
+ - The acquirer's market cap or the target's market cap (those are not the transaction value).
768
+
769
+ Worked examples (from real S-4 audit failures):
770
+ - "Goldman Sachs ... financial advisor ... aggregate fee of $23 million" → 'not stated' (advisor fee, not deal value).
771
+ - "termination fee of $296 million payable to [Acquirer]" → 'not stated' (termination fee).
772
+ - "$415 million election cap" → 'not stated' (per-share election cap, not aggregate).
773
+ - "remaining $19.4 million in the Trust Account" → 'not stated' (SPAC trust balance).
774
+ - "merger consideration of $6.50 per share" → 'not stated' (per-share, do not multiply).
775
+ - "transaction values the company at approximately $2.3 billion" → 2300000000.
776
+
777
+ Return 'not stated' if no aggregate transaction value is disclosed in the document.
778
+ display_name: "M&A Deal Value (USD)"
779
+ mergeability: not_mergeable
780
+ domain_flavors: ["sec::s_4"]
781
+ extraction_config:
782
+ level: document
783
+ literal:
784
+ include_snippet: true
785
+
786
+ - name: "mna_tax_treatment"
787
+ type: string
788
+ description: |
789
+ U.S. federal income tax treatment of the transaction. Look in the "Material U.S. Federal Income Tax Consequences" section — this is where tax treatment is characterized. If that section is not present in the provided text, return not_disclosed.
790
+
791
+ Decision rule:
792
+ - tax_free: ONLY when the filing explicitly says the transaction is intended to qualify as a "reorganization within the meaning of Section 368(a)" of the Internal Revenue Code (or equivalent tax-free reorganization language — Section 351, Section 332, etc.). The phrase "Section 368(a)" or "reorganization" is the canonical signal. The snippet you return MUST contain this language verbatim.
793
+ - taxable: when the filing explicitly states target shareholders will recognize taxable gain/loss on the entire consideration. Common in all-cash deals.
794
+ - partially_taxable: when the filing states the transaction has both taxable and tax-free components (e.g., cash boot in an otherwise tax-free reorganization).
795
+ - not_disclosed: when the filing does not characterize tax treatment in the text you are reading. This is the correct default for debt exchange offers, redomestications, and any filing missing a tax-consequences section. Do NOT guess from deal structure (all-stock does not automatically mean tax_free).
796
+
797
+ Worked examples (from real S-4 audit failures):
798
+ - Filing says "intended to qualify as a reorganization within the meaning of Section 368(a)" → tax_free (this is the canonical formula — never classify this as taxable).
799
+ - Filing says "the Merger will be a taxable transaction for U.S. federal income tax purposes" → taxable.
800
+ - Debt exchange offer with no tax section in the text → not_disclosed (do NOT commit to tax_free just because it's an exchange).
801
+ - All-stock merger with no Section 368 language anywhere in the document → not_disclosed.
802
+ display_name: "M&A Tax Treatment"
803
+ mergeability: not_mergeable
804
+ domain_flavors: ["sec::s_4"]
805
+ extraction_config:
806
+ level: document
807
+ classification:
808
+ include_snippet: true
809
+ values:
810
+ - name: "tax_free"
811
+ description: "Filing explicitly states the transaction is intended to qualify as a reorganization under Section 368(a) (or similar tax-free reorganization provision). The snippet MUST contain Section 368(a) / reorganization language verbatim."
812
+ - name: "taxable"
813
+ description: "Filing explicitly states the transaction is fully taxable to target shareholders on the entire consideration"
814
+ - name: "partially_taxable"
815
+ description: "Filing states the transaction has both taxable and tax-free components (e.g., cash boot in an otherwise tax-free reorganization)"
816
+ - name: "not_disclosed"
817
+ description: "Filing does not characterize tax treatment in the reviewed text. Default for debt exchange offers, redomestications, and any filing missing a Material U.S. Federal Income Tax Consequences section."
818
+
819
+ - name: "mna_termination_fee_usd"
820
+ type: float
821
+ description: |
822
+ Termination or break-up fee in USD — the amount one party must pay the other if the merger agreement is terminated under specified conditions (e.g., target accepts a superior offer). The termination fee lives in the "Termination" article of the merger agreement, NOT in the consideration section. Return as a plain integer dollar amount with no symbols, units, commas, or words — e.g., 85000000 for $85 million.
823
+
824
+ What qualifies:
825
+ - "termination fee of $X" or "breakup fee of $X" payable by one party to the other on specified termination events.
826
+ - Reciprocal fees: if there are two different figures (one payable by target, one by acquirer), return the LARGER one (typically the target-payable fee).
827
+
828
+ What does NOT qualify — return 'not stated' rather than guessing:
829
+ - The aggregate deal value (typically 20-50x larger).
830
+ - Per-share consideration.
831
+ - SPAC trust amounts or sponsor forfeiture amounts.
832
+ - Advisor/banker fees (e.g., "Goldman Sachs received $23M").
833
+ - Expense reimbursement caps (those are NOT the termination fee — they are typically much smaller, like $5-15M for documented expenses).
834
+
835
+ Worked examples (from real S-4 audit failures):
836
+ - "in the event of termination ... [Target] shall pay [Acquirer] a termination fee equal to $85,000,000" → 85000000.
837
+ - "Goldman Sachs ... $23 million fee" → 'not stated' (advisor fee, not termination fee).
838
+ - "$10 million expense reimbursement" → 'not stated' (expense cap, not termination fee).
839
+ - No "Termination" article in the provided text → 'not stated'.
840
+
841
+ Return 'not stated' if no termination fee is disclosed in the provided text. NEVER return 0 — use 'not stated'.
842
+ display_name: "M&A Termination Fee (USD)"
843
+ mergeability: not_mergeable
844
+ domain_flavors: ["sec::s_4"]
845
+ extraction_config:
846
+ level: document
847
+ literal:
848
+ include_snippet: true
849
+
850
+ - name: "mna_acquisition_target_name"
851
+ type: string
852
+ # The property description is wrapped into the LLM's system instruction
853
+ # by the extraction library. It needs to carry the role definitions,
854
+ # identification strategy, and anti-hedge guidance — the library's own
855
+ # boilerplate is "Extract the exact value as stated in the text. Be
856
+ # precise — return the value exactly as it appears, without
857
+ # interpretation", which primes the model to return "not stated" when
858
+ # it can't find a single self-contained verbatim phrase. The May-22
859
+ # diagnostic run showed 10/16 filings hit that hedge path even on
860
+ # obvious deals (Getty/Shutterstock, Quanterix/Akoya, etc.), so the
861
+ # description must override "verbatim only" with explicit
862
+ # "synthesize from context" framing.
863
+ description: |
864
+ Identify the operating company being acquired in this SEC Form S-4 transaction.
865
+
866
+ An S-4 is filed for a business combination (merger, exchange offer, reverse merger, or de-SPAC). The document has three roles:
867
+
868
+ 1. REGISTRANT (legal acquirer): the public company filing this S-4. It is named in the EXTRACTION CONTEXT block at the start of the filing text.
869
+
870
+ 2. TRANSITORY MERGER SUBSIDIARY: a wholly-owned shell the registrant creates solely to merge with the target. Names typically contain "Merger Sub", "Acquisition Sub", "Acquisition Corp", or numbered variants. Dissolves at closing — never the target.
871
+
872
+ 3. TARGET: the operating company being acquired. Its shares are converted or cancelled at the Effective Time; its shareholders receive the registrant's shares or cash consideration. This is what you must return.
873
+
874
+ The most reliable text anchor for the target is the Merger Consideration clause: "Each share of [TARGET] common stock outstanding immediately prior to the Effective Time shall be converted into the right to receive [consideration]." The company whose stock is being converted is the target.
875
+
876
+ Identifying the target requires INFERENCE across the document — the target's name is rarely stated in a single self-contained "the target is X" sentence. Synthesize from the Merger Consideration clause, the merger agreement parties list ("by and among ..."), the Q&A section ("Who is merging?", "What will [target] stockholders receive?"), and the "Information About the Companies" subsection of the Summary.
877
+
878
+ For reverse mergers and de-SPAC transactions, the operating company being acquired is the target — even when it is designated as the "accounting acquirer" under ASC 805. Follow legal structure, not accounting treatment.
879
+
880
+ Return the target's full legal name with corporate suffix (Inc., LLC, Corp., Ltd., LP, plc) exactly as it appears in the filing.
881
+
882
+ Return "not stated" ONLY when there is no acquisition target at all — debt-for-debt exchange offers, redomestications, jurisdiction redomiciliations, holdco reorganizations, or spin-offs. Do NOT return "not stated" because the target's name doesn't appear in a single self-contained verbatim phrase. The target is essentially always identifiable from the Merger Consideration clause and the merger agreement parties list.
883
+
884
+ Snippet: the verbatim Merger Consideration clause, or any single sentence from the filing that names the target.
885
+ display_name: "M&A Acquisition Target Name"
886
+ mergeability: not_mergeable
887
+ domain_flavors: ["sec::s_4"]
888
+ extraction_config:
889
+ level: document
890
+ literal:
891
+ include_snippet: true
892
+
893
+ - name: "mna_transitory_merger_sub"
894
+ type: string
895
+ description: |
896
+ Identify the transitory merger subsidiary used in this S-4 transaction, if one is named.
897
+
898
+ A transitory merger subsidiary is a wholly-owned shell entity created by the registrant solely to merge with the target. It dissolves at closing. Names typically contain "Merger Sub", "Acquisition Sub", "Acquisition Corp", "Merger Co", or numbered variants (e.g., "Merger Sub I", "Polar Merger Sub, Inc.").
899
+
900
+ The merger sub is NEVER the target — it is a separate role.
901
+
902
+ Return the full legal name of the merger subsidiary with corporate suffix, exactly as it appears in the filing.
903
+
904
+ Return "not stated" only if no transitory merger subsidiary is named (common in direct mergers, exchange offers, and asset purchases where no shell vehicle is interposed).
905
+ display_name: "M&A Transitory Merger Sub"
906
+ mergeability: not_mergeable
907
+ domain_flavors: ["sec::s_4"]
908
+ extraction_config:
909
+ level: document
910
+ literal: {}
911
+
912
+ - name: "mna_target_legal_counsel_name"
913
+ type: string
914
+ description: |
915
+ Name of the law firm representing the acquisition target (the non-registrant party). Found on the S-4 cover page, typically in a "Copies to:" block.
916
+
917
+ Reasoning steps:
918
+ 1. The cover page lists two law firms: one for the registrant (filer), one for the target. Look for a "Copies to:" or "Copies of all communications to:" block.
919
+ 2. The firm whose contact line names an officer of the TARGET (CEO, General Counsel, etc. of the company being acquired) is the target's counsel.
920
+ 3. If the cover-page contact block names two firms side-by-side, the second firm or the one paired with the target-officer contact is target counsel.
921
+
922
+ What qualifies — return the full firm name with suffix:
923
+ - "Sullivan & Cromwell LLP"
924
+ - "Wachtell, Lipton, Rosen & Katz"
925
+ - "Skadden, Arps, Slate, Meagher & Flom LLP"
926
+ - "Dentons US LLP"
927
+ - "Stevens & Lee, P.C."
928
+
929
+ What does NOT qualify — return 'not stated' rather than guess:
930
+ - Advisor / financial advisor names (Goldman Sachs, JPMorgan, Centerview) — those are bankers, not legal counsel.
931
+ - Auditor / accountant names (Deloitte, PwC, KPMG, EY).
932
+ - The acquirer's counsel (only target counsel is wanted here).
933
+ - Generic placeholders like "Legal Counsel" or "Outside Counsel".
934
+
935
+ If only the acquirer's counsel is identified and no separate target counsel block is present, return 'not stated'. Return the full firm name including suffix (LLP, PC, P.C., PLLC, LLC). Snippet should be the cover-page contact block text where you found the firm.
936
+ display_name: "M&A Target Legal Counsel Name"
937
+ mergeability: not_mergeable
938
+ domain_flavors: ["sec::s_4"]
939
+ extraction_config:
940
+ level: document
941
+ literal:
942
+ include_snippet: true
663
943
 
664
944
  # ── XBRL Financial Facts (key concepts) ──
665
945
 
@@ -2535,8 +2815,8 @@ relationships:
2535
2815
  description: "Link from a company or person to a regulatory filing document they filed, or from a sub-record to its parent filing"
2536
2816
  display_name: "Filed"
2537
2817
  mergeability: not_mergeable
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"]
2818
+ 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::s_4", "sec::filing"]
2819
+ 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::s_4", "sec::filing"]
2540
2820
  passive: true
2541
2821
 
2542
2822
  - name: "is_issuer_of"
@@ -2552,7 +2832,7 @@ relationships:
2552
2832
  display_name: "Filing Reference"
2553
2833
  mergeability: not_mergeable
2554
2834
  domain_flavors: ["organization", "person", "financial_instrument"]
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"]
2835
+ 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::s_4"]
2556
2836
  passive: true
2557
2837
 
2558
2838
  # ── Filing → Organization ──
@@ -2561,7 +2841,7 @@ relationships:
2561
2841
  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)"
2562
2842
  display_name: "Issued By"
2563
2843
  mergeability: not_mergeable
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"]
2844
+ 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::s_4", "sec::filing", "financial_instrument"]
2565
2845
  target_flavors: ["organization"]
2566
2846
  passive: true
2567
2847
 
@@ -2569,7 +2849,7 @@ relationships:
2569
2849
  description: "Link from a filing or counterparty to the company the document is principally about"
2570
2850
  display_name: "Refers To"
2571
2851
  mergeability: not_mergeable
2572
- 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", "organization"]
2852
+ 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::s_4", "organization"]
2573
2853
  target_flavors: ["organization"]
2574
2854
  passive: true
2575
2855
 
@@ -2577,7 +2857,7 @@ relationships:
2577
2857
  description: "Link from a filing to the entity (person or organization) who filed it"
2578
2858
  display_name: "Filer"
2579
2859
  mergeability: not_mergeable
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"]
2860
+ 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::s_4", "sec::filing"]
2581
2861
  target_flavors: ["organization", "person"]
2582
2862
  passive: true
2583
2863
 
@@ -2860,6 +3140,56 @@ relationships:
2860
3140
  target_flavors: ["financial_instrument"]
2861
3141
  passive: true
2862
3142
 
3143
+ # ── S-4 M&A Relationships ──
3144
+
3145
+ - name: "has_acquisition_target"
3146
+ description: "Link from an acquiring organization to the company being acquired in a merger or acquisition disclosed via Form S-4."
3147
+ display_name: "Has Acquisition Target"
3148
+ mergeability: not_mergeable
3149
+ domain_flavors: ["organization"]
3150
+ target_flavors: ["organization"]
3151
+ passive: true
3152
+
3153
+ - name: "is_acquisition_target_of"
3154
+ description: "Inverse of has_acquisition_target. Link from the target company to the acquirer in a merger or acquisition disclosed via Form S-4."
3155
+ display_name: "Is Acquisition Target Of"
3156
+ mergeability: not_mergeable
3157
+ domain_flavors: ["organization"]
3158
+ target_flavors: ["organization"]
3159
+ passive: true
3160
+
3161
+ - name: "has_target_legal_counsel"
3162
+ description: "Link from an acquirer to the law firm acting as legal counsel to the target company in an S-4 merger transaction."
3163
+ display_name: "Has Target Legal Counsel"
3164
+ mergeability: not_mergeable
3165
+ domain_flavors: ["organization"]
3166
+ target_flavors: ["organization"]
3167
+ passive: true
3168
+
3169
+ - name: "is_target_legal_counsel_of"
3170
+ description: "Link from a law firm to the company it represents as target legal counsel in an S-4 merger transaction."
3171
+ display_name: "Is Target Legal Counsel Of"
3172
+ mergeability: not_mergeable
3173
+ domain_flavors: ["organization"]
3174
+ target_flavors: ["organization"]
3175
+ passive: true
3176
+
3177
+ - name: "has_acquired"
3178
+ description: "Link from an acquiring organization to a company it has acquired, where the merger has closed. Distinguishes completed acquisitions from pending ones (see has_acquisition_target). Emitted from S-4MEF and F-4MEF filings — Merger Effective registrations filed at or after the merger's effective date."
3179
+ display_name: "Has Acquired"
3180
+ mergeability: not_mergeable
3181
+ domain_flavors: ["organization"]
3182
+ target_flavors: ["organization"]
3183
+ passive: true
3184
+
3185
+ - name: "was_acquired_by"
3186
+ description: "Inverse of has_acquired. Link from a company to the organization that has acquired it, where the merger has closed."
3187
+ display_name: "Was Acquired By"
3188
+ mergeability: not_mergeable
3189
+ domain_flavors: ["organization"]
3190
+ target_flavors: ["organization"]
3191
+ passive: true
3192
+
2863
3193
  # =============================================================================
2864
3194
  # ATTRIBUTES
2865
3195
  # =============================================================================