"""SEC filings — recent 10-K, 10-Q, 8-K and other forms with direct links.""" import streamlit as st from services.data_service import get_sec_filings _FORM_DESCRIPTIONS = { "10-K": "Annual report", "10-Q": "Quarterly report", "8-K": "Material event disclosure", "DEF 14A": "Proxy statement", "S-1": "IPO registration", "S-3": "Securities registration", "4": "Insider ownership change", "SC 13G": "Beneficial ownership (passive)", "SC 13D": "Beneficial ownership (active)", } _FORM_COLORS = { "10-K": "rgba(79,142,247,0.15)", "10-Q": "rgba(130,224,170,0.15)", "8-K": "rgba(247,162,79,0.15)", } def render_filings(ticker: str): with st.spinner("Loading SEC filings…"): filings = get_sec_filings(ticker) if not filings: st.info("No SEC filing data available for this ticker.") return # yfinance returns: date (datetime.date), type, title, edgarUrl, exhibits (dict) form_types = sorted({str(f.get("type", "")).strip() for f in filings if f.get("type")}) priority = [t for t in ["10-K", "10-Q", "8-K"] if t in form_types] other = [t for t in form_types if t not in ("10-K", "10-Q", "8-K")] filter_options = ["All"] + priority + other filter_col, _ = st.columns([1, 3]) with filter_col: selected_type = st.selectbox("Form type", options=filter_options, index=0, key="filings_filter") # Summary counts counts = {} for f in filings: ft = str(f.get("type", "Other")).strip() counts[ft] = counts.get(ft, 0) + 1 if priority: cols = st.columns(len(priority)) for col, ft in zip(cols, priority): col.metric(ft, counts.get(ft, 0)) st.write("") filtered = filings if selected_type == "All" else [ f for f in filings if str(f.get("type", "")).strip() == selected_type ] if not filtered: st.info("No filings match the current filter.") return for item in filtered[:40]: form = str(item.get("type", "—")).strip() date = str(item.get("date", ""))[:10] title = item.get("title") or _FORM_DESCRIPTIONS.get(form, "") edgar_url = item.get("edgarUrl", "") exhibits = item.get("exhibits") or {} color = _FORM_COLORS.get(form, "rgba(255,255,255,0.05)") with st.container(): left, right = st.columns([5, 1]) with left: st.markdown( f"
" f"{form}  ·  " f"{date}
" f"{title}" f"
", unsafe_allow_html=True, ) with right: # Prefer the actual filing doc over the Yahoo index page doc_url = exhibits.get(form) or edgar_url if doc_url: st.markdown( f"
🔗 View
", unsafe_allow_html=True, )