The A5 cutover has been on and observed in production, so SEC Company Facts + DoltHub earnings are already the live source for `fundamental_data`. This removes everything the legacy path still occupied. Gone: the three providers and their config/env keys; the weekly `fundamental_collector` job; the cutover toggle (SEC + Dolt is now the unconditional path, so `off` can no longer silently freeze scoring inputs); the A5 parity report, whose deltas became structurally zero once the candidate builder started writing the table it compared against; and the FMP tier of universe bootstrap. Two behavioral notes: - Disabling **SEC Fundamentals Import** now stops the SEC network fetch only. The local cache refresh moved outside the job-enable check, because candidates also derive from daily closes and earnings events — freezing those on an ingestion pause would stale scoring with no fallback left to recover from. - `/ingestion/fetch?sources=fundamentals` still accepts the key and reports `skipped`; there is no per-ticker fetch any more. Migration 029 does not blanket-delete the leftover settings rows. Migrations run before the service restart, and pre-A6 code reads an absent `job_*_enabled` row as *enabled* — so the two behavior-bearing keys become tombstones pinned to safe values (hidden in Admin) and only the inert three are deleted. Removing the provider keys from the production `.env` is the matching rollout step. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
import apiClient from './client';
|
|
|
|
export interface IngestionSourceResult {
|
|
status: 'ok' | 'error' | 'skipped' | 'warning';
|
|
message?: string | null;
|
|
records?: number;
|
|
classification?: string;
|
|
confidence?: number;
|
|
}
|
|
|
|
export interface FetchDataResult {
|
|
symbol: string;
|
|
sources: Record<string, IngestionSourceResult>;
|
|
}
|
|
|
|
/** Provider sources that cost an API call/quota. */
|
|
export type FetchSource = 'ohlcv' | 'sentiment';
|
|
/** Source selector: omit → fetch all; array → those providers; 'recompute' → derived only (free). */
|
|
export type FetchSelector = FetchSource[] | 'recompute';
|
|
|
|
export function fetchData(symbol: string, sources?: FetchSelector) {
|
|
let sourcesParam: string | undefined;
|
|
if (sources === 'recompute') sourcesParam = 'recompute';
|
|
else if (sources && sources.length) sourcesParam = sources.join(',');
|
|
const params = sourcesParam ? { sources: sourcesParam } : undefined;
|
|
return apiClient
|
|
.post<FetchDataResult>(`ingestion/fetch/${symbol}`, null, { params })
|
|
.then((r) => r.data);
|
|
}
|