@@ -922,6 +922,60 @@ def from_dict(d):
922922 )
923923
924924
925+ @modelclass
926+ @dataclass
927+ class Filing13F :
928+ """SEC Form 13F filings data showing institutional investment manager holdings."""
929+
930+ accession_number : Optional [str ] = None
931+ cusip : Optional [str ] = None
932+ file_number : Optional [str ] = None
933+ filer_cik : Optional [str ] = None
934+ filing_date : Optional [str ] = None
935+ filing_url : Optional [str ] = None
936+ film_number : Optional [str ] = None
937+ form_type : Optional [str ] = None
938+ investment_discretion : Optional [str ] = None
939+ issuer_name : Optional [str ] = None
940+ market_value : Optional [int ] = None
941+ other_managers : Optional [List [str ]] = None
942+ period : Optional [str ] = None
943+ put_call : Optional [str ] = None
944+ shares_or_principal_amount : Optional [int ] = None
945+ shares_or_principal_type : Optional [str ] = None
946+ title_of_class : Optional [str ] = None
947+ voting_authority_none : Optional [int ] = None
948+ voting_authority_shared : Optional [int ] = None
949+ voting_authority_sole : Optional [int ] = None
950+
951+ @staticmethod
952+ def from_dict (d : Optional [Dict [str , Any ]]) -> "Filing13F" :
953+ if not d :
954+ return Filing13F ()
955+ return Filing13F (
956+ accession_number = d .get ("accession_number" ),
957+ cusip = d .get ("cusip" ),
958+ file_number = d .get ("file_number" ),
959+ filer_cik = d .get ("filer_cik" ),
960+ filing_date = d .get ("filing_date" ),
961+ filing_url = d .get ("filing_url" ),
962+ film_number = d .get ("film_number" ),
963+ form_type = d .get ("form_type" ),
964+ investment_discretion = d .get ("investment_discretion" ),
965+ issuer_name = d .get ("issuer_name" ),
966+ market_value = d .get ("market_value" ),
967+ other_managers = d .get ("other_managers" ),
968+ period = d .get ("period" ),
969+ put_call = d .get ("put_call" ),
970+ shares_or_principal_amount = d .get ("shares_or_principal_amount" ),
971+ shares_or_principal_type = d .get ("shares_or_principal_type" ),
972+ title_of_class = d .get ("title_of_class" ),
973+ voting_authority_none = d .get ("voting_authority_none" ),
974+ voting_authority_shared = d .get ("voting_authority_shared" ),
975+ voting_authority_sole = d .get ("voting_authority_sole" ),
976+ )
977+
978+
925979@modelclass
926980class FilingSection :
927981 """SEC document text section from a 10-K/10-Q (raw text content)."""
@@ -947,6 +1001,206 @@ def from_dict(d):
9471001 )
9481002
9491003
1004+ @modelclass
1005+ @dataclass
1006+ class FilingFootnote :
1007+ """Footnote from SEC Form 3/4 filings."""
1008+
1009+ id : Optional [str ] = None
1010+ description : Optional [str ] = None
1011+
1012+ @staticmethod
1013+ def from_dict (d : Optional [Dict [str , Any ]]) -> "FilingFootnote" :
1014+ if not d :
1015+ return FilingFootnote ()
1016+ return FilingFootnote (
1017+ id = d .get ("id" ),
1018+ description = d .get ("description" ),
1019+ )
1020+
1021+
1022+ @modelclass
1023+ @dataclass
1024+ class FilingForm3 :
1025+ """SEC Form 3 filings reporting initial statements of beneficial ownership of securities.
1026+ Filed by corporate insiders (directors, officers, and 10%+ shareholders) when they first acquire a position.
1027+ """
1028+
1029+ accession_number : Optional [str ] = None
1030+ aff_10b5_one : Optional [bool ] = None
1031+ date_of_original_submission : Optional [str ] = None
1032+ direct_or_indirect : Optional [str ] = None
1033+ exercise_date : Optional [str ] = None
1034+ exercise_price : Optional [float ] = None
1035+ filing_date : Optional [str ] = None
1036+ filing_url : Optional [str ] = None
1037+ footnotes : Optional [List [FilingFootnote ]] = None
1038+ form_type : Optional [str ] = None
1039+ is_director : Optional [bool ] = None
1040+ is_officer : Optional [bool ] = None
1041+ is_other : Optional [bool ] = None
1042+ is_ten_percent_owner : Optional [bool ] = None
1043+ issuer_cik : Optional [str ] = None
1044+ issuer_name : Optional [str ] = None
1045+ nature_of_ownership : Optional [str ] = None
1046+ not_subject_to_section_16 : Optional [bool ] = None
1047+ officer_title : Optional [str ] = None
1048+ owner_cik : Optional [str ] = None
1049+ owner_name : Optional [str ] = None
1050+ period_of_report : Optional [str ] = None
1051+ remarks : Optional [str ] = None
1052+ security_title : Optional [str ] = None
1053+ security_type : Optional [str ] = None
1054+ shares_owned : Optional [float ] = None
1055+ tickers : Optional [List [str ]] = None
1056+ underlying_security_shares : Optional [float ] = None
1057+ underlying_security_title : Optional [str ] = None
1058+
1059+ @staticmethod
1060+ def from_dict (d : Optional [Dict [str , Any ]]) -> "FilingForm3" :
1061+ if not d :
1062+ return FilingForm3 ()
1063+ footnotes = d .get ("footnotes" )
1064+ return FilingForm3 (
1065+ accession_number = d .get ("accession_number" ),
1066+ aff_10b5_one = d .get ("aff_10b5_one" ),
1067+ date_of_original_submission = d .get ("date_of_original_submission" ),
1068+ direct_or_indirect = d .get ("direct_or_indirect" ),
1069+ exercise_date = d .get ("exercise_date" ),
1070+ exercise_price = d .get ("exercise_price" ),
1071+ filing_date = d .get ("filing_date" ),
1072+ filing_url = d .get ("filing_url" ),
1073+ footnotes = (
1074+ [FilingFootnote .from_dict (f ) for f in footnotes ]
1075+ if footnotes is not None
1076+ else None
1077+ ),
1078+ form_type = d .get ("form_type" ),
1079+ is_director = d .get ("is_director" ),
1080+ is_officer = d .get ("is_officer" ),
1081+ is_other = d .get ("is_other" ),
1082+ is_ten_percent_owner = d .get ("is_ten_percent_owner" ),
1083+ issuer_cik = d .get ("issuer_cik" ),
1084+ issuer_name = d .get ("issuer_name" ),
1085+ nature_of_ownership = d .get ("nature_of_ownership" ),
1086+ not_subject_to_section_16 = d .get ("not_subject_to_section_16" ),
1087+ officer_title = d .get ("officer_title" ),
1088+ owner_cik = d .get ("owner_cik" ),
1089+ owner_name = d .get ("owner_name" ),
1090+ period_of_report = d .get ("period_of_report" ),
1091+ remarks = d .get ("remarks" ),
1092+ security_title = d .get ("security_title" ),
1093+ security_type = d .get ("security_type" ),
1094+ shares_owned = d .get ("shares_owned" ),
1095+ tickers = d .get ("tickers" ),
1096+ underlying_security_shares = d .get ("underlying_security_shares" ),
1097+ underlying_security_title = d .get ("underlying_security_title" ),
1098+ )
1099+
1100+
1101+ @modelclass
1102+ @dataclass
1103+ class FilingForm4 :
1104+ """SEC Form 4 filings reporting changes in beneficial ownership of securities.
1105+ Filed by corporate insiders (directors, officers, and 10%+ shareholders) within two business days of a transaction.
1106+ """
1107+
1108+ accession_number : Optional [str ] = None
1109+ aff_10b5_one : Optional [bool ] = None
1110+ date_of_original_submission : Optional [str ] = None
1111+ deemed_execution_date : Optional [str ] = None
1112+ direct_or_indirect : Optional [str ] = None
1113+ equity_swap_involved : Optional [bool ] = None
1114+ exercise_date : Optional [str ] = None
1115+ exercise_price : Optional [float ] = None
1116+ expiration_date : Optional [str ] = None
1117+ filing_date : Optional [str ] = None
1118+ filing_url : Optional [str ] = None
1119+ footnotes : Optional [List [FilingFootnote ]] = None
1120+ form_type : Optional [str ] = None
1121+ is_director : Optional [bool ] = None
1122+ is_officer : Optional [bool ] = None
1123+ is_other : Optional [bool ] = None
1124+ is_ten_percent_owner : Optional [bool ] = None
1125+ issuer_cik : Optional [str ] = None
1126+ issuer_name : Optional [str ] = None
1127+ nature_of_ownership : Optional [str ] = None
1128+ not_subject_to_section_16 : Optional [bool ] = None
1129+ officer_title : Optional [str ] = None
1130+ owner_cik : Optional [str ] = None
1131+ owner_name : Optional [str ] = None
1132+ period_of_report : Optional [str ] = None
1133+ record_type : Optional [str ] = None
1134+ remarks : Optional [str ] = None
1135+ security_title : Optional [str ] = None
1136+ security_type : Optional [str ] = None
1137+ shares_owned_following_transaction : Optional [float ] = None
1138+ tickers : Optional [List [str ]] = None
1139+ transaction_acquired_disposed : Optional [str ] = None
1140+ transaction_code : Optional [str ] = None
1141+ transaction_date : Optional [str ] = None
1142+ transaction_price_per_share : Optional [float ] = None
1143+ transaction_shares : Optional [float ] = None
1144+ transaction_timeliness : Optional [str ] = None
1145+ transaction_value : Optional [float ] = None
1146+ underlying_security_shares : Optional [float ] = None
1147+ underlying_security_title : Optional [str ] = None
1148+
1149+ @staticmethod
1150+ def from_dict (d : Optional [Dict [str , Any ]]) -> "FilingForm4" :
1151+ if not d :
1152+ return FilingForm4 ()
1153+ footnotes = d .get ("footnotes" )
1154+ return FilingForm4 (
1155+ accession_number = d .get ("accession_number" ),
1156+ aff_10b5_one = d .get ("aff_10b5_one" ),
1157+ date_of_original_submission = d .get ("date_of_original_submission" ),
1158+ deemed_execution_date = d .get ("deemed_execution_date" ),
1159+ direct_or_indirect = d .get ("direct_or_indirect" ),
1160+ equity_swap_involved = d .get ("equity_swap_involved" ),
1161+ exercise_date = d .get ("exercise_date" ),
1162+ exercise_price = d .get ("exercise_price" ),
1163+ expiration_date = d .get ("expiration_date" ),
1164+ filing_date = d .get ("filing_date" ),
1165+ filing_url = d .get ("filing_url" ),
1166+ footnotes = (
1167+ [FilingFootnote .from_dict (f ) for f in footnotes ]
1168+ if footnotes is not None
1169+ else None
1170+ ),
1171+ form_type = d .get ("form_type" ),
1172+ is_director = d .get ("is_director" ),
1173+ is_officer = d .get ("is_officer" ),
1174+ is_other = d .get ("is_other" ),
1175+ is_ten_percent_owner = d .get ("is_ten_percent_owner" ),
1176+ issuer_cik = d .get ("issuer_cik" ),
1177+ issuer_name = d .get ("issuer_name" ),
1178+ nature_of_ownership = d .get ("nature_of_ownership" ),
1179+ not_subject_to_section_16 = d .get ("not_subject_to_section_16" ),
1180+ officer_title = d .get ("officer_title" ),
1181+ owner_cik = d .get ("owner_cik" ),
1182+ owner_name = d .get ("owner_name" ),
1183+ period_of_report = d .get ("period_of_report" ),
1184+ record_type = d .get ("record_type" ),
1185+ remarks = d .get ("remarks" ),
1186+ security_title = d .get ("security_title" ),
1187+ security_type = d .get ("security_type" ),
1188+ shares_owned_following_transaction = d .get (
1189+ "shares_owned_following_transaction"
1190+ ),
1191+ tickers = d .get ("tickers" ),
1192+ transaction_acquired_disposed = d .get ("transaction_acquired_disposed" ),
1193+ transaction_code = d .get ("transaction_code" ),
1194+ transaction_date = d .get ("transaction_date" ),
1195+ transaction_price_per_share = d .get ("transaction_price_per_share" ),
1196+ transaction_shares = d .get ("transaction_shares" ),
1197+ transaction_timeliness = d .get ("transaction_timeliness" ),
1198+ transaction_value = d .get ("transaction_value" ),
1199+ underlying_security_shares = d .get ("underlying_security_shares" ),
1200+ underlying_security_title = d .get ("underlying_security_title" ),
1201+ )
1202+
1203+
9501204@modelclass
9511205class Filing8K :
9521206 """Parsed 8-K filing with item-level text content."""
0 commit comments