fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
111 lines
3.0 KiB
Python
111 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Stable machine-readable result schema metadata."""
|
|
|
|
from __future__ import annotations
|
|
|
|
SCREEN_RESULT_SCHEMA_VERSION = 1
|
|
|
|
SCREEN_RESULT_SCHEMA: dict[str, object] = {
|
|
"schema_version": SCREEN_RESULT_SCHEMA_VERSION,
|
|
"object": "ScreenResult",
|
|
"top_level_fields": [
|
|
"strategy",
|
|
"market",
|
|
"strategy_version",
|
|
"strategy_category",
|
|
"snapshot_count",
|
|
"after_filter_count",
|
|
"picks",
|
|
"run_id",
|
|
"llm_ranked",
|
|
"llm_coverage",
|
|
"llm_parse_errors",
|
|
"degradation",
|
|
"snapshot_source",
|
|
"source_errors",
|
|
"deep_analysis_requested",
|
|
"post_analyzers",
|
|
"daily_enriched",
|
|
"daily_enrich_count",
|
|
"risk_enabled",
|
|
"portfolio_diversity_enabled",
|
|
"portfolio_concentration_notes",
|
|
"created_at",
|
|
],
|
|
"pick_fields": [
|
|
"rank",
|
|
"code",
|
|
"name",
|
|
"final_score",
|
|
"screen_score",
|
|
"factor_scores",
|
|
"ranking_reason",
|
|
"risk_summary",
|
|
"risk_score",
|
|
"risk_level",
|
|
"risk_flags",
|
|
"portfolio_penalty",
|
|
"portfolio_flags",
|
|
"industry",
|
|
"concepts",
|
|
"board_heat_score",
|
|
"board_heat_summary",
|
|
"daily_quality_score",
|
|
"daily_quality_flags",
|
|
"daily_source",
|
|
"post_analysis_status",
|
|
"post_analysis_summaries",
|
|
"post_analysis_score_deltas",
|
|
"post_analysis_tags",
|
|
"dsa_context",
|
|
"dsa_news",
|
|
"dsa_analysis_summary",
|
|
"deep_analysis_status",
|
|
"deep_analysis_query_id",
|
|
"deep_analysis_summary",
|
|
"deep_analysis_error",
|
|
"deep_analysis_signal_score",
|
|
"deep_analysis_sentiment_score",
|
|
"deep_analysis_operation_advice",
|
|
"deep_analysis_trend_prediction",
|
|
"deep_analysis_risk_flags",
|
|
],
|
|
"ui_card_fields": {
|
|
"identity": ["rank", "code", "name", "final_score", "screen_score"],
|
|
"source_health": [
|
|
"snapshot_source",
|
|
"source_errors",
|
|
"daily_source",
|
|
"daily_quality_flags",
|
|
],
|
|
"risk": ["risk_level", "risk_flags", "portfolio_flags", "risk_summary"],
|
|
"watch": [
|
|
"llm_watch_items",
|
|
"llm_invalidators",
|
|
"deep_analysis_operation_advice",
|
|
],
|
|
"post_analysis": [
|
|
"post_analysis_status",
|
|
"post_analysis_summaries",
|
|
"post_analysis_tags",
|
|
],
|
|
},
|
|
"non_goals": [
|
|
"AlphaSift does not execute trades.",
|
|
"AlphaSift does not provide full portfolio accounting.",
|
|
"DSA is optional and must not be required for core screening.",
|
|
],
|
|
}
|
|
|
|
|
|
def screen_result_schema() -> dict[str, object]:
|
|
"""Return a copy of the stable ScreenResult schema metadata."""
|
|
return {
|
|
key: value.copy()
|
|
if isinstance(value, dict)
|
|
else list(value)
|
|
if isinstance(value, list)
|
|
else value
|
|
for key, value in SCREEN_RESULT_SCHEMA.items()
|
|
}
|