repos
2.0 KB raw
-- finance migration 0006: company leadership (Phase 14).
--
-- A company's officers and board, parsed from SEC Form 3/4/5 ownership XML
-- (each filing carries a structured reportingOwnerRelationship), plus the
-- 8-K item-5.02 leadership-change events surfaced from the filing history.
-- Stocks only: ETFs and indexes have no officers or board to track.

-- When this stock's leadership roster was last refreshed from SEC. NULL = never.
ALTER TABLE symbols ADD COLUMN leadership_synced_at INTEGER;

-- The 8-K item codes a filing reported, comma-separated as EDGAR's submissions
-- feed lists them (e.g. '5.02,9.01'). Set for 8-K rows; NULL for other forms
-- and for filing rows stored before this migration (refilled on the next SEC
-- sync). Item 5.02 is the officer/director departure-and-appointment event,
-- which the symbol page reads as the leadership-changes feed.
ALTER TABLE filings ADD COLUMN items TEXT;

-- One row per current insider of a company: its directors and Section-16
-- officers, identified by the reportingOwnerRelationship booleans on their
-- ownership filings. Filers who are only >10% beneficial owners (institutions)
-- are not stored — they are not leadership. Upserted incrementally as new
-- ownership filings are parsed; `last_seen` is the most recent ownership
-- filing date observed for the person, used to order the roster and to age out
-- insiders who have gone quiet (a rough proxy for a departure, since ownership
-- filings carry no clean "left the company" signal).
CREATE TABLE leadership (
    ticker        TEXT NOT NULL REFERENCES symbols(ticker) ON DELETE CASCADE,
    name          TEXT NOT NULL,            -- as filed: last-name-first, upper-case
    is_director   INTEGER NOT NULL DEFAULT 0,
    is_officer    INTEGER NOT NULL DEFAULT 0,
    officer_title TEXT,                      -- when is_officer, e.g. 'Chief Executive Officer'
    last_seen     TEXT NOT NULL,             -- most recent ownership filing date, YYYY-MM-DD
    PRIMARY KEY (ticker, name)
);