Add category and tags granularity to company sync flows
This commit is contained in:
@@ -155,6 +155,37 @@ function parseLimit(raw: unknown, fallback: number, min: number, max: number) {
|
||||
return Math.min(Math.max(intValue, min), max);
|
||||
}
|
||||
|
||||
function parseOptionalText(raw: unknown) {
|
||||
if (typeof raw !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const normalized = raw.trim();
|
||||
return normalized.length > 0 ? normalized : null;
|
||||
}
|
||||
|
||||
function parseTags(raw: unknown) {
|
||||
if (!Array.isArray(raw)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const unique = new Set<string>();
|
||||
for (const entry of raw) {
|
||||
if (typeof entry !== 'string') {
|
||||
continue;
|
||||
}
|
||||
|
||||
const tag = entry.trim();
|
||||
if (!tag) {
|
||||
continue;
|
||||
}
|
||||
|
||||
unique.add(tag);
|
||||
}
|
||||
|
||||
return [...unique];
|
||||
}
|
||||
|
||||
function sanitizeExtractionText(value: unknown, maxLength: number) {
|
||||
if (typeof value !== 'string') {
|
||||
return null;
|
||||
@@ -519,8 +550,20 @@ function filingLinks(filing: {
|
||||
async function processSyncFilings(task: Task) {
|
||||
const ticker = parseTicker(task.payload.ticker);
|
||||
const limit = parseLimit(task.payload.limit, 20, 1, 50);
|
||||
const category = parseOptionalText(task.payload.category);
|
||||
const tags = parseTags(task.payload.tags);
|
||||
const scopeLabel = [
|
||||
category,
|
||||
tags.length > 0 ? `tags: ${tags.join(', ')}` : null
|
||||
]
|
||||
.filter((entry): entry is string => Boolean(entry))
|
||||
.join(' | ');
|
||||
|
||||
await setProjectionStage(task, 'sync.fetch_filings', `Fetching up to ${limit} filings for ${ticker}`);
|
||||
await setProjectionStage(
|
||||
task,
|
||||
'sync.fetch_filings',
|
||||
`Fetching up to ${limit} filings for ${ticker}${scopeLabel ? ` (${scopeLabel})` : ''}`
|
||||
);
|
||||
const filings = await fetchRecentFilings(ticker, limit);
|
||||
const metricsByAccession = new Map<string, Filing['metrics']>();
|
||||
const filingsByCik = new Map<string, typeof filings>();
|
||||
@@ -631,6 +674,8 @@ async function processSyncFilings(task: Task) {
|
||||
|
||||
return {
|
||||
ticker,
|
||||
category,
|
||||
tags,
|
||||
fetched: filings.length,
|
||||
inserted: saveResult.inserted,
|
||||
updated: saveResult.updated,
|
||||
|
||||
Reference in New Issue
Block a user