getRecentFilings method
Fetch recent SEC filings for a company.
forms filters by form type (e.g., ['8-K', '10-K']).
limit caps the number of filings returned.
Implementation
@override
Future<List<SecFiling>> getRecentFilings(
String ticker, {
List<String>? forms,
int limit = 10,
}) async {
final cik = await getCik(ticker);
if (cik == null) {
throw Exception('Ticker $ticker not found.');
}
final cikStr = cik.toString().padLeft(10, '0');
final url = '$_submissionsUrl/CIK$cikStr.json';
_logger.info('Fetching filings for $ticker (CIK: $cikStr)...');
final response = await _get(url);
final data = json.decode(response.body) as Map<String, dynamic>;
// Parse recent filings from the response
final recentFilings = data['filings']?['recent'] as Map<String, dynamic>?;
if (recentFilings == null) {
return [];
}
final accessionNumbers = recentFilings['accessionNumber'] as List<dynamic>;
final formTypes = recentFilings['form'] as List<dynamic>;
final filingDates = recentFilings['filingDate'] as List<dynamic>;
final primaryDocuments = recentFilings['primaryDocument'] as List<dynamic>;
final descriptions =
recentFilings['primaryDocDescription'] as List<dynamic>?;
final filings = <SecFiling>[];
for (var i = 0;
i < accessionNumbers.length && filings.length < limit;
i++) {
final form = formTypes[i] as String;
// Filter by form type if specified
if (forms != null && !forms.contains(form)) {
continue;
}
filings.add(
SecFiling(
accessionNumber: accessionNumbers[i] as String,
form: form,
filingDate: DateTime.parse(filingDates[i] as String),
primaryDocument: primaryDocuments[i] as String,
description: descriptions?[i] as String? ?? '',
cik: cik,
),
);
}
_logger.info('Found ${filings.length} filings for $ticker.');
return filings;
}