Universe import
Export your master universe spreadsheet as CSV and drop it here. Nothing is written until you review the preview and press import. Existing companies, signals, briefs and analytical cores are never overwritten — matched companies only have empty identity fields filled in.
Column order does not matter and unknown columns are ignored. Any column named report_url_YYYY is detected automatically, so adding 2025 or 2026 needs no code change.
The spreadsheet is a bootstrap and override source, not the long-term workflow. Every report record already carries origin, provider, canonical URL, discovery and publication dates, period, and separate validation / fetch / parse states — so an automated discovery job can add a newly published filing to the same registry without any spreadsheet edit and without changing the company model. Rows imported here are stored as source_origin = manual_registry; future feeds will write their own origin against the same identity key (company + document type + year + period).
- 1DiscoverLive
Manual workbook import. Planned: issuer IR pages, RSS/announcement feeds, exchange and regulatory filing feeds, ESEF/xHTML report indexes.
- 2ValidateField exists, worker not built
Check that each canonical URL resolves and points at the right issuer, year and period. Malformed URLs are already registered as invalid rather than blocking the import.
- 3FetchField exists, worker not built
Retrieve the document, store a content hash, and record when it was last checked so re-publication is detectable.
- 4ParseField exists, worker not built
Extract readable text and structure per document type: annual report, interim report, presentation, earnings release, transcript.
- 5AnalyzeLive for a small set, manual
Claims, signals and briefs. No expensive batch LLM run happens on import.
- 6Re-evaluate hypothesesNot built
When a new filing lands for a company that already has an analytical core, re-test existing hypotheses and watch items against the new evidence.
Nothing above fetches or reads documents today. Registered reports sit at status = registered, fetch_status = pending, parse_status = pending until a worker picks them up.