You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
When the rule parser can't classify an 8-K and falls back to Stock Oracle's filing-events API, Oracle's vocabulary (e.g. earnings_result, shareholder_vote, regulation_fd) was being written verbatim into events.event_type. The DB has no CHECK constraint (libs/db/models.py:189), so 22 distinct Oracle values silently leaked into a column the strategy's engine filters expect to be in its 4-event vocabulary. Result: ~1,069 live rows silently dropped from strategy candidate pool. Files: - NEW libs/parser/event_type_normalizer.py: normalize_oracle_event_type() with conservative synonym map; normalize_oracle_event() additionally uses _classify_event_type from rule_parser when an item_number is present (item-code path is more reliable than Oracle's event taxonomy) - MOD apps/pipeline/event_parser/main.py: oracle-fallback branch (~line 140) now calls normalize_oracle_event before writing to DB; emits oracle_event_type_normalized log event when value changes - NEW tests/unit/test_event_type_normalizer.py: 60 tests covering identity, synonyms, case/separator insensitivity, None/empty, non-string, item_number-precedence Mapping highlights (justifications in test docstrings): earnings_result/earnings_announcement/earnings -> earnings_release guidance_revision/guidance_change/regulation_fd -> guidance_update material_definitive_agreement/definitive_agreement -> material_contract shareholder_vote/acquisition_disposition/bankruptcy/other -> other_material_event Reg FD -> guidance_update mirrors rule_parser's Item 7.01 mapping for internal consistency. Debatable but auditable. Conservative pass-through for ambiguous values (financial_obligation, articles_amendment, contract_termination, etc., 14 distinct values). Visible filter-drop > silent re-tag. Live DB counts that would reclassify on a future --reparse pass: 412 earnings_result -> earnings_release 409 shareholder_vote -> other_material_event 237 regulation_fd -> guidance_update 7 acquisition_disposition -> other_material_event 4 other -> other_material_event TOTAL 1,069 rows currently in oracle-fallback dead-zone. 60/60 normalizer tests pass; combined parser+schema validator suite 86/86. Follow-up flagged: run --reparse on historical oracle-fallback rows after extending reparse_events() to also re-normalize known oracle-fallback values (currently only re-parses event_type='unknown'). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
3 months ago | |
|---|---|---|
| .. | ||
| backtest | 3 months ago | |
| common | 4 months ago | |
| db | 5 months ago | |
| export | 3 months ago | |
| features | 4 months ago | |
| intraday | 4 months ago | |
| labeler | 3 months ago | |
| llm | 5 months ago | |
| oracle_client | 4 months ago | |
| parser | 3 months ago | |
| review | 5 months ago | |
| schemas | 5 months ago | |
| __init__.py | 5 months ago | |